class StudentProvider extends ChangeNotifier {
DataBaseHelper data = DataBaseHelper();
List<StudentModel>? student = [];
List<StudentModel>? searchStudentList;
Future<List<StudentModel>> getStudentList() async {
student = await data.getStudent();
return student!;
}
void insert(StudentModel studentModel) async {
print("reached insert in provider class");
await data.insertStudent(studentModel);
notifyListeners();
}
}
上面的代碼是我的提供者類,我想使用從 getStudentList 串列方法獲得的串列來構建小部件。問題是它回傳一個未來,因為我從資料庫中獲取資料。
body: TabBarView(children: [
Consumer<StudentProvider>(
builder: (context, StudentProvider student, ch) {
print("rebuild happened");
return ListView(
children: [
...student.getStudentList().map((e) {
return HomeScreen(student: e);
}).toList(),
],
);
}),
這是我嘗試構建小部件的地方。我無法這樣做。
uj5u.com熱心網友回復:
in getStudentList() you have used Future<List<StudentModel>> so that future can not access in listview.
> So please use streambuilder or remove the future from the list
class StreamBuilderUsage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Expanded(
child: Center(
child: Consumer<StudentProvider>(
builder: (context, StudentProvider student, ch) {
return StreamBuilder(
stream: student.getStudentList().asStream(),
builder: (context, snapshot){
print(snapshot.connectionState);
if(snapshot.hasData){
var data = snapshot.data as List<String>;
return ListView.builder(
itemCount: data.length,
itemBuilder: (context, index){
return Text(data[index]);
},
);
}else{
return CircularProgressIndicator();
}
},
);
}
),
),
),
],
),
);
}
}
uj5u.com熱心網友回復:
我接受的答案也適用,我們可以使用 Future builder 來做同樣的事情。這是代碼:-
body: TabBarView(
children: [
Consumer<StudentProvider>(
builder: (context, StudentProvider student, ch) {
print("rebuild happened");
return FutureBuilder(
future: student.getStudentList(),
builder: (context, snapshot) {
if (snapshot.hasData) {
List<StudentModel> data =
snapshot.data as List<StudentModel>;
return ListView.builder(
itemCount: data.length,
itemBuilder: (context, index) {
return HomeScreen(student: data[index]);
});
} else
return Container(child: Text("No data"));
},
);
},
),
Container(),//neglect this container
],
),
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/337366.html
