问题描述
我有一个 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
小部件在材质 cardTheme
中使用 ThemeData
进行主题化,但 cardTheme
中没有对应的 CupertinoThemeData
。因此,在 iOS 上,Card
仅使用其默认主题。
那么我如何在 Cupertino 主题中设置像 Card
这样的 Material 小部件的主题?
解决方法
我尝试使用 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,),);
}