懒惰地用BlocProvider.value实例化块



我正在使用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;
}
}
}

这就是为什么我们喜欢扑腾!

参考资料:飞镖中的零安全是什么?

最新更新