与Navigator 2.0结合使用时,应该使用哪个Riverpod提供程序来处理导航状态



我正在Flutter中开发一个相当复杂的跨平台(Android/iOS/web(应用程序。我是Flutter的新手,是在Android和iOS原生开发的背景下接触它的。

我一直在研究Flutter中处理导航和状态管理的最佳方法,到目前为止,我的结论是最好的方法是将Navigator 2.0 API与Riverpod状态管理库结合使用。据我所见,这些似乎是Flutter中最新、功能最强大的导航和状态管理库。

然而,我发现如何将Riverpod与Navigator 2.0集成起来并不容易。作为一个对这两个库以及Flutter都很陌生的人,我很想在文档中找到一些规范的例子(Navigator或Riverpod(,它展示了应该如何做到这一点,但我还没有找到这样的例子。如果没有这些,我将非常感谢任何关于如何做到这一点的指导,特别是关于许多类型的Riverpod提供商中哪种最适合处理导航状态的工作。例如,与StateNotificationProvider相比,更喜欢ChangeNotificationProvider的原因是什么,反之亦然?有没有其他类型的Riverpod提供程序比这两种更好?

我对这个问题过于复杂,甚至制作了一个巨大的路由器来解决它(ray wenderlich有一个flutter路由器的例子和其他一些教程(。我还尝试了一些其他用于路由的包,它总是会在某种程度上扰乱我的UI

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

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

你可以随时将自己的列表设置为堆栈,他们在flutter文档中提到了其中的一些内容,但这听起来是一种更复杂的处理方式。

我使用

final intendedPathProvider = StateProvider<TypedPath>((_) => <TypedSegment>[]);

然后,导航器将侦听正在进行的PathProvider更改。

TypedSegment是一个不可变的类,表示flutter导航堆栈中的单个项。您可以通过呼叫更改导航,例如:

navigator.navigate([HomeSegment(), BooksSegment(), BookSegment(id:1)]);

您可以在此处看到此方法的示例:https://pavelpz.github.io/doc_simple/#home.

源代码在这里:https://github.com/PavelPZ/riverpod_navigator/blob/main/examples/doc/lib/simple.dart

最新更新