Flutter:如何在 Cupertino 主题中设置 material 小部件的主题?

Flutter: How to theme material widgets in Cupertino theme?

我有一个 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,
                    ...
                  )
                  ...
                ),),
......

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

那么如何在 Cupertino 主题中为 Material 小部件设置主题,例如 Card

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

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