【发布时间】:2022-10-23 17:05:00
【问题描述】:
我目前正在学习如何在 Flutter 中使用 Bloc 状态管理库,并且我有一个场景,我想收听执行的操作(例如单击按钮)并在小部件树下的子小部件中对该动作做出反应一肘。从文档来看,重建子小部件的唯一方法似乎是存储一个状态对象并对状态的变化做出反应。但是在我的情况下,我不需要存储任何状态,我只想知道一个动作是否已经完成并在每次调用它时做出反应。
鉴于下面的这个例子,我希望WidgetB 在WidgetA 中的按钮被按下时重建,但我不知道如何构造我的 Cubit 以在不存储某种状态对象的情况下允许它。
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
// What should the code be here if I don't want to store any state?
class WidgetACubit extends Cubit<void> {
WidgetACubit({initialState}) : super(initialState);
void doSomething() => emit(null);
}
class App extends StatelessWidget {
App({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: BlocProvider(
create: (_) => WidgetACubit(),
child: WidgetA(),
),
),
);
}
}
class WidgetA extends StatelessWidget {
WidgetA({super.key});
@override
Widget build(BuildContext context) {
return Column(
children: [
ElevatedButton(
onPressed: () {
BlocProvider.of<WidgetACubit>(context).doSomething();
print("Something has been done");
WidgetB.count++;
},
child: const Text("Press me to do something"),
),
WidgetB(),
],
);
}
}
class WidgetB extends StatelessWidget {
static int count = 0;
WidgetB({super.key});
@override
Widget build(BuildContext context) {
return BlocBuilder<WidgetACubit, void>(
builder: (context, state) {
return Text("I've been rebuilt $count times");
},
);
}
}
【问题讨论】:
标签: flutter dart flutter-layout bloc flutter-bloc