我需要加载数据的权利时,屏幕加载,我使用PHP和MYSQL数据库,这些工作良好,检索数据需要检索,所以没有问题。
我正在尝试在屏幕加载时检索数据,由于我在控制台中打印了数据,该函数正在正确地完成,但当我从屏幕1(我要加载数据的屏幕)返回“NULL”时 到屏幕2(任意屏幕),然后回到屏幕1,数据确实在点上加载,不再返回空值,这只在第一次运行命令“flutter run”时打开,并转到那个屏幕,它不工作,但当热重新加载屏幕或转到另一个,回到那个屏幕,它又工作得很好,有人能帮我吗?
下面是我的代码。
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;});
的末尾
因为当前您没有使用此
正在绘制布局,但没有数据,因此显示空错误
,但当您再次调用屏幕时,数据被预加载,因此布局显示正确。
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; });
}