有许多来自Flutter 2.0的文章,其中大多数是理论的理论。本文主要谈论实际战斗。目前,它在实际开发中很少与Web兼容。在不考虑网络的情况下,对URL的分析有什么用,保存了很多东西。
在Navigator 2.0中,如果您不考虑Web,则只需要实现Routerdelegate。每次都无法实现它。我们可以从Routerdelegate17.RouterDelegate17开始,更换等,还可以监视页面状态。
单击此处以获取完整的示例代码。样本演示
请注意,第一行是页面状态。当对话框弹出时,以下页面状态变为pagestatus.leave。关闭对话框时,页面状态变为pagestatus.enter。
OpenDialog是系统Showdialog的包装。参数完全相同。包装的目的是进行页面更新。
看到这一点,您会发现RoutedElegate17实施的方法与Navigator 1.0方法非常相似,这将降低使用成本。
所有页面都在堆栈中。页面状态是Routerdelegate17.RouterDelegate17的函数,将页面分为三个状态
获得页面状态非常容易,只需获取状态属性
状态是阀门。实际使用时,您可以使用valuelistenablebuilder聆听更改
POP可以带回价值
您也可以直接使用它
当尝试在主页上弹出页面时,Android系统将默认情况下退出程序。Routedelegate17将报告退出程序的数量,呼叫方决定如何处理它
出口是出口的一个例子。它与普通不同。在每次增加次数之后,时间将在时间之后减去延迟。应用程序可以监视值的更改以确定是否退出程序。
它在使用中已完成。LET在下面开始聊天。
您可能会想,这是使用Navigator2.0吗?您感觉与Navigator 1.0相同,以实现此效果。您可以通过现有的习惯和用法解决问题。您为什么要构建一个新集合?除了增加使用成本外,它不是很好。c,如果要返回从C返回A,则要使用1.0 API推动A或POP C,POP B,不是您想要的解决方案。与Routerdelegate17一起,您可以直接推动(A),Navigator2.0可以直接轻松地跳到任何页面(新页面或堆栈中的任何页面),而无需任何副作用。
可以设置[https://api.flutter.dev/flutter.dev/flutter/widgets/navigator/initroute.html)。直接通过deeplink直接打开详细信息页面。为什么要初始化主页?它是与普通开放应用程序相同的路由堆栈。这很重要,否则将不会与跳跃进行均匀处理。Logic.RouterDelegate17.SetInitialPages可以轻松设置初始路由堆栈。
最初,观察者 + RouteAware可以使用页面状态。status.routerdelegate17已到位,直接给出状态,状态本身是可以直接使用的valuelistenablebuilder。它也非常易于使用,您可以直接在一个句子中引用。(如前所述)
毕竟,它对于方而言并不方便,如果可以使用它,则可以使用。.InheritWidget具有更新机制,当判断功能为真时,它将刷新
该判断有时会导致不必要的刷新,并且不覆盖更新。RouterDelegate17没有这种麻烦。您无需自己获取当前路线并自动管理它。
最后,这是一个原因。Routeaware不会收听pop -up对话框。因为它认为顶页没有更改,所以对话框只是一个pop -up窗口。
除了这种API方法外,还有一种驱动状态的方法。它是将应用程序的状态作为状态作为状态驱动路由的变更。何时改变路由。非常先进,但是它将在实践中失去很多灵活性,并使逻辑更加复杂。要进行Web开发。无论是反应还是vue,它最终都属于推动和其他方法,而不是使用状态驱动的方法。
也有小的好处,例如退出程序。就知道这很方便。
我认为当前的Routerdelegate17是Navigator 2.0最舒适的姿势。也许您仍然觉得这还不够。如果您想自己实施或修改Routerdelegate17,则需要注意一些问题。
原始:https://juejin.cn/post/7113395786360029197