Flutter 带导航的颤振提供者

Flutter 带导航的颤振提供者,flutter,dart,Flutter,Dart,目前,我有一个具有3个状态响应(成功、错误、运行)的提供程序和侦听此提供程序的使用者。当提供商的响应成功时,是否可以推送到另一条路由?这是我的消费者: class SplashScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.white, body: _splashW

目前,我有一个具有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();
      }
    }, );
  }
}
类SplashScreen扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回脚手架(
背景颜色:Colors.white,
正文:_splashWidget(上下文),
);
}
小部件\u splashWidget(构建上下文){
返回使用者(生成器:(上下文、myModel、子项){
开关(myModel.accessToken.status){
案例状态。已完成:
Navigator.of(context.pushReplacementNamed(MainRoute);
返回null;
案例状态。错误:
返回ErrorScreen();
违约:
返回处理();
}
}, );
}
}
以这种方式进行导航是一个很好的例子吗?
谢谢

您的小部件不应返回null(Status.COMPLETED)。因此,如果您想根据消费者的状态使用navigator和show Widget,您应该添加一个将推送到MainRoute的监听器,以及一个构建器(就像这里的消费者)来显示ErrorScreen或SplashProcessing。

Widget\u splashWidget(BuildContext){
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();
      }
    }, );
  }
返回使用者(生成器:(上下文、myModel、子项){ 开关(myModel.accessToken.status){ 案例状态。已完成: WidgetsBinding.instance.addPostFrameCallback(())=> Navigator.of(context).pushReplacementNamed(MainRoute));//还可以使用:Future.microtask(()=>Navigator.of(context).pushReplacementNamed; return Container();//始终在生成方法中返回小部件,而不是null 案例状态。错误: 返回ErrorScreen(); 违约: 返回处理(); } }, ); }
您能否提供有关如何在提供程序上添加侦听器的示例或链接?对不起,我是新来的。谢谢当然看看这个:,女顾客会是解决你问题的好办法。谢谢你的回复!但是不使用bloc是否可以实现这个目标呢?好的,试试看:WidgetsBinding.instance.addPostFrameCallback(()=>Navigator.of(context.pushReplacementNamed(MainRoute));此方法将在生成方法完成后执行其内容。我想你还是得退回一个空容器之类的东西。哈。是的,我已经读到了这个解决方案,我想你可以移动这个评论来回答,稍后我会将它标记为接受。但我仍然在等待更好的线索