Dik*_*sta 3 navigation dart flutter gorouter flutter-go-router
我有我的路由的配置类,我通过模块使用它,如下代码所示:
class RouterRegister {
static RouterRegister? _instance;
static RouterRegister getIntance() {
return _instance ??= RouterRegister();
}
final RouterConfig<Object> router = GoRouter(
navigatorKey: GlobalKey<NavigatorState>(),
initialLocation: '/',
observers: [
FirebaseAnalyticsObserver(analytics: FirebaseAnalytics.instance)
],
routes: <RouteBase>[
ShellRoute(
builder: (context, __, child) => child,
routes: [
...MicroAuthRoutes.getIntance().routes,
],
)
],
);
}
Run Code Online (Sandbox Code Playgroud)
我的 MicroAuthRoutes 类是这样的:
class MicroAuthRoutes {
static const splash = '/';
static const login = '/login';
static const forgot = '/forgot';
static const signup = '/signup';
static const token = '/token';
static MicroAuthRoutes? instance;
static MicroAuthRoutes getIntance() {
return instance ??= MicroAuthRoutes();
}
final List<RouteBase> routes = [
GoRoute(
path: splash,
pageBuilder: (context, state) {
return MaterialPage(
child: AuthSplashPage(),
);
}),
GoRoute(
path: login,
pageBuilder: (_, state) {
return MaterialPage(
child: AuthLoginPage(),
);
},
),
GoRoute(
path: forgot,
pageBuilder: (_, state) {
return MaterialPage(
child: AuthForgotPage(),
);
},
),
GoRoute(
path: signup,
pageBuilder: (_, state) {
return MaterialPage(
child: AuthSignupPage(),
);
},
),
GoRoute(
path: token,
pageBuilder: (_, state) {
return MaterialPage(
child: AuthTokenPage(),
);
},
),
];
}
Run Code Online (Sandbox Code Playgroud)
而不是我的主文件是这样的:
final _router = RouterRegister.getIntance().router;
class App extends StatefulWidget {
const App({super.key});
@override
State<App> createState() => _AppState();
}
class _AppState extends State<App> {
@override
void initState() {
super.initState();
AuthState().checkAuthState();
}
@override
Widget build(BuildContext context) {
return MaterialApp.router(
debugShowCheckedModeBanner: false,
routerConfig: _router,
debugShowMaterialGrid: false,
);
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是如何使用 go 路由器在我的控制器中导航,但如果不使用上下文,我在搜索中没有找到任何内容,并且我陷入了这个问题。
我尝试过使用导航键,但没有成功。
小智 6
声明NavigatorKey
为全局变量。
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
Run Code Online (Sandbox Code Playgroud)
注册一下吧
final RouterConfig<Object> router = GoRouter(
navigatorKey: navigatorKey,
// rest of code
Run Code Online (Sandbox Code Playgroud)
现在使用 key 来获取上下文。
final context = navigatorKey.currentContext;
if (context != null) {
context.go('yourRoute');
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
584 次 |
最近记录: |