Flutter ListView 不会更新

Posted

技术标签:

【中文标题】Flutter ListView 不会更新【英文标题】:Flutter ListView won't Update 【发布时间】:2021-01-10 10:53:12 【问题描述】:

我是 Flutter 开发的新手。我刚开始用提供者模式制作笔记应用程序,但是当我更新笔记时,它不会更新,它只是在列表中创建一个新笔记。但是当我最小化并返回列表时更新。当我单击该项目时,它会显示旧数据。帮帮我

sqlite_helper.dart

import 'package:sqflite/sqflite.dart' as sql;
import 'package:path/path.dart' as path;
import 'package:sqflite/sqlite_api.dart';

class DBHelper 
  static Future<Database> database() async 
    final dbPath = await sql.getDatabasesPath();
    return sql.openDatabase(path.join(dbPath, 'mydatabase.db'),
        onCreate: (db, version) 
      return db.execute(
          'CREATE TABLE notes(id TEXT PRIMARY KEY, title TEXT, content TEXT)');
    , version: 1);
  

  static Future<void> insert(String table, Map<String, Object> data) async 
    final db = await DBHelper.database();
    db.insert(
      table,
      data,
      conflictAlgorithm: ConflictAlgorithm.replace,
    );
  


【问题讨论】:

你还没有写任何更新查询 我认为 conflictAlgorithm 会用新内容替换它 【参考方案1】:

NoteProvider 没有更新逻辑,这里_items.add(newNote) 将在末尾添加一个项目。所以现有的列表项不会得到更新。

下面将举例说明如何更新列表项,您仍然可以围绕这个有很多可用的答案。

_items[_items.indexWhere((note) => note.id == newNote.id)] = newNote;

【讨论】:

是的。行得通,conflictAlgorithm: ConflictAlgorithm.replace,那为什么不替换注释呢? 那是数据库而不是 Provider 类,Provider 本地变量也应该更新。您可以投票并接受答案吗?

以上是关于Flutter ListView 不会更新的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 如何更新用于构建 ListView 的 Future/List 的状态(或值?)(通过 FutureBuilder)

Flutter:ListView内部的widget值在移除item时不会更新

当我更新 ListView 上的列表时,Flutter 页面不会重新加载

即使收到更新的数据,Flutter ListView.builder 的 UI 也不会被 getx 更新

Flutter ListView 未更新

flutter listview item滚出屏幕不重置状态