在 initState 或 didChangeDependencies 中將事件添加到 Bloc 是否正確?
我試圖在 initState 和 didChangeDependencies 中添加事件。但是拋出這個例外。
但是當此頁面再次打開時,一切正常。
The following StateError was thrown building BlocBuilder<SlotsBloc, SlotsState>(dirty, dependencies: [_InheritedProviderScope<SlotsBloc?>], state: _BlocBuilderBaseState<SlotsBloc, SlotsState>#29045):
Bad state: No element
uj5u.com熱心網友回復:
我認為這不是 Bloc 的用途。
通過閱讀官方檔案上的大量示例,我發現BlocProviders它們總是放置在小部件樹中的某個位置。這意味著沒有BuildContext就無法訪問它們,因此您無法在initState或 中訪問它們didChangeDependencies。
這種方法的另一個問題是您讓用戶界面決定狀態更改,而它應該是相反的。
uj5u.com熱心網友回復:
你可以這樣做:
BlocProvider<SlotsBloc>(
create: (context) => SlotsBloc()..add(SlotInitState()),
child: child
)
uj5u.com熱心網友回復:
呼叫沒有問題initState,這完全取決于您的需要。在示例中看到我在 statefull 中實體化了 bloc,呼叫了一個事件并將其傳遞給BlocBuilder,這樣您就可以使用 bloc 實體添加其他事件而無需讀取背景關系,同時我將它提供給 BlocBuilder,如果您不將 bloc 傳遞給 BlocBuilder,它將執行您在 initState 中執行的相同操作,運行 aBlocProvider.of<ExampleBloc>(context)以在背景關系中訪問實體。
從檔案github_Search觀察這個官方示例。
class MyHomeStatefull extends StatefulWidget {
const MyHomeStatefull({Key? key}) : super(key: key);
@override
State<MyHomeStatefull> createState() => _MyHomeStatefullState();
}
class _MyHomeStatefullState extends State<MyHomeStatefull> {
late ExampleBloc exampleBloc;
@override
void initState() {
super.initState();
// instance bloc and insert event
exampleBloc = BlocProvider.of<ExampleBloc>(context)..add(StartEvent());
//or
//exampleBloc = context.read<ExampleBloc>()..add(StartEvent());
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Page')),
body: BlocBuilder<ExampleBloc, ExampleState>(
bloc: exampleBloc,
builder: (context, state) {
if (state.isLoading) {
return const Center(child: CircularProgressIndicator());
}
return ListView(
children: List.generate(
state.listInterger.length,
(index) => ListTile(
title: Text('${state.listInterger[index]}'),
),
),
);
},
),
floatingActionButton: FloatingActionButton(
onPressed: (){
exampleBloc.add(OtherEvent());
},
),
);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/518255.html
標籤:扑镖集团颤振块
下一篇:飛鏢/顫振列印地圖中的單個值
