2

我有一个 Flutter 应用程序,它使用适用于 Android 的 Material 主题和适用于 iOS 的 Cupertino 主题。但是我Card在两个主题中都使用了小部件,它是一个 Material 小部件。现在我有以下代码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,
                    ...
                  )
                  ...
                ),),
......

如您所见,小部件在 Material 中Card使用主题,但在 中没有对应的。所以在 iOS 上s 只使用他们的默认主题。cardThemeThemeDatacardThemeCupertinoThemeDataCard

那么如何像CardCupertino 主题一样为 Material 小部件设置主题?

4

1 回答 1

2

面对同样的问题,我尝试使用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,
      ),
    ),
  );
}
于 2021-07-12T07:35:30.400 回答