在Flutter app中立即显示应用主题

时间:2017-06-06 00:58:51

标签: flutter

鉴于Flutter shared_prefs插件的异步性质,如何确保在启动应用程序时立即显示正确的主题设置?即在shared_prefs完成加载后,没有默认主题的闪存,然后应用正确的主题。

3 个答案:

答案 0 :(得分:8)

当您的build方法需要等待Future时,现在是分析FutureBuilder的好时机。

void main() {
  runApp(new FutureBuilder(
    future: SharedPreferences.getInstance(),
    builder: (_, snapshot) {
      return snapshot.hasData ?
             new MyApp(preferences: snapshot.data) :
             new LoadingScreen(); 
    },
  ));
}

使用此模式构建应用的一些提示:

  • SharedPreferences.getInstance()非常快。使用空Container作为黑色加载屏幕而不是彩色内容的闪光,您的应用可能看起来更好。但是,如果您同时加载其他内容,则显示您的徽标会更有意义。

  • 如果您需要等待多个期货,您可以使用 Future.wait或将多个FutureBuilder嵌套在一起。

答案 1 :(得分:5)

一种方法是使用加载屏幕延迟主应用的显示。我见过的模式是:

main() async {
  runApp(new LoadingScreen());
  runApp(new App(await asyncStuff()));
}

您可以根据需要随时调用runApp:https://docs.flutter.io/flutter/widgets/runApp.html

答案 2 :(得分:0)

在应用程序配置完成后,您还可以使用StatefulWidgetsetState来更新根小部件。

你可以使用(简而言之):

@override
Widget build(BuildContext context) {
    _return mainWidget;
}

与:

结合使用
mainWidget = loadingWidget();
someMethodThatDoesAppConfig().then((Widget configuredWidget) {
    setState(() {
        _mainWidget = configuredWidget;
    });
});