为了账号安全,请及时绑定邮箱和手机立即绑定

未来构建器中出现无意义的 Api 请求

未来构建器中出现无意义的 Api 请求

Go
德玛西亚99 2023-03-07 11:15:44
我的 flutter 应用程序中有一个 Future Builder,它显示——Error : 如果json解析有错误数据:如果一切顺利装载机:如果需要时间一切正常。Future 正在调用一个“future”函数,该函数正在执行一些学生数据的获取请求,而“builder”正在显示它。我在同一页上有一个编辑对话框。我可以通过put请求编辑学生信息。问题是,当我单击编辑对话框中的表单字段时,我注意到获取请求自动发生了大约 10 次。当我保存编辑时,会出现一个确认对话框,表明数据已更新。当这种情况再次发生时,获取请求最多发生 10 次。然后它弹出。所以服务器上大约有 20 个无用的请求发生。我认为它发生是因为当我单击表单字段时,键盘出现并且底层显示小部件重建,调用 api。当数据被编辑时,键盘会再次回到原来的位置,小部件会重建,调用 api。我该如何解决这个问题?如果有帮助,这是代码: child: FutureBuilder(            future: APIs().getStudentDetails(),            builder: (context, data) {              if (data.hasError) {                return Padding(                    padding: const EdgeInsets.all(8),                    child: Center(child: Text("${data.error}")));              } else if (data.hasData) {                var studentData = data.data as List<StudentDetails>;                return Padding(                  padding: const EdgeInsets.fromLTRB(0, 15, 0, 0),                  child: SingleChildScrollView(                    child: SizedBox(                      height: MediaQuery.of(context).size.height * 0.9,                      child: ListView.builder(                        itemCount: studentData.length,                        itemBuilder: ((context, index) {                          final student = studentData[index];                          final id = student.studentId;                          final father = student.fatherName;                          final mother = student.motherName;                          final cg = student.cg;                                  },  
查看完整描述

3 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

我遵循了这个答案并且它有效。Flutter FutureBuilder 不断被调用 显然我不得不“懒惰地初始化我的未来”和“在 initState 中初始化我的未来:”



查看完整回答
反对 回复 2023-03-07
?
SMILET

TA贡献1796条经验 获得超4个赞

future为like创建一个状态变量

late final future = APIs().getStudentDetails();

并使用

FutureBuilder(
   future: future ,

您可以检查Fixing a common FutureBuilder and StreamBuilder problem


查看完整回答
反对 回复 2023-03-07
?
慕容708150

TA贡献1831条经验 获得超4个赞

class _YourWidgetState extends State<YourWidget> with AutomaticKeepAliveClientMixin<YourWidget> {

 @override

  bool get wantKeepAlive => true;

因此,使用 AutomaticKeepAliveClientMixin 扩展您的 Widget,这样 Listview 中的项目将不会被复制


查看完整回答
反对 回复 2023-03-07
  • 3 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号