我试图使用API中的数据,但我需要的数据是为不同的请求找到的。在颤栗中有未来。通过这个,我可以请求API的必要部分。我的想法是,我正在努力为火车制定时间表。在这个列车时刻表中,我需要列车号、站台名和到达时间。我正在尝试按照文档和视频中所描述的方式执行所有操作,但我做不到,因为我遇到了一个错误“方法”[]”被调用为null。接收者:null尝试呼叫:[(“st_title”)'
在这里提问之前,我试着做了这样的事情:
body:ListView.builder(itemBuilder: (context, index){
return ListTile(
title: Text(stops[index]['st_title']),
但是它不起作用,给我一个错误:
对null调用了方法“[]”。接收者:null尝试呼叫:
我在这里看到了一个类似错误的解决方案,但我已经尝试了所有的解决方案,但无法找出我到底做错了什么。你能给我指一下吗?也许我没有真正意识到我到底应该做什么。你们能帮帮我吗?
我的全部代码是:
Map <String, dynamic> stops;
Map <String, dynamic> marhe;
Map <String, dynamic> arrival;
@override
void initState() {
// TODO: implement initState
super.initState();
fetchData();
}
Future fetchData() async{
String username = '***';
String password = '***';
String basicAuth =
'Basic ' + base64Encode(utf8.encode('$username:$password'));
print(basicAuth);
final result = await Future.wait([
http.get( 'http://link/getTableCur.php?fmt=json',
headers: <String, String>{'authorization': basicAuth}),
http.get( 'http://link//getStops.php?fmt=json',
headers: <String, String>{'authorization': basicAuth}),
http.get( 'http://link//getMarshes.php?fmt=json',
headers: <String, String>{'authorization': basicAuth}),
]);
setState(() {
stops = json.decode(result[0].body);
marhe = json.decode(result[1].body);
arrival = json.decode(result[2].body);
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
),
body:ListView.builder(itemBuilder: (context, index){
return ListTile(
title: Text(stops[index]['st_title']),
leading: Text(marhe['mr_num']),
subtitle: Text(arrival['ta_arrivetime'].toString()),
);
}
//title: Text(arrival[index]['tc_arrivetime']?? ''),
),
更新!
谢谢你帮助我@Patrick Freitas,我本想把他说的都说出来,但现在我犯了一个错误:
The getter 'length' was called on null.
Receiver: null
Tried calling: length
对于以下代码:
body: stops.length > 0 ? ListView.builder(
//itemCount: stops.length,
itemBuilder: (BuildContext context, int index) {
return ListTile(
trailing: Text(marhe[index]["mr_num"]),
title: Text(stops[index]['st_title']),
// subtitle: Text(arrival[index]["ta_arrivetime"]),
);
},
) : CircularProgressIndicator()
)
当我使用isdatagrade时也是如此?列表视图。生成器{…}:CircularProgressIndicator()
然后它给我无尽的加载,屏幕上没有数据出现。它还会给出一个错误"错误:列表
我的代码如下所示:
setState(() {
stops = json.decode(result[0].body[0]);
marhe = json.decode(result[1].body[0]);
arrival = json.decode(result[2].body[0]);
isDataObtained = true;
});
}
此外,我所有这些链接的json如下所示:
for **getTableAll**
[
{
"ta_id": 1,
"srv_id": 1,
"st_id": 3026,
"mr_id": 305,
"rl_racetype": "B",
"uniqueid": 21,
"ta_systime": "2021-03-11 15:01:47",
"ta_arrivetime": "2021-03-11 15:06:11",
"mv_id": 957,
"rc_kkp": "",
"ta_len2target": 4.996839,
"u_inv": false
},
{
for **getStops**
{
"st_id": 1,
"ok_id": "18410",
"sr_id": 0,
"st_title": "Station1",
"st_desc": "Station1",
},
for **Marshes:**
[
{
"mr_id": 1,
"tt_id": 1,
"mt_id": 2,
"mr_num": "112",
},
这是三个数组,我需要同时从所有三个数组中获取数据:如上所述,我需要关于到达时间、列车号和站台名称的数据。我尝试使用颤振文档中描述的经典数据检索,但没有任何效果。在Stackoverflow上,我被告知我需要使用Future。等等,但现在我卡住了,弄糊涂了。
Flutter不知道你的异步请求是否已经返回,所以它试图在没有任何信息的情况下呈现一个数组。为了防止这种情况,您可以添加一个IF验证来验证您的数组是否已经填充。
如果:
body:
stops.length > 0 ?
ListView.builder(...) :
CircularProgressIndicator()
由于您有三个数组要填充,您可以创建一个布尔值来控制您的请求是否已经填充了所有三个数组,如isDataObtded。
Map <String, dynamic> stops;
Map <String, dynamic> marhe;
Map <String, dynamic> arrival;
bool isDataObtained = false;
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(),
body:
isDataObtained ?
ListView.builder(...) :
CircularProgressIndicator()
)
)
}
Future fetchData() async{
final result = await Future.wait([...]);
setState(() {
stops = json.decode(result[0].body);
marhe = json.decode(result[1].body);
arrival = json.decode(result[2].body);
isDataObtained = true;
});
}
此错误“”getter'uid'在null上被调用。receiver:null尝试调用:uid“ 退出按钮: 控制台: widgets库捕获的异常接收者:null尝试调用:uid 相关的导致错误的小部件是:Qr file://g://androidstudioprojects/facem/lib/screens/home/home.dart:687:67当抛出异常时,这是堆栈:#0 object.
错误:building Home抛出了以下NoSuchMethodError(脏,依赖项:[MediaQuery],state:_homestate#a6c1f):方法'>'是在null上调用的。接收者:null尝试调用:>(1)
我在使用Flutter注册电子邮件和密码时遇到了问题。我用它来注册新用户,它保存了他们的Firebase身份验证信息,但不会将任何配置文件数据保存到Firebase存储部分。我不确定我在这里做错了什么,我不明白为什么id是空的。一些帮助和指导将真的非常感谢! 这就是我犯的错误 这是来自用户的。飞奔 这是来自注册。飞奔 错误指向用户引用。文档行。 这是Timeline.dart 该错误指向这两个方法
每当我尝试使用firebase auth注册用户时,我的应用程序就会崩溃。我的代码如下: