我正在try 解决在使用Dismissible小工具和Provider package时发生的问题.

当我放弃一张卡时,这叫做:

 Provider.of<NMyProvider>(context, listen: false).toggleIsDone(object.id);

提供者:

Future<void> deleteNotebook(int id) async {
    ...
    final notebookId = _items.indexWhere((notebook) => notebook.id == id);
    ...
    _items.removeAt(notebookId);
    notifyListeners();
  }

这会使动画变得笨重,具有明显的滞后,但在移除NotifyListeners时不会发生.

推荐答案

最有可能的是,根据Provider 的通知正在重建整个屏幕.有一些解决方案可以解决这个问题:

  1. Consumer<NMyProvider>/context.watch<NMyProvider>(context)/Provider.of<NMyProvider>(context, listen: true)移至更接近其用途的位置.Ffltter只重新构建使用相同context的窗口小部件;
  2. 每台笔记本电脑都要有唯一的key.不是索引位置,而是像notebookId这样的唯一键.Ffltter将重新使用已经构建的笔记本窗口小部件,其中两个版本之间的密钥相同;
  3. 拆分NMyProvider:将对此Provider 没有意义的所有内容移到其他Provider 中.如果有许多不相关的状态在一起,则根小部件使用此提供程序的机会会更高.NMyProvider应只处理笔记本 list 的状态;

Flutter相关问答推荐

如何将图像从顶部和底部半向外设置为飘动

如何在flutter文本字段中添加要点条目?

在Flutter中创建具有固定行的压缩水平列表

为什么我不能看到类音频源在flutter?'

如果文档确实存在,则FiRestore将";False";返回到";if-Document-Existes";...还是我说错了?

audioQuery不会等待判断存储权限

将图标呈现在Flutter 克牌小工具的角落上

为什么Spotify Auth API返回400,而";code_verier不正确?

如何在Date Time类中只显示日期?

无法将新文物与Flutter 项目集成在一起

使用现有Map方法对子类克隆方法的逻辑进行Dart标准化

如何在 Flutter 中创建具有渐变背景色的自定义 Snackbar?

Supabase Auth:重定向到 Google.com 而不是我的应用程序

Dart 和 flutter 错误无法在您的 PATH 中找到 git

使用 flutter_svg 在 flutter 中的 Canvas 上绘制 SVG 图像

Cloud firestore:如何使用 map 对象创建和更新嵌套数组

Riverpod 在使用冻结副本更新状态时触发重建,即使没有任何更改

如何限制用户每 24 小时执行的操作数?

http响应在Flutter 中返回307

"!" 是什么意思该运算符在使用如下方式时意味着dart ?