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

我的 flutter 应用程序中有一个 Future Builder,它显示——

  1. Error : 如果json解析有错误

  2. 数据:如果一切顺利

  3. 装载机:如果需要时间

一切正常。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;

                                  },

  

德玛西亚99
浏览 119回答 3
3回答

冉冉说

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

SMILET

future为like创建一个状态变量late&nbsp;final&nbsp;future&nbsp;=&nbsp;APIs().getStudentDetails();并使用FutureBuilder( &nbsp;&nbsp;&nbsp;future:&nbsp;future&nbsp;,您可以检查Fixing a common FutureBuilder and StreamBuilder problem

慕容708150

class _YourWidgetState extends State<YourWidget> with AutomaticKeepAliveClientMixin<YourWidget> {&nbsp;@override&nbsp; bool get wantKeepAlive => true;因此,使用 AutomaticKeepAliveClientMixin 扩展您的 Widget,这样 Listview 中的项目将不会被复制
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go