在我的提醒应用程序中,当我单击add提醒按钮时,它实际上会将提醒添加到数据库中,然后更新我的提醒,但是提醒列表并不是重新构建的。出于某种原因,当我删除提醒时,类似的场景效果很好。
我集团的一部分:
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上的项目
发布于 2020-11-28 00:04:10
问题在reminder_item.dart文件中,在函数_reminderDescription中,您使用的是非Flex父函数的Flexible。只需删除灵活的Widget或使其直接子行或列Widget,一切都将正常工作。
Widget _reminderDescription(BuildContext context) => =>对齐(对齐: Alignment.centerLeft,子) RichText(溢出: TextOverflow.ellipsis,text: TextSpan(文本:_current.description,style: Theme.of(context).textTheme.caption,),);
还可以更新MainScreen Widget
class MainScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
final content = Scaffold(
appBar: AppBar(
title: Text('Напоминания'),
actions: [
_deleteIcon(context),
],
),
floatingActionButton: FloatingActionButton(
onPressed: () {
EditReminderDialog.open(context);
},
child: Icon(Icons.add),
),
body: _remindersList(context),
);
return BlocProvider(
create: (context) {
return context.read<MainBloc>();
},
child: Builder(builder: (context) {
return content;
}),
);
}编辑
在弹出对话框保存函数中也缺少Navigator.of(context).pop()。
Widget _save(BuildContext context) => RaisedButton(
child: Text('Сохранить'),
onPressed: () {
final reminder = Reminder(
id: null,
title: 'test reminder title',
description:
'test reminder description ${DateTime.now().toLocal()}',
dateTime: DateTime.now(),
);
context.read<MainBloc>().add(SaveReminderPressed(reminder: reminder));
Navigator.of(context).pop();
},
);https://stackoverflow.com/questions/65044952
复制相似问题