Flutter 我试图在颤振模型类的帮助下从api加载数据
我试图从api中获取数据,并在使用列表加载数据时与模型类绑定,我得到的是空对象。我尝试过很多解决方案,但没有一种方法能奏效。我从github尝试的代码Flutter 我试图在颤振模型类的帮助下从api加载数据,flutter,dart,Flutter,Dart,我试图从api中获取数据,并在使用列表加载数据时与模型类绑定,我得到的是空对象。我尝试过很多解决方案,但没有一种方法能奏效。我从github尝试的代码 class _ChooseRecipientPageState extends State<ChooseRecipient1> { void recepinets(){ receipientModel().then((dynamic res){ setState(() { widget._re
class _ChooseRecipientPageState extends State<ChooseRecipient1> {
void recepinets(){
receipientModel().then((dynamic res){
setState(() {
widget._recepientModel=res;
});
});
}
//Here i am trying to access data from model class which is load in list type of variable
Container(
child: new Flexible(
child: ListView.builder(
itemCount:widget._recepientModel.length,
itemBuilder: (context,index) {
return GestureDetector(
onTap: () => {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => PostYourStatus(
),
),
),
},
class\u选择指定页面状态扩展状态{
无效收入(){
receipientModel()。然后((动态res){
设置状态(){
widget.\u recepientModel=res;
});
});
}
//在这里,我试图从模型类中访问数据,该类是加载在列表类型的变量中的
容器(
儿童:新的灵活(
子项:ListView.builder(
itemCount:widget.\u recepientModel.length,
itemBuilder:(上下文,索引){
返回手势检测器(
onTap:()=>{
导航器。推(
上下文
材料路线(
生成器:(上下文)=>PostYourStatus(
),
),
),
},
//在这里,我试图访问模型类中的数据,该模型类是列表类型的变量,在这个变量的帮助下,我将访问它的属性
Container(
width: 230,
child: Padding(
padding: const EdgeInsets.all(10),
child: Column(
children: <Widget>[
Row(
children: <Widget>[
Text(
'${widget._recepientModel[index].successData[index].firstName}',
style: TextStyle(
fontFamily: 'Poppins',
fontSize: 17),
),
],
),
容器(
宽度:230,
孩子:填充(
填充:常量边集。全部(10),
子:列(
儿童:[
划船(
儿童:[
正文(
“${widget.\u recepientModel[index].successData[index].firstName}”,
样式:TextStyle(
fontFamily:“罂粟花”,
尺寸:17),,
),
],
),
//这是我的模型课
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';
class RecepientModel {
String status;
List<SuccessData> successData;
int dataCount;
RecepientModel({this.status, this.successData, this.dataCount});
RecepientModel.fromJson(Map<String, dynamic> json) {
status = json['status'];
if (json['success_data'] != null) {
successData = new List<SuccessData>();
json['success_data'].forEach((v) {
successData.add(new SuccessData.fromJson(v));
});
}
dataCount = json['data_count'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['status'] = this.status;
if (this.successData != null) {
data['success_data'] = this.successData.map((v) => v.toJson()).toList();
}
data['data_count'] = this.dataCount;
return data;
}
}
class SuccessData {
int id;
String firstName;
String lastName;
String email;
String phoneNumber;
String profileImage;
String giftedTagLine;
SuccessData(
{this.id,
this.firstName,
this.lastName,
this.email,
this.phoneNumber,
this.profileImage,
this.giftedTagLine});
SuccessData.fromJson(Map<String, dynamic> json) {
id = json['id'];
firstName = json['first_name'];
lastName = json['last_name'];
email = json['email'];
phoneNumber = json['phone_number'];
profileImage = json['profile_image'];
giftedTagLine = json['gifted_tag_line'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['first_name'] = this.firstName;
data['last_name'] = this.lastName;
data['email'] = this.email;
data['phone_number'] = this.phoneNumber;
data['profile_image'] = this.profileImage;
data['gifted_tag_line'] = this.giftedTagLine;
return data;
}
}
Future<List<SuccessData>> receipientModel() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
var accessToken =prefs.getString("token");
var id =prefs.getString("id");
var url = 'https://bruyou.project-demo.info/api/V1/customer/${id}/chooseRecipient';
//encode Map to JSON
var response = await http.get(url,headers: {"Content-Type": "application/json","Authorization":accessToken},);
final responseJson = json.decode(response.body);
Iterable list=responseJson['successData'];
if(responseJson['status']==200){
return list.map((mod) => SuccessData.fromJson(mod)).toList();
}
}
import'package:http/http.dart'作为http;
导入“dart:convert”;
导入“package:shared_preferences/shared_preferences.dart”;
类接收模型{
字符串状态;
列出成功的数据;
int数据计数;
RecepientModel({this.status,this.successData,this.dataCount});
fromJson(映射json){
status=json['status'];
如果(json['success_data']!=null){
successData=新列表();
json['success_data'].forEach((v){
添加(新的successData.fromJson(v));
});
}
dataCount=json['data_count'];
}
映射到JSON(){
最终地图数据=新地图();
数据['status']=this.status;
if(this.successData!=null){
data['success_data']=this.successData.map((v)=>v.toJson()).toList();
}
data['data_count']=this.dataCount;
返回数据;
}
}
类成功数据{
int-id;
字符串名;
字符串lastName;
字符串电子邮件;
字符串电话号码;
字符串轮廓图像;
字符串礼物标语;
成功数据(
{this.id,
这个名字,
这个姓,
这是一封电子邮件,
这个电话号码,
这张照片,
这是giftedTagLine});
SuccessData.fromJson(映射json){
id=json['id'];
firstName=json['first_name'];
lastName=json['last_name'];
email=json['email'];
phoneNumber=json['phone_number'];
profileImage=json['profile_image'];
giftedTagLine=json['gifted_tag_line'];
}
映射到JSON(){
最终地图数据=新地图();
数据['id']=this.id;
数据['first_name']=this.firstName;
数据['last_name']=this.lastName;
数据['email']=this.email;
数据['phone_number']=this.phoneNumber;
数据['profile_image']=this.profileImage;
数据['gifted_tag_line']=this.giftedTagLine;
返回数据;
}
}
Future ReceipEntModel()异步{
SharedReferences prefs=等待SharedReferences.getInstance();
var accessToken=prefs.getString(“token”);
var id=prefs.getString(“id”);
var url='1〕https://bruyou.project-demo.info/api/V1/customer/${id}/chooseRecipient';
//将映射编码为JSON
var response=wait http.get(url,头:{“内容类型”:“应用程序/json”,“授权”:accessToken},);
final responseJson=json.decode(response.body);
Iterable list=responseJson['successData'];
if(responseJson['status']==200){
return list.map((mod)=>SuccessData.fromJson(mod)).toList();
}
}
您正试图通过widget.variable
对无状态widget执行设置state
。您没有显示所有的widget,但我猜它具有\u recepientModel
的某些属性,该属性在widget呈现期间可能为空。如果您想在widget加载时获取数据,应该在中添加\u recepientModel
状态变量StatefullWidget和内部initState
lifecycle函数,调用api fech,然后执行一个setState命令,该命令将使用新数据重新启动小部件
更重要的是,您应该做一些断言,即_recepientModel(我只是猜测是一个列表)不是空的,或者里面有一些项。如果不是空的,那么它将不会在
itemBuilder
内部呈现。为了方便起见,您可以在开始时将\u recepientModel
状态变量设置为空列表。使用futurebuilder方法,它将等待api获取数据并加载listview。。它将在Dactor中显示加载,直到服务完成添加lan仪表标签。请分别将名称从JSON
和到JSON
更改为从Map
和到Map
。JSON是一个字符串。当你解码JSON时,你会得到一个映射。“收件人”、“收件人”、“收件人”、“收件人”。哪种拼写正确?你需要以更少的匆忙和更有条理的方式进行编程。