【问题标题】:Flutter Navigator v2.0 how to pop a child nested routeFlutter Navigator v2.0 如何弹出子嵌套路由
【发布时间】:2021-04-05 08:47:03
【问题描述】:

我一直在尝试flutter new declarative Navigator v2.0,继 johnpryanexample之后,我决定在BookDetailsS​​creen中更改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 新手,需要了解如何分离和组织我的代码的最佳实践,如何添加更多路由,例如编辑和登录屏幕?使用更多对象,如用户、书籍、作者等...

【问题讨论】:

    标签: flutter flutter-navigation flutter-bottomnavigation


    【解决方案1】:

    当 BookDetailsS​​creen 出现时,我有一个调整来显示后退按钮。

    1. _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
          
        );
      }
    
    1. build 方法中将appBar 属性添加到Screens Scaffold 中,如下所示。在 BooksListScreen 和 BookDetailsS​​creen 上都有 appBar,
    class BooksListScreen extends StatelessWidget {
      ...
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(), // <- This is the key
          ...
        );
      }
    }
    

    希望这是有道理的。

    【讨论】:

    • 不错的努力,但这并不能回答问题。
    猜你喜欢
    • 2019-10-18
    • 2021-03-16
    • 2021-05-28
    • 2020-11-22
    • 2019-01-25
    • 1970-01-01
    • 2023-01-02
    • 1970-01-01
    • 2019-01-03
    相关资源
    最近更新 更多