首页 > 解决方案 > 应该使用哪个 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 比这两种方法更好?

标签: flutterflutter-navigationriverpod

解决方案


我把这个问题过度复杂化了,甚至制作了一个巨大的路由器来解决它(ray wenderlich 有一个颤振路由器的例子以及其他一些教程)。我还尝试了一些其他用于路由的包,它总是会以某种方式弄乱我的 UI

实际上归结为我必须将上下文传递给我的子类。因此,在任何不直接在 MaterialApp 路由中的构造函数中,您将执行 MyClass(BuildContext context,{required this.whatever}); 然后将其称为 MyClass(上下文,无论如何)。使用 Navigator.pushnamed(context, routename) 其余的对我来说都很好。我有应用栏和带有导航选项的菜单,所以它更复杂。

我希望这有点道理。Flutter 的网站上有关于设置 MaterialApp() 以及命名路由的信息。

您始终可以将自己的列表设置为堆栈,他们在颤振文档中提到了其中的一些内容,但听起来这将是一种更复杂的处理方式。我知道提供者与类一起工作,所以通过扩展,我认为他们可以很好地处理列表。


推荐阅读