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 页面不会重新加载