Flutter 使用BlocProvider并实例化BLoC

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

我是一个非常熟悉颤振的初学者,最近开始学习阵型

我不明白为什么我需要在小部件中使用BlocProvider.of(context),这样我就可以在所有小部件所依赖的文件顶部实例化一个Bloc(final blocX=Bloc();),即使不在任何代码中定义一个BlocProvider

多谢各位

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
来编写一个符合全局颤振方式的代码。

非常感谢您,现在这就有意义了!