【问题标题】:Which Riverpod Provider should one use to handle navigation state in combination with Navigator 2.0?应该使用哪个 Riverpod Provider 与 Navigator 2.0 结合使用来处理导航状态?
【发布时间】:2021-08-22 13:31:00
【问题描述】:

我正在 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 比这两种方法效果更好?

【问题讨论】:

  • 您不会在 Navigator 2.0 上找到太多内容,因为坦率地说,它相当复杂,目前采用它的人并不多。就 ChangeNotifier 和 StateNotifier 而言,它们是直接替代品,可以互换。在我看来,StateNotifier 使用起来更自然。

标签: flutter flutter-navigation riverpod


【解决方案1】:

我使这个问题变得过于复杂,甚至制作了一个巨大的路由器来解决它(ray wenderlich 有一个颤振路由器的示例以及其他一些教程)。我还尝试了其他一些用于路由的包,但它总是会以某种方式与我的 UI 混淆

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

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

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

【讨论】:

    猜你喜欢
    • 2019-06-14
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    相关资源
    最近更新 更多