我已经在一个简单的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
由于在noteProvider的构造函数中,我已经获取了fetchNotes,因此,可能是由于在加载应用程序时会获取它,并且由于我也添加了所有其他功能。但这并没有像预期的那样结束,仍然面临着错误。
此外,如果有人可以向我指出一些资源(例如博客/实际代码)以实现此目标,那就更好了。那真是太棒了。
谢谢。