我是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));
}
答案 0 :(得分:1)
您绝对正确。您可以使用全局变量,这将达到相同的目的。
但是,Flutter的想法是一切都是小部件。使用BlocProvider.of(context)
符合该理念。 SOme甚至可能说全局变量是邪恶的,但这是推测:)
使用BlocProvider
小部件的另一有用之处是它位于小部件树中,并且仅在需要时才构造。但是,即使您不需要全局变量,它也会保留在那里。
因此,我建议您使用BlocProvider
编写适合全局FLutter编码方式的代码。