Flutter Navigator v2.0 如何弹出子嵌套路由
Posted
技术标签:
【中文标题】Flutter Navigator v2.0 如何弹出子嵌套路由【英文标题】:Flutter Navigator v2.0 how to pop a child nested route 【发布时间】:2021-04-05 08:47:03 【问题描述】:我一直在尝试flutter new declarative Navigator v2.0,继 johnpryanexample之后,我决定在BookDetailsScreen中更改FlatButton pop()强>:
class BookDetailsScreen extends StatelessWidget
@override
Widget build(BuildContext context)
return Scaffold(
body: Padding(
children: [
FlatButton(
onPressed: ()
Navigator.of(context).pop();
,
child: Text('Back'),
),
],
到_AppShellState中的父路由器AppBar():
class _AppShellState extends State<AppShell>
InnerRouterDelegate _routerDelegate;
ChildBackButtonDispatcher _backButtonDispatcher;
@override
Widget build(BuildContext context)
var appState = widget.appState;
_backButtonDispatcher.takePriority();
return Scaffold(
appBar: appState.selectedBook != null
? AppBar(
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () => _routerDelegate.popRoute(),
),
actions: [
IconButton(
icon: Icon(Icons.more_vert),
onPressed: () => null,
)
],
)
: AppBar(),
body: Router(
routerDelegate: _routerDelegate,
backButtonDispatcher: _backButtonDispatcher,
),
Fullcode
我的问题是,我正在使用 _routerDelegate.popRoute() 它正在工作,但我不确定它是否正确?
PS:如果有人使用 Navigator v2.0 有一个更复杂的示例,我是 Flutter 新手,需要了解如何分离和组织我的代码的最佳实践,如何添加更多路由,例如编辑和登录屏幕?使用更多对象,如用户、书籍、作者等...
【问题讨论】:
【参考方案1】:当 BookDetailsScreen 出现时,我有一个调整来显示后退按钮。
-
在
_AppShellState
类中
@override
Widget build(BuildContext context)
...
return Scaffold(
// <- Comment out this appBar
// appBar: AppBar(
// leading: appState.selectedBook != null
// ? IconButton(
// icon: Icon(Icons.arrow_back),
// onPressed: () => _routerDelegate.popRoute(),
// )
// : null,
// ),
...
// Keep the rest part the same
);
-
在
build
方法中将appBar
属性添加到Screens Scaffold 中,如下所示。在 BooksListScreen 和 BookDetailsScreen 上都有 appBar,
class BooksListScreen extends StatelessWidget
...
@override
Widget build(BuildContext context)
return Scaffold(
appBar: AppBar(), // <- This is the key
...
);
希望这是有道理的。
【讨论】:
不错的努力,但这并不能回答问题。以上是关于Flutter Navigator v2.0 如何弹出子嵌套路由的主要内容,如果未能解决你的问题,请参考以下文章
flutter系列之:在flutter中使用导航Navigator
如何在 Flutter 中的 navigator.pop(context) 之后显示小吃栏?
译学习Flutter中新的Navigator和Router系统
Flutter:如何将 PageRoute Animation 与 Navigator.of(context).pushNamed 结合起来