扑动问题
你即将从A页转到B页。创建CubitA作为BlockProvider,并将页面B放在child中。在B中,用CubitA转到C页。(用BlockProvider.value)但有时我必须从C页移动到b页。此时,它将与现有的CubitA实例一起移动。
这是个问题。当您转到B时,在某些情况下(A->B),您将创建一个CubitA实例在另一种特定情况下(C ->B),我想交付一个CubitA的实例。
在这种情况下我如何创建一个路由?
我认为有两种方法。
-
Make 2 GoRoute.
-
在GoRoute内部,用try{}catch(e){}和try{}包装构建器,在部分中,它执行逻辑来加载现有实例,当发生错误时,它去catch{}来创建一个新实例。
-
没有. .
如果你能提出一个新的方法,如果不是第1或2,我将不胜感激。
如果所有三个页面都依赖于相同的Bloc
或Cubit
,则可以在路由器上方使用顶级BlocProvider
。例子:
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return BlocProvider(create: (context) => SomeCubit(), child: App());
}
}
class App extends StatelessWidget {
App({super.key});
final _router = GoRouter(routes: [
GoRoute(path: '/', builder: (context, state) => const Home(), routes: [
GoRoute(
path: 'A',
builder: (context, state) => PageA(),
),
GoRoute(
path: 'B',
builder: (context, state) => PageB(),
),
GoRoute(
path: 'C',
builder: (context, state) => PageC(),
),
])
]);
@override
Widget build(BuildContext context) {
return MaterialApp.router(
...
routerConfig: _router,
);
}
}