当前,我有一个具有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();
}
}, );
}
}
以这种方式进行导航是否很好? 谢谢!
答案 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。