复选框不更新 Flutter 块

gudnpqoy  于 2023-01-06  发布在  Flutter
关注(0)|答案(1)|浏览(156)

我想做一个咖啡机应用


我想更新flutter block包中的复选框,
我使用块状态管理
我试着在网上搜索,但我没有一个很好的答案这个问题
提示帮助我,我的文件被命名为AppCubit是一个块文件和AppState是状态和ChangeCheckBox和这屏幕MainModule
AppCubit是肘节类

class AppCubit extends Cubit<AppState> {
  AppCubit() : super(AppInitial());
  // value in 
  bool isWithCreamChecked = false;
  static AppCubit get(BuildContext context) => BlocProvider.of(context);

  // this is a function for changing the value of the checkbox
  void checkBox({bool? value, bool? changeValue}) {
    changeValue = value!;
    emit(ChangeCheckBox(value,changeValue));
  }
}

AppState应用中的所有状态

abstract class AppState {}

class AppInitial extends AppState {}

// checkbox states
class ChangeCheckBox extends AppState {
  bool value;
  bool changeValue;
  ChangeCheckBox(this.value,this.changeValue);
}

MainModule

Checkbox(
 value: AppCubit.get(context).isWithCreamChecked,
 onChanged: (bool? value) {
   AppCubit.get(context).isWithCreamChecked = value!;
 },
),
const Text('adding Cream to coffee, price is 20')

Checkbox(
 value: AppCubit.get(context).isWithCreamChecked,
 onChanged: (bool? value) {
  AppCubit.get(context).checkBox(
  value: value!,
  changeValue:AppCubit.get(context).isWithCreamChecked
  );
 },
),
const Text('adding cream  to coffee, price is 10')
gcuhipw9

gcuhipw91#

我想这是因为你把!with value放了两次(value!)。一次是在把它发送到这里的复选框函数之前。

AppCubit.get(context).checkBox(
  value: value!,
  changeValue:AppCubit.get(context).isWithCreamChecked
);

然后再次当你设置肘内的复选框。

void checkBox({bool? value, bool? changeValue}) {
    changeValue = value!;
    emit(ChangeCheckBox(value,changeValue));
}

这将导致它与您最初获得的值相同。
只需更改一次值。在像changeValue = !value那样设置值之前,也要将!放在用于更改值的值之前

相关问题