flutter - 应该使用哪个 Riverpod Provider 与 Navigator 2.0 结合使用来处理导航状态?
问题描述
我正在 Flutter 中开发一个相当复杂的跨平台(Android / iOS / web)应用程序。我是 Flutter 的新手,来自 Android 和 iOS 原生开发的背景。
我一直在研究在 Flutter 中处理导航和状态管理的最佳方法,目前我的结论是,最好的方法是将Navigator 2.0 API 与Riverpod状态管理库结合使用。据我所知,这些似乎是 Flutter 中用于导航和状态管理的最新和最强大的库。
但是,我发现如何将 Riverpod 与 Navigator 2.0 集成起来并不容易。作为对这两个库和 Flutter 都不熟悉的人,理想情况下,我希望在文档(Navigator 或 Riverpod 的)中找到一些规范示例,说明应该如何完成,但我还没有找到了这样一个例子。如果没有,我将非常感谢有关如何执行此操作的任何指导,特别是关于多种 Riverpod 提供程序中的哪一种最适合处理导航状态的工作。例如,选择ChangeNotifierProvider而不是StateNotifierProvider的原因是什么,反之亦然?是否有其他类型的 Riverpod Provider 比这两种方法更好?
解决方案
我把这个问题过度复杂化了,甚至制作了一个巨大的路由器来解决它(ray wenderlich 有一个颤振路由器的例子以及其他一些教程)。我还尝试了一些其他用于路由的包,它总是会以某种方式弄乱我的 UI
实际上归结为我必须将上下文传递给我的子类。因此,在任何不直接在 MaterialApp 路由中的构造函数中,您将执行 MyClass(BuildContext context,{required this.whatever}); 然后将其称为 MyClass(上下文,无论如何)。使用 Navigator.pushnamed(context, routename) 其余的对我来说都很好。我有应用栏和带有导航选项的菜单,所以它更复杂。
我希望这有点道理。Flutter 的网站上有关于设置 MaterialApp() 以及命名路由的信息。
您始终可以将自己的列表设置为堆栈,他们在颤振文档中提到了其中的一些内容,但听起来这将是一种更复杂的处理方式。我知道提供者与类一起工作,所以通过扩展,我认为他们可以很好地处理列表。
推荐阅读
- asp.net-core - 使用 Microsoft.Extensions.DependencyInjection 创建子容器(或隔离范围)的最佳策略
- python - 将我的数据集分组为 2 个样本时出现 KeyError
- php - 在 Laravel 的数据透视表中播种数据的问题
- mysql - 将子查询中的列添加到主查询的 SELECT 中,而不在主查询中应用 WHERE 中的过滤器
- r - 如何在 R 中创建特定的周变量?
- python - 在输入法python3中输入许多值
- javascript - 画布停止重绘焦点丢失
- python - 如何防止pytest添加LogCaptureHandler?
- reactjs - 错误:无法对未安装的组件执行 React 状态更新
- laravel - 将嵌套的 eloquent 查询转换为列出子元素