首页 > 解决方案 > 带导航的 Flutter Provider

问题描述

目前,我有一个具有 3 种状态响应(成功、错误、运行)的提供者和侦听此提供者的消费者。当提供者的响应为成功时,是否可以推送到另一条路线?这是我的消费者:

class SplashScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      body: _splashWidget(context),
    );
  }

  Widget _splashWidget(BuildContext context) {
    return Consumer<AccessTokenProvider>(builder: (context, myModel, child) {
      switch (myModel.accessToken.status) {
        case Status.COMPLETED:
        Navigator.of(context).pushReplacementNamed(MainRoute);
        return null;

        case Status.ERROR:
        return ErrorScreen();

        default:
          return SplashProcessing();
      }
    }, );
  }
}

以这种方式进行导航是否是一个好案例?谢谢!

标签: flutterdart

解决方案


Widget _splashWidget(BuildContext context) {
    return Consumer<AccessTokenProvider>(builder: (context, myModel, child) {
      switch (myModel.accessToken.status) {
        case Status.COMPLETED:
        WidgetsBinding.instance.addPostFrameCallback((_) => 
           Navigator.of(context).pushReplacementNamed(MainRoute)); // can also use: Future.microtask(() => Navigator.of(context). pushReplacementNamed... );
        return Container(); // always return a widget in the build method, not null

        case Status.ERROR:
        return ErrorScreen();

        default:
          return SplashProcessing();
      }
    }, );
  }

推荐阅读