我需要在屏幕加载时立即加载数据,我使用的是PHP和MYSQL数据库,它们运行良好,需要检索数据,所以没有问题。
当屏幕加载时,我正试图检索数据,功能正在正确完成,因为我在控制台中打印数据,它返回";空";但当我从屏幕1(我想加载数据的屏幕(转到屏幕2(任何屏幕(,然后返回屏幕1时,数据确实会当场加载,不再返回null,这只在第一次运行命令"时打开;颤振运行";然后转到那个屏幕,它不起作用,但当热重新加载屏幕或转到另一个屏幕并返回那个屏幕时,它又起作用了,有人能帮我吗?
下面是我的代码。
class StudentMessages extends StatefulWidget {
@override
_StudentMessagesState createState() => _StudentMessagesState();
}
class _StudentMessagesState extends State<StudentMessages> {
bool isLoading = false;
Future getChats() async{
final response = await http.get(
Uri.encodeFull("https://xxxxxxxxxxxx/xxx/x/x/xx/getChat.php?id=${u.id}&page=$page"),
headers: {
"Accept": 'application/json',
}
);
if(response.statusCode == 200){
setState(() {
jsonData = jsonDecode(response.body);
isLoading = true;
});
if(jsonData == null){
print("this shit ain't working fam.");
}
print(jsonData);
}
}
void initState(){
super.initState();
getChats();
}
@override
Widget build(BuildContext context) {
if(isLoading == true) {
return ListView.builder(
shrinkWrap: true,
padding: EdgeInsets.all(15),
itemCount: jsonData == null ? 0 : jsonData.length,
itemBuilder: (BuildContext context, int index) {
if(jsonData == null){
return new Container();
}else{
return new Card(
child: ListTile(
leading: CircleAvatar(
backgroundImage: AssetImage('assets/images/tutor2.jpg'),
),
title: Text('${jsonData[index]['user_firstName']} ${jsonData[index]['user_lastName']}'),
subtitle: Text(
'${jsonData[index]['username']}',
overflow: TextOverflow.ellipsis,
),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => ChatPage(tutorData: jsonData)),
);
},
),
);
}
},
);
}else{
return Center(child:CircularProgressIndicator());
}
}
}
在您的代码中,您没有正确使用变量isLoading
在getChats
功能开始时添加setState((){ isLoading=true; });
并且在功能setState((){ isLoading=false; });
结束时
因为目前您没有使用此
正在绘制布局,但没有数据,因此显示null error
但当你调用屏幕时,另一个时间数据被预加载,所以你的布局看起来是正确的。
Future getChats() async{
setState((){ isLoading=true; });
final response = await http.get(
Uri.encodeFull("https://xxxxxxxxxxxx/xxx/x/x/xx/getChat.php?id=${u.id}&page=$page"),
headers: {
"Accept": 'application/json',
}
);
if(response.statusCode == 200){
jsonData = jsonDecode(response.body);
if(jsonData == null){
print("this shit ain't working fam.");
}
print(jsonData);
}
setState((){ isLoading=false; });
}