使用BlocProvider并实例化BLoC

时间:2019-07-30 09:30:37

标签: flutter bloc

我是Flutter的初学者,最近开始学习BLoC模式。

我不明白为什么我需要在小部件内使用BlocProvider.of(context),在那里我可以简单地在所有小部件所依赖的文件顶部实例化一个Bloc(最终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));
  }

1 个答案:

答案 0 :(得分:1)

您绝对正确。您可以使用全局变量,这将达到相同的目的。

但是,Flutter的想法是一切都是小部件。使用BlocProvider.of(context)符合该理念。 SOme甚至可能说全局变量是邪恶的,但这是推测:)

使用BlocProvider小部件的另一有用之处是它位于小部件树中,并且仅在需要时才构造。但是,即使您不需要全局变量,它也会保留在那里。

因此,我建议您使用BlocProvider编写适合全局FLutter编码方式的代码。