是否有可能在Flutter中自动主题小部件?

时间:2018-06-16 18:52:00

标签: flutter

在Google的移动框架Flutter中,您可以使用Cupterino(iOS)小部件或Material Design(Android)小部件构建您的应用。这意味着您必须构建应用程序两次才能创建与每个设备一致的两种不同样式 - 一次使用Cupertino小部件为iOS构建,然后再使用Material Design小部件为Android构建。有没有办法自动主题这些小部件来定制每个平台,所以我可以避免两次构建Flutter应用程序?

1 个答案:

答案 0 :(得分:2)

是的,当然这是可能的。您可以使用继承的Theme widget获取MaterialApp的{​​{3}}对象。

ThemeDataThemeData,可用于为不同平台提供不同的小部件。在您的 Android - iOS 案例中,它看起来像这样:

@override
Widget build(BuildContext contect) => 
  Theme.of(context).platform == TargetPlatform.iOS ? // ternary if statement to check for iOS
    CupertinoAlertDialog() : // Cupertino style dialog
    AlertDialog(); // Material style dialog

如您所见,您可以使用property called platform检查您的应用程序正在运行的平台。

这显然也可以应用到图标等。

如果您正在使用Android Studio或IntelliJ IDEA的 Flutter插件,您还可以使用 Flutter Inspector 动态切换TargetPlatform, ie 模拟 Flutter SDK在 iOS 上运行即使你在 Android 反之亦然