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