Flutter:如何在库比蒂诺主题中设置材质小部件的主题?

Kav*_*hao 4 flutter flutter-cupertino flutter-theme

我有一个 Flutter 应用程序,它使用 Android 的 Material 主题和 iOS 的 Cupertino 主题。但我Card在两个主题中都使用了 widget,它是一个 Material widget。现在我有以下代码main.dart

Widget build(BuildContext context) => PlatformProvider(
      builder: (BuildContext context) => PlatformApp(
            cupertino: (_, __) => CupertinoAppData(
                theme: CupertinoThemeData(brightness: Brightness.light, ...)),
            material: (_, __) => MaterialAppData(
                theme: ThemeData(
                  brightness: Brightness.light,
                  primarySwatch: Colors.deepPurple,
                  cardTheme: CardTheme(
                    color: Colors.grey,
                    ...
                  )
                  ...
                ),),
......
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,该小部件在 Material 中Card使用了主题,但在 中没有相应的主题。所以在 iOS 上,s 只使用他们的默认主题。cardThemeThemeDatacardThemeCupertinoThemeDataCard

那么如何像Card库比蒂诺主题那样为 Material 小部件设置主题呢?

小智 10

遇到同样的问题,我尝试使用MaterialBasedCupertinoThemeData https://api.flutter.dev/flutter/material/MaterialBasedCupertinoThemeData-class.html但它没有正确尊重黑暗主题。最终,我找到了一个解决方案,如何同时将 MaterialTheme 与 CupertinoTheme 结合起来并正确应用深色/浅色主题:

@override
Widget build(BuildContext context) {
  final Brightness platformBrightness = WidgetsBinding.instance.window.platformBrightness;
  return Theme(
    data: ThemeData(brightness: platformBrightness),
    child: CupertinoApp(
      theme: CupertinoThemeData(
        brightness: platformBrightness,
      ),
    ),
  );
}
Run Code Online (Sandbox Code Playgroud)