我正在使用Flutter的Generated Routes,我想在它们之间共享blocs。
但我认为,也许示例解决方案的规模可能不是最好的,因为bloc是用路由器实例化的。
有没有一种方法可以只在用户访问该路由时实例化它们?
class AppRouter {
final _counterBloc = CounterBloc();
Route onGenerateRoute(RouteSettings settings) {
switch (settings.name) {
case '/':
return MaterialPageRoute(
builder: (_) => BlocProvider.value(
value: _counterBloc,
child: HomePage(),
),
);
case '/counter':
return MaterialPageRoute(
builder: (_) => BlocProvider.value(
value: _counterBloc,
child: CounterPage(),
),
);
default:
return null;
}
}
}
明白了!Flutter有一个新的关键字late
,可以在没有任何样板的情况下做到这一点。
class AppRouter {
late final CounterBloc _counterBloc = CounterBloc();
Route onGenerateRoute(RouteSettings settings) {
switch (settings.name) {
case '/':
return MaterialPageRoute(
builder: (_) => BlocProvider.value(
value: _counterBloc,
child: HomePage(),
),
);
case '/counter':
return MaterialPageRoute(
builder: (_) => BlocProvider.value(
value: _counterBloc,
child: CounterPage(),
),
);
default:
return null;
}
}
}
这就是为什么我们喜欢扑腾!
参考资料:飞镖中的零安全是什么?