【问题标题】:Flutter ListView won't UpdateFlutter ListView 不会更新
【发布时间】: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 会用新内容替换它

标签: flutter dart flutter-provider sqflite


【解决方案1】:

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

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

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

【讨论】:

  • 是的。行得通,conflictAlgorithm: ConflictAlgorithm.replace,那为什么不替换注释呢?
  • 那是数据库而不是 Provider 类,Provider 本地变量也应该更新。您可以投票并接受答案吗?
猜你喜欢
  • 2020-11-16
  • 2022-07-06
  • 2018-01-20
  • 2021-08-06
  • 2015-07-08
  • 1970-01-01
  • 2020-10-24
  • 2019-01-19
  • 1970-01-01
相关资源
最近更新 更多