【发布时间】:2021-03-10 16:27:43
【问题描述】:
在我的提醒应用程序中,当我单击添加提醒按钮时,它实际上将提醒添加到数据库中,然后更新我的提醒,但提醒列表没有重建。出于某种原因,当我删除提醒时,类似的场景效果很好。
我集团的一部分:
void _loadReminders() async {
final reminders = await _repository.getAllReminders();
reminders.sort((a, b) => a.dateTime.isAfter(b.dateTime) ? 1 : -1);
if (reminders.isNotEmpty) {
add(RemindersLoaded(reminders: reminders));
}
}
@override
Stream<MainState> mapEventToState(MainEvent event) async* {
if (event is ItemSelected) {
yield state.copyWith(isSelectedModeActive: true);
} else if (event is SelectModeDisabled) {
yield state.copyWith(isSelectedModeActive: false);
} else if (event is RemindersLoaded) {
yield state.copyWith(reminders: event.reminders);
} else if (event is SaveReminderPressed) {
await _saveReminder(event.reminder);
_loadReminders();
} else if (event is DeletePressed) {
await deleteReminders();
_loadReminders();
add(SelectModeDisabled());
}
}
小部件:
Widget _remindersList(BuildContext context) =>
BlocBuilder<MainBloc, MainState>(
builder: (context, state) {
return ListView.builder(
itemCount: state.reminders.length,
itemBuilder: (context, index) {
return ReminderItem(reminders: state.reminders, index: index);
},
);
},
);
状态:
class MainState extends Equatable {
final bool isSelectedModeActive;
final List<Reminder> reminders;
final int quantityOfSelectedItems;
MainState({
this.isSelectedModeActive = false,
this.reminders,
}) : quantityOfSelectedItems =
reminders.where((reminder) => reminder.isSelected).length;
MainState copyWith({
bool isSelectedModeActive,
List<Reminder> reminders,
}) =>
MainState(
isSelectedModeActive: isSelectedModeActive ?? this.isSelectedModeActive,
reminders: List<Reminder>()..addAll(reminders ?? this.reminders),
);
@override
List<Object> get props => [
isSelectedModeActive,
reminders,
quantityOfSelectedItems,
];
}
浪费了几天,试图解决这个问题。更多详情可以查看我在 github 上的项目:https://github.com/rockstar4095/reminder_flutter_app/tree/main_screen
【问题讨论】:
-
在构建 BlocBuilder 的内容时抛出异常。只需修复该异常,即在函数 _reminderDescription 中的reminder_item.dart 文件中删除作为对齐小部件的子项的灵活小部件,请在下面查看我的答案。
标签: flutter dart flutter-bloc