Flutter ListView不会更新

3

我刚接触Flutter开发。我刚开始使用Provider模式制作笔记应用程序,但是当我更新笔记时,它不会更新,而是在列表中创建一个新的笔记。但是当我最小化并返回时,列表已经更新。当我点击项目时,它显示旧数据。请帮助我。

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,
    );
  }
}


1
你还没有编写任何更新查询。 - Jitesh Mohite
我认为 conflictAlgorithm 将用新内容替换它。 - Athira Reddy
1个回答

2

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

下面将是如何更新列表项的示例,您仍然可以围绕此进行,有很多可用的答案。

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

嗯,那行得通,冲突算法:ConflictAlgorithm.replace,那为什么这个笔记没有被替换呢? - Athira Reddy
这是针对数据库而不是Provider类的,Provider本地变量也应该更新。你能给答案点赞并接受吗? - Jitesh Mohite

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接