我的 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个赞
 
                    
                    
                            SMILET
                            
                                
                            
                        
                        
                                                
                    TA贡献1796条经验 获得超4个赞
future为like创建一个状态变量
late final future = APIs().getStudentDetails();
并使用
FutureBuilder( future: future ,
您可以检查Fixing a common FutureBuilder and StreamBuilder problem
 
                    
                    
                            慕容708150
                            
                                
                            
                        
                        
                                                
                    TA贡献1831条经验 获得超4个赞
class _YourWidgetState extends State<YourWidget> with AutomaticKeepAliveClientMixin<YourWidget> {
@override
bool get wantKeepAlive => true;
因此,使用 AutomaticKeepAliveClientMixin 扩展您的 Widget,这样 Listview 中的项目将不会被复制
- 3 回答
- 0 关注
- 128 浏览
添加回答
举报
0/150
	提交
		取消
	