具有导航功能的Flutter提供程序

时间:2020-09-18 12:12:33

标签: flutter dart

当前,我有一个具有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();
      }
    }, );
  }
}

以这种方式进行导航是否很好? 谢谢!

2 个答案:

答案 0 :(得分:1)

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();
      }
    }, );
  }

答案 1 :(得分:0)

您的窗口小部件不应返回null(Status.COMPLETED)。因此,如果要使用导航器并根据消费者的状态显示小部件,则应添加一个将推送到MainRoute的 listener ,以及一个构建器(如此处的消费者)以显示ErrorScreen或SplashProcessing。