[英]How can I generate list using dio post request?
我嘗試了很多但無法修復,我正在嘗試我的 json 響應
{
"data": [
{
"id": 1,
"team_one_id": 1,
"team_two_id": 2,
"match_date": "04 Mar 2021",
"is_started": 0,
"match_between": "Team1 VS Team2",
"match_between_nick": "ABC VS XYZ",
"ground_time": "4:30 pm"
}
]
}
我的 Model
import 'package:flutter/material.dart';
import 'dart:core';
class Matches{
final int id;
final String match_date;
final String match_between;
final String match_between_nick;
final String ground_time;
Matches({
this.id,
this.match_date,
this.match_between,
this.match_between_nick,
this.ground_time
});
factory Matches.fromJson(Map<String, dynamic> parsedJson){
return Matches(
id: parsedJson['id'],
match_date: parsedJson['match_date'],
match_between: parsedJson['match_between'],
match_between_nick: parsedJson['match_between_nick'],
ground_time: parsedJson['ground_time']
);
}
}
使用工作正常的 dio 獲取記錄
_getMatchesWithDio() async {
var dio = Dio();
Map<String, String> headers = {
'Content-Type': 'multipart/form-data',
'Accept-Charset': 'UTF-8'
};
FormData formData = new FormData.fromMap({
"api_actions": "yes"
});
Response response = await dio.post(
'http://www.myapiurl.com/project/api.php',
data: formData,
options: Options(
headers: {"x-auth": 'xyz' },
)
);
matches = Matches.fromJson(response.data['data']);
return matches;
}
以下是我未來的建設者
SafeArea(
top: true,
child: FutureBuilder(
future: _getMatchesWithDio(),
builder: (context, snapshot){
if(snapshot.connectionState == ConnectionState.waiting){
return Center(
child: CircularProgressIndicator(),
);
}
if(snapshot.hasData){
return ListView(
children: snapshot.data.map<Widget>((single){
return Text('saddasd');
}).toList()
);
}
}
)
)
而且我想發布我在終端中得到的錯誤日志
I/flutter ( 9314): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter ( 9314): The following assertion was thrown building FutureBuilder<dynamic>(dirty, state:
I/flutter ( 9314): _FutureBuilderState<dynamic>#1f5e1):
I/flutter ( 9314): A build function returned null.
I/flutter ( 9314): The offending widget is:
I/flutter ( 9314): FutureBuilder<dynamic>
I/flutter ( 9314): Build functions must never return null.
I/flutter ( 9314): To return an empty space that causes the building widget to fill available room, return
I/flutter ( 9314): "Container()". To return an empty space that takes as little room as possible, return
I/flutter ( 9314): "Container(width: 0.0, height: 0.0)".
I/flutter ( 9314):
I/flutter ( 9314): The relevant error-causing widget was:
I/flutter ( 9314): FutureBuilder<dynamic> file:///D:/asdasd/asdas/lib/screens/HomeScreen.dart:52:16
I/flutter ( 9314):
I/flutter ( 9314): When the exception was thrown, this was the stack:
I/flutter ( 9314): #0 debugWidgetBuilderValue.<anonymous closure> (package:flutter/src/widgets/debug.dart:302:7)
I/flutter ( 9314): #1 debugWidgetBuilderValue (package:flutter/src/widgets/debug.dart:323:4)
I/flutter ( 9314): #2 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4632:7)
I/flutter ( 9314): #3 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4800:11)
I/flutter ( 9314): #4 Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
I/flutter ( 9314): #5 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2730:33)
I/flutter ( 9314): #6 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:913:20)
I/flutter ( 9314): #7 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:302:5)
I/flutter ( 9314): #8 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1117:15)
I/flutter ( 9314): #9 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1055:9)
I/flutter ( 9314): #10 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:971:5)
I/flutter ( 9314): #14 _invoke (dart:ui/hooks.dart:251:10)
I/flutter ( 9314): #15 _drawFrame (dart:ui/hooks.dart:209:3)
I/flutter ( 9314): (elided 3 frames from dart:async)
I/flutter ( 9314):
I/flutter ( 9314): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter ( 9314): Another exception was thrown: A build function returned null.
請指導我哪里錯了,以便我可以解決問題。 我很感激。
太感謝了
當您不在if
管理的案例中時,它會錯過return
。
SafeArea(
top: true,
child: FutureBuilder(
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(
child: CircularProgressIndicator(),
);
}
if (snapshot.hasData) {
return ListView(
children: snapshot.data.map<Widget>((single) {
return Text('saddasd');
}).toList());
}
// add a SizedBox for the other case
return const SizedBox();
},
),
)
您的回復 json 是Matches
列表,但您使用 function 解碼列表以解碼單個 object
您需要在 _getMatchesWithDio() function 的末尾添加此行。
return List<Matches>.from(response.data['data'])
並將您的返回類型放入您的 function List<Matches> _getMatchesWithDio()...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.