Flutter 使用BlocProvider并实例化BLoC
我是一个非常熟悉颤振的初学者,最近开始学习阵型 我不明白为什么我需要在小部件中使用BlocProvider.of(context),这样我就可以在所有小部件所依赖的文件顶部实例化一个Bloc(final blocX=Bloc();),即使不在任何代码中定义一个BlocProvider 多谢各位Flutter 使用BlocProvider并实例化BLoC,flutter,bloc,Flutter,Bloc,我是一个非常熟悉颤振的初学者,最近开始学习阵型 我不明白为什么我需要在小部件中使用BlocProvider.of(context),这样我就可以在所有小部件所依赖的文件顶部实例化一个Bloc(final blocX=Bloc();),即使不在任何代码中定义一个BlocProvider 多谢各位 class HomePageInit extends StatelessWidget { @override Widget build(BuildContext context) { re
class HomePageInit extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: BlocProvider(
builder: (context) => WeatherBloc(),
child: Homepage(),
),
);
}
然后在同一文件内、任何类或小部件外:
final weatherBloc = WeatherBloc(),
然后在小部件内部:
class SubmitButton extends StatefulWidget {
@override
_SubmitButtonState createState() => _SubmitButtonState();
}
class _SubmitButtonState extends State<SubmitButton> {
void submitCityName(String name) {
weatherBloc.dispatch(GetWeather(name));
}
class SubmitButton扩展StatefulWidget{
@凌驾
_SubmitButtonState createState()=>_SubmitButtonState();
}
类_SubmitButtonState扩展状态{
无效提交名称(字符串名称){
weatherBloc.dispatch(GetWeather(名称));
}
你完全正确。你可以使用一个全局变量,这将达到同样的目的
然而,弗利特的想法是一切都是小部件。使用BlocProvider.of(context)
符合这一理念。有些人甚至可能会说全局变量是邪恶的,但这只是猜测:)
使用BlocProvider
小部件的另一个有用之处是,它存在于小部件树中,并且仅在需要时构造。然而,全局变量将倾向于留在那里,即使您不需要它
因此,我鼓励您使用
BlocProvider
来编写一个符合全局颤振方式的代码。非常感谢您,现在这就有意义了!