【发布时间】:2023-01-17 17:26:02
【问题描述】:
我想永久收听当前主题,因为我在使用 systemchrom 时遇到了一些问题,所以我找到了一个解决方法,我在 Widget 构建中调用了 BlocProvider.of。总的来说,它现在工作得很好,但这是一个干净的解决方案还是不是一个好的做法,如果最后,是否有更好的方式永久收听 SystemUiOverlayStyle ?
@override
Widget build(BuildContext context) {
BlocProvider.of<SysUiCubit>(context).changeTheme(context, isDarkMode);
return BlocBuilder<SysUiCubit, SysUiState>(
builder: (context, state) {
return AnnotatedRegion<SystemUiOverlayStyle>(
我在构建中添加了一个小逻辑,因此只有在主题更改时才会调用 BlocProvider:
bool buildOnce =false;
@override
Widget build(BuildContext context) {
bool isDarkMode = Theme.of(context).brightness == Brightness.dark;
if(!buildOnce){
setPrev(Theme.of(context).brightness == Brightness.dark);
buildOnce=true;
}
if(darkmodePrev != isDarkMode){
BlocProvider.of<SysUiCubit>(context).changeTheme(context, isDarkMode);
buildOnce=false;
}
我在我的应用程序的另一点上问自己同样的事情:
@override
Widget build(BuildContext context) {
final todo= context.watch<TodoListCubit>().state.todo;
return BlocListener<TodoListCubit, TodoListState>(
listener: (context, state) {
这里我有一个待办事项列表,我在构建函数中调用了 context.watch - 同样的问题 - 我没有找到一个更干净的解决方案来在每次重建小部件时更新待办事项列表,所以这是好的还是不好的做法?
【问题讨论】: