Python 使用rest API时,数据在颤振中消失
当我使用future builder从后端获取底部导航栏第一个选项卡上的数据时,当我切换到第二个选项卡底部导航栏时,它将消失 为什么会这样 我该如何解决这个问题 上面是我第一次加载应用程序,API被点击时的页面。 上面是我更改底部选项卡一次并再次返回第三个选项卡时的页面 这种情况每次都会发生Python 使用rest API时,数据在颤振中消失,python,api,rest,flutter,flutter-test,Python,Api,Rest,Flutter,Flutter Test,当我使用future builder从后端获取底部导航栏第一个选项卡上的数据时,当我切换到第二个选项卡底部导航栏时,它将消失 为什么会这样 我该如何解决这个问题 上面是我第一次加载应用程序,API被点击时的页面。 上面是我更改底部选项卡一次并再次返回第三个选项卡时的页面 这种情况每次都会发生 import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'dart:convert
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'dart:async';
class newExample extends StatefulWidget {
@override
newExampleState createState() => newExampleState();
}
class newExampleState extends State<newExample> {
var userid;
Future<http.Request> getData() async
{
var client = new http.Client();
final response = await client.get('http://182.0.0.102:5000/user_detail');
final responseJson = json.decode(response.body);
dynamic user_id = responseJson['user_id'];
userid = user_id;
print(responseJson);
client.close();
// return responseJson;
}
@override
void initState() {
super.initState();
getData();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: ListView.builder(
itemCount: userid.length,
itemBuilder: (BuildContext context, int index){
return _buildCards(context, index);
},
),
),
);
}
Widget _buildCards(BuildContext context, int index){
return Card(
child: Padding(
padding: const EdgeInsets.all(8.0),
child:
// Text('hi'),
Text('${userid[index]}'),
)
);
}
}
import'包装:flift/cupertino.dart';
进口“包装:颤振/材料.省道”;
导入“dart:convert”;
将“package:http/http.dart”导入为http;
导入“dart:async”;
类newExample扩展StatefulWidget{
@凌驾
newExampleState createState()=>newExampleState();
}
类newExampleState扩展了状态{
var用户id;
Future getData()异步
{
var client=newhttp.client();
最终响应=等待客户端。获取('http://182.0.0.102:5000/user_detail');
final responseJson=json.decode(response.body);
动态用户标识=responseJson['user\u id'];
userid=user\u id;
印刷品(responseJson);
client.close();
//返回响应;
}
@凌驾
void initState(){
super.initState();
getData();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:容器(
子项:ListView.builder(
itemCount:userid.length,
itemBuilder:(构建上下文,int索引){
返回构建卡(上下文、索引);
},
),
),
);
}
小部件构建卡(构建上下文上下文,int索引){
回程卡(
孩子:填充(
填充:常数边集全部(8.0),
儿童:
//文本(“hi”),
文本(“${userid[index]}”),
)
);
}
}
我认为这是因为您在initState
中调用getData()
,并且它只工作一次。尝试如下方式调用您的函数:
@override
void initState() {
SchedulerBinding.instance.addPostFrameCallback((_) {
getData().then((response) {
if (mounted)
setState(() {
data= response?.something;
});
});
});
super.initState();
}
阅读有关SchedulerBinding的信息:
这里有什么东西?任何变量或其他?@palak我不知道你的反应是什么样子。例如,我想从我的响应中访问字段,因此:response?.fields
引发了另一个异常:NoSuchMethodError:对null调用了getter“visible”。════════ 呈现库捕获到异常═════════════════════════════════════════════════════ 对null调用了方法“debugassertesvalid”。Receiver:null尝试调用:debugassertesvalid()
这是我现在发现的错误,我在代码中看不到。它在哪里?是的,我也没有看到它。。!!在上面的代码中,我应该在获取数据/响应的地方使用responseJson吗?这是否回答了您的问题?