我正在使用 Flutter 的 Navigator 2.0,但是在导航到新页面时没有显示任何页面转换。只有在使用旧的导航器时才有简单的过渡
class AppRouterDelegate extends RouterDelegate<CustomPage>
with ChangeNotifier, PopNavigatorRouterDelegateMixin<CustomPage> {
bool _onPopPage(Route _route, dynamic _result) {
bool _res = _route.didPop(_result);
if (_res) _pages.removeLast();
return _res;
}
List<CustomPage> _pages = [];
@override
Widget build(BuildContext context) {
print("rebuilt with pagestack " + _pages.toString());
return Navigator(
key: navigatorKey,
pages: List.of(_pages),
onPopPage: _onPopPage,
// transitionDelegate: ,
);
}
@override
CustomPage? get currentConfiguration => _pages.last;
@override
Future<bool> popRoute() {
return SynchronousFuture<bool>(true);
}
@override
Future<void> setNewRoutePath(CustomPage _page) {
_pages.add(_page);
notifyListeners();
return SynchronousFuture<void>(null);
}
void push(CustomPage _page) {
_pages.add(_page);
notifyListeners();
}
@override
GlobalKey<NavigatorState> get navigatorKey => GlobalKey<NavigatorState>();
}
我正在通过这段代码使用 RouterDelegate(我用riverpod 注入它并不奇怪)
BuildContextX(context).read(appRouterDelegate).push(
CustomPage(
builder: (_, animation, ___) => FadeTransition(
opacity: animation,
child: Scaffold(
backgroundColor: Colors.blue,
),
),
pageName: '/some',
localKey: ValueKey('/some'),
),
);