Flutter 显示API数据时不存在或存在未来的生成器问题,颤振
我在没有FutureBuilder的情况下调用API,当我在Flutter 显示API数据时不存在或存在未来的生成器问题,颤振,flutter,mobile,flutter-provider,flutter-futurebuilder,Flutter,Mobile,Flutter Provider,Flutter Futurebuilder,我在没有FutureBuilder的情况下调用API,当我在InState()中调用API时,由于Future.delayed()方法,它会在3秒钟后返回数据,因此ListView.builder会在检索API数据之前呈现,因此我会在逻辑上刷新小部件,并显示数据。因此,我多次添加了FutureBuilder,无论我总是得到错误type'List'不是类型'FutureOr的子类型,即使我将API调用设置为Future或API实例调用和提供程序列表集的方法,我仍然会得到相同的错误输出。以下是方法中
InState()
中调用API时,由于Future.delayed()
方法,它会在3秒钟后返回数据,因此ListView.builder
会在检索API数据之前呈现,因此我会在逻辑上刷新小部件,并显示数据。因此,我多次添加了FutureBuilder
,无论我总是得到错误type'List'不是类型'FutureOr
的子类型,即使我将API调用设置为Future或API实例调用和提供程序列表集的方法,我仍然会得到相同的错误输出。以下是方法中的代码和注释:
API调用:
// Even if I put 'Future<RideData> getRides() ..' I get the same error
getRides() async {
final response = await APIRequest(Method.GET, '/rides');
final data = jsonDecode(response.body)['data'];
return data;
}
//即使我输入“Future getRides()…”我也会得到同样的错误
getRides()异步{
最终响应=等待APIREST(Method.GET,“/rides”);
最终数据=jsonDecode(response.body)['data'];
返回数据;
}
要在其中显示数据的小部件:
/// tried with Future<RideData>, same issue
Future<List<RideData>> _getRideStreamList() async {
await Future.delayed(Duration(seconds: 3)); //I tried without this, same issue
var _vehicleStreamData = await APICalls.instance.getRides();
var provider = Provider.of<RideStore>(context, listen: false);
provider.setVehicleList(_vehicleStreamData, notify: false);
return _vehicleStreamData;
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: SafeArea(
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: Column(
children: [
Container(
height: 1000,
child: FutureBuilder<List<RideData>>(
future: _getRideStreamList(),
builder: (context, snapshot) {
if (snapshot.hasData) {
Consumer<RideStore>(
builder: (context, rideData, child) {
return ListView.builder(
shrinkWrap: true,
itemCount: rideData.rideList.length,
itemBuilder: (context, index) {
RideData rides = rideData.getRideByIndex(index);
return Text('${rides.rideId}'); },
);
},
);
} else if (snapshot.hasError) {
return Text("${snapshot.error}");
}
return Container();
},
),
),
],
),
),
),
);
}
///用Future试过了,同样的问题
Future\u getRideStreamList()异步{
等待未来。延迟(持续时间(秒:3));//我试着没有这个,同样的问题
var_vehicleStreamData=等待APICalls.instance.getRides();
var provider=provider.of(上下文,侦听:false);
provider.setVehicleList(_vehicleStreamData,notify:false);
返回车辆流数据;
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
背景颜色:Colors.white,
正文:安全区(
子:SingleChildScrollView(
滚动方向:轴垂直,
子:列(
儿童:[
容器(
身高:1000,
孩子:未来建设者(
future:_getRideStreamList(),
生成器:(上下文,快照){
if(snapshot.hasData){
消费者(
生成器:(上下文、rideData、child){
返回ListView.builder(
收缩膜:对,
itemCount:rideData.rideList.length,
itemBuilder:(上下文,索引){
RideData rides=RideData.getRideByIndex(索引);
返回文本(“${rides.rideId}”);},
);
},
);
}else if(snapshot.hasrerror){
返回文本(“${snapshot.error}”);
}
返回容器();
},
),
),
],
),
),
),
);
}
提供商存储:
class RideStore extends ChangeNotifier {
List<RideData> _rideList = [];
List<RideData> get rideList => _rideList;
setVehicleList(List<RideData> list, {bool notify = true}) {
_rideList = list;
if (notify) notifyListeners();
}
RideData getRideByIndex(int index) => _rideList[index];
}
类存储扩展变更通知程序{
列表_rideList=[];
List get rideList=>\u rideList;
setVehicleList(列表列表,{bool notify=true}){
_rideList=列表;
if(notify)notifyListeners();
}
RideData getRideByIndex(int index)=>\u rideList[index];
}
我不知道我做错了什么?!感谢任何形式的帮助,提前谢谢