Flutter ListView не будет обновляться

#flutter #dart #flutter-provider #sqflite

#флаттер #dart #flutter-поставщик #sqflite

Вопрос:

Я новичок в разработке 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,
    );
  }
}

  

Комментарии:

1. вы еще не написали ни одного запроса на обновление

2. Я думаю, что conflictAlgorithm заменит его новым контентом

Ответ №1:

NoteProvider не имеет логики обновления, здесь _items.add(newNote) будет добавлен элемент в конце. Таким образом, существующий элемент списка не будет обновляться.

Ниже будет приведен пример того, как элементы списка могут быть обновлены, вы все равно можете обойти это, есть много доступных ответов.

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

Комментарии:

1. я. это работает, conflictAlgorithm: ConflictAlgorithm.replace, тогда почему это не заменяет примечание?

2. То есть для базы данных, а не для класса поставщика, локальные переменные поставщика также должны быть обновлены. Не могли бы вы проголосовать и принять ответ?