仅在页面重建或应用重新加载时才加载数据-提供者

时间:2020-04-09 17:36:55

标签: flutter

我已经在一个简单的Notes应用程序中实现了提供程序模式。

问题:

仅当重新加载应用程序或重建屏幕时,数据才会加载到屏幕上。

这是我的note_list无状态小部件,显示注释:


class NoteList extends StatelessWidget {
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Note List"),
      ),
      body: getnoteListView(context),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          Navigator.push(context, MaterialPageRoute(builder: (context) {
            return ChangeNotifierProvider(
              builder: (context) => NoteProvider(),
              child: NoteDetail(Note('', '', 2), 'Add Note'),
            );
          }));
        },
        tooltip: "Add Note",
        child: Icon(Icons.add),
      ),
    );
  }

  ListView getnoteListView(BuildContext context) {      // <---- the thing to be focused here
    final noteProvider = Provider.of<NoteProvider>(context);
    var noteList = noteProvider.noteList;
    var count = noteList.length;
    TextStyle titleStyle = Theme.of(context).textTheme.subhead;
    return ListView.builder(
      itemCount: count,
      itemBuilder: (BuildContext context, int index) {
        print(noteList[index].title);
        return Text(
          noteList[index].title,
          style: titleStyle,
        );
      },
    );
  }
}

还有NoteProvider.dart

import 'package:flutter/material.dart';
import 'package:pass_list/models/note.dart';
import 'package:pass_list/utils/database_helper.dart';

// https://stackoverflow.com/a/56713184
class NoteProvider with ChangeNotifier {
  DatabaseHelper databaseHelper = DatabaseHelper();
  List<Note> _noteList = [];
  int count = 0;
  // get updateListView;

get noteList => _noteList;

  NoteProvider(){
    fetchNotes();
  }

  void setNoteList(notesList) {
     _noteList = notesList;
// notifyListeners(); <- this didn't work either
  }

  fetchNotes() async {
    await databaseHelper.initializeDatabase();
    List<Note> noteList = await databaseHelper.getNoteList();
    setNoteList(noteList);  
  }

  Future<int> updateNote(note) async{
    var result = await databaseHelper.updateNote(note);
    await fetchNotes();
    notifyListeners();
    return result;
  }

  Future<int> insertNote(note) async{
    var result =  await databaseHelper.insertNote(note);
    await fetchNotes();
    notifyListeners();
    return result;
  }

  Future<int> deleteNote(noteId) async{
    var result =  await databaseHelper.deleteNote(noteId);
    await fetchNotes();
    notifyListeners();
    return result;
  }
}

如果您想运行该应用,则为仓库:Repo

目录结构:

lib
├── main.dart
├── models
│   └── note.dart
├── screens
│   ├── note_detail.dart
│   └── note_list.dart
└── utils
    ├── database_helper.dart
    └── NoteProvider.dart

问题的视频:https://youtu.be/YrAVTum9P6E

更新:

由于在noteProvider的构造函数中,我已经获取了fetchNotes,因此,可能是由于在加载应用程序时会获取它,并且由于我也添加了所有其他功能。但这并没有像预期的那样结束,仍然面临着错误。

帮助设计和最佳实践

此外,如果有人可以向我指出一些资源(例如博客/实际代码)以实现此目标,那就更好了。那真是太棒了。

谢谢。

0 个答案:

没有答案