【发布时间】:2022-01-02 18:45:22
【问题描述】:
我正在使用future builder如下:
FutureBuilder<List<SurveyModel>>(
future: Provider.of<SurveyUtils>(context, listen: false)
.fetchSurvey(context),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasData) {
final List surveys = snapshot.data as List;
return ListView.builder(
shrinkWrap: true,
itemCount: surveys.length,
itemBuilder: (context, index) {
return surveyTile(
surveyModel: surveys[index] as SurveyModel,
);
},
);
}
return const Center(
child: Padding(
padding: EdgeInsets.symmetric(vertical: 100.0),
child: CircularProgressIndicator(),
),
);
},
),
未来功能如下:
Future<List<SurveyModel>> fetchSurvey(BuildContext context) async {
print('fetch survey function call');
List<SurveyModel> surveys = [];
final String body = await Provider.of<HiveDB>(context, listen: false)
.fetchData(boxName: 'surveys', title: 'surveys') as String;
print('fetched');
final data = json.decode(body)['data'] as List;
surveys = data
.map((survey) => SurveyModel.fromJson(survey as Map<String, dynamic>))
.toList();
print('done');
return surveys;
}
我只有在重新加载后才能从未来的构建器获取数据,除非我重新加载我只会得到循环进度指示器。同样print('fetch survey function call'); 直到重新加载才会执行。
【问题讨论】:
-
改用streambuilder!
-
@Davis 你能解释一下为什么他们需要 StreamBuilder 吗?
-
我没有看到您的代码有任何问题。从我从问题中得到的信息是,即使不刷新页面,您也想无缝获取数据?如果是这样,请使用 streamBuilder
-
除非我颤振热重载,否则我不会获取数据
标签: flutter dart flutter-futurebuilder