flutter - Flutter Provider:MaterialApp.router 依赖于 provider
问题描述
我正在尝试使用提供者的状态使我的 MaterialApp.router 具有反应性。
但我遇到了一些问题,主要是调试模式下的热重载不起作用。
我在网上查了一下,你不应该把变量放在 MaterialApp.router 构建方法中,但是你如何让它对状态有反应而不把它放在构建方法中呢?
我的根提供商:
Widget build(BuildContext context) {
return MultiProvider(
providers: [
StreamProvider<User?>.value(
value: AuthService().user,
initialData: AuthService().currentUser,
),
],
child: App(),
);
}
我的应用程序:
Widget build(BuildContext context) {
final user = Provider.of<User?>(context);
return MaterialApp.router(
routerDelegate: AutoRouterDelegate.declarative(
_appRouter,
routes: (_) => [
if (user != null) const HomeRoute() else const LoginRoute(),
],
),
routeInformationParser: _appRouter.defaultRouteParser(
includePrefixMatches: true,
),
// darkTheme: DefaultTheme.dark(),
);
}
编辑:不工作,我的意思是模拟器只是白屏,需要重新启动应用程序
解决方案
不要使用最终用户 = Provider.of(context),而是使用 Consumer。您需要使用更好的 navigator 2.0 实现,我建议您遵循本指南https://medium.com/geekculture/a-simpler-guide-to-flutter-navigator-2-0-part-i-70623cedc93b或切换 Navigator 1,它更易于与 MaterialApp 一起使用(路由:[路由列表],初始路由:等)。
推荐阅读
- angular - 基于所选选项的角度条件渲染
- apache-spark - NameError:名称'min_hash'未定义
- opencv - openCV 中的 Blob 检测效果很好,但由于某种原因,它对特定图像失败了
- python - 使用函数从列表中删除项目
- point-cloud-library - PCL 返回的 IterativeClosestPoint 类中的“getFitnessScore()”是什么单位?
- java - HashMap 之间的数据检索性能
- c# - 电报回调查询在c#中返回空更新
- angular - 导航到组件 Angular 9
- c++ - 从 pybind11 包装器访问类的实例变量
- python - 未找到 mysql 连接器