只要我们需要准备好主屏幕,就可以保持启动屏幕的时间吗?

时间:2019-12-26 07:47:22

标签: flutter flutter-dependencies

换句话说,不是固定的 15秒,有没有办法告诉它在我的异步功能完成后停止显示?

2 个答案:

答案 0 :(得分:1)

如果您将单独的屏幕用于初始屏幕,则可以简单地await使用async函数,并使用Navigator.pushReplacement()打开< strong>主屏幕

示例:

class SplashScreen extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return SplashScreenState();
  }
}

class SplashScreenState extends State<SplashScreen> {
  @override
  void initState() {
    super.initState();
    handleSplashscreen();
  }

  void handleSplashscreen() async {
    // Wait for async to complete
    await someAsyncFunction();
    // Open Main page
    Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => HomePage(user: null)));
  }

  Future<void> someAsyncFunction() async {
    // Do some Network or other stuff
  }


  @override
  Widget build(BuildContext context) {
    return Container(
      child: Center(child: Text("Loading...")),
    );
  }
}

如果在异步操作完成时仅在同一屏幕上显示加载程序,则可以按照其他建议使用FutureBuilder

或者您可以使用布尔值和setState()来有条件地显示 loader Main UI

示例:

class MainPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return MainPageState();
  }
}

class MainPageState extends State<MainPage> {
  // Boolean to show/ hide loader
  bool isLoading = true;

  @override
  void initState() {
    super.initState();
    handleAsync();
  }

  void handleAsync() async {
    // Wait for async to complete
    await someAsyncFunction();
    // Open Main page
    setState(() {
      isLoading = false;
    });
  }

  Future<void> someAsyncFunction() async {
    // Do some Network or other stuff
  }

  @override
  Widget build(BuildContext context) {
    // Using isLoading to check whether async function is complete
    return isLoading
        ? Container(
            child: Center(child: Text("Loading...")),
          )
        : Container(
            child: Text("The Actual screen"),
          );
  }
}

希望有帮助。

答案 1 :(得分:0)

在页面中使用FutureBuilder from here,并在未加载数据时显示初始屏幕图像。