【发布时间】: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()),
),
]));
}),
);
}
}
【问题讨论】: