flutter - 带导航的 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();
}
}, );
}
}
以这种方式进行导航是否是一个好案例?谢谢!
解决方案
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();
}
}, );
}
推荐阅读
- python - 这段代码在 matplotlib 中的“!pip install xlrd”是什么意思?特别是这个“!” 符号?
- r - 在 Shiny 中显示 htmlTable
- python - 在 python 中处理消息无法正常工作
- bash - 如何将文件中声明的所有 bash 变量导出为环境变量?
- javascript - Angular,对输入'on-change'的许多API调用
- javascript - 如何将(格式良好的)字符串变量分配给价值
- c# - 从外部程序调用 C# 应用程序时未命中断点
- php - 如何选择并显示来自同一用户的所有行,使用 php 在彼此下方
- c++ - 计算打包算法结果的维度(边界框)
- bash - 或者使用 grep 在 bash 中声明