【问题标题】:WillPopScope not working when using several navigators使用多个导航器时 WillPopScope 不工作
【发布时间】:2023-01-14 19:56:01
【问题描述】:

我正在尝试在我的应用程序中为每个选项卡添加本地范围。为了实现这一点,我添加了几个导航器键,这些键被传递到需要有自己的导航的视图中。这些视图在选项卡中可见,这是我的应用程序使用的主要导航器。

键看起来像这样:

final _navKeys = {
  Tabs.tab1: GlobalKey<NavigatorState>(),
  Tabs.tab2: GlobalKey<NavigatorState>(),
  Tabs.tab3: GlobalKey<NavigatorState>(),
};

然后将这些键传递给 TabNavigator,该 TabNavigator 存在于需要自己的堆栈的选项卡内:

final GlobalKey<NavigatorState> navigatorKey;

为了决定在返回时是否应该弹出堆栈,我在 TabNavigator 中添加了一个 Navigator 和一个 WillPopScope。然而,TabNavigator 中的 WillPopScope 永远不会被命中,它总是命中选项卡导航的顶层 WillPopScope。我究竟做错了什么?

import 'package:flutter/material.dart';
import 'package:m3u_nullsafe/m3u_nullsafe.dart';

import '../main.dart';
import 'empty_type.dart';

class TabNavigator extends StatelessWidget {
  const TabNavigator(
      {super.key, required this.navigatorKey, required this.type});
  final GlobalKey<NavigatorState> navigatorKey;
  final Map<String, List<M3uGenericEntry>> type;

  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: () async {
        if (navigatorKey.currentState != null) {
          navigatorKey.currentState!.maybePop();
          return false;
        }

        return true;
      },
      child: Navigator(
          key: navigatorKey,
          onGenerateRoute: (routeSettings) {
            return MaterialPageRoute(
                builder: (context) => Column(children: [
                      if (type.isEmpty) const EmptyType(type: 'type'),
                      Expanded(
                        child: ListView(
                            children: type.entries.map((e) {
                          var w = ListTile(
                              title: Text(e.key),
                              onTap: () => {
                                    navigatorKey.currentState!.push(
                                      MaterialPageRoute(
                                        builder: (_) =>
                                            CategoryListView(entries: e.value),
                                      ),
                                    )
                                  });
                          return w;
                        }).toList()),
                      ),
                    ]));
          }),
    );
  }
}

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    我没有得到这个工作。所以我决定用go_router重写我应用程序中的导航。所有视图现在都有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-15
      • 2020-10-29
      • 2022-10-21
      • 2020-03-29
      • 2018-10-11
      • 1970-01-01
      • 2019-11-26
      相关资源
      最近更新 更多