首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >颤振集团:屈服状态不会触发小部件重建

颤振集团:屈服状态不会触发小部件重建
EN

Stack Overflow用户
提问于 2020-11-27 23:32:50
回答 1查看 419关注 0票数 1

在我的提醒应用程序中,当我单击add提醒按钮时,它实际上会将提醒添加到数据库中,然后更新我的提醒,但是提醒列表并不是重新构建的。出于某种原因,当我删除提醒时,类似的场景效果很好。

我集团的一部分:

代码语言:javascript
复制
  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());
    }
  }

小部件:

代码语言:javascript
复制
  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);
            },
          );
        },
      );

国家:

代码语言:javascript
复制
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上的项目

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

代码语言:javascript
复制
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()

代码语言:javascript
复制
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();
        },
      );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65044952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档