Files
iroute/lib/12/01/pages/app/app_navigation.dart
toly e95c34018e 9
2023-09-22 09:15:11 +08:00

51 lines
1.1 KiB
Dart

import 'package:flutter/material.dart';
import '../page_a.dart';
import '../page_b.dart';
import '../page_c.dart';
import '../home_page.dart';
ValueNotifier<List<String>> router = ValueNotifier(['/']);
class AppNavigation extends StatefulWidget {
const AppNavigation({super.key});
@override
State<AppNavigation> createState() => _AppNavigationState();
}
class _AppNavigationState extends State<AppNavigation> {
@override
void dispose() {
router.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return ValueListenableBuilder(
valueListenable: router,
builder: (_, List<String> value, __) => buildNavigatorByConfig(value),
);
}
final Map<String, Page> _pageMap = const {
'/': MaterialPage(child: HomePage()),
'a': MaterialPage(child: PageA()),
'b': MaterialPage(child: PageB()),
'c': MaterialPage(child: PageC()),
};
Widget buildNavigatorByConfig(List<String> value) {
return Navigator(
onPopPage: _onPopPage,
pages: router.value.map((e) => _pageMap[e]!).toList(),
);
}
bool _onPopPage(Route route, result) {
return route.didPop(result);
}
}