类型 'Future<dynamic>' 不是类型 'Widget' 的子类型
Type 'Future<dynamic>' is not subtype of type 'Widget'
我在 google 地图上显示来自 API 的标记。这是我的构建方法。当程序到达 _widgetbuilder() 方法时,它会抛出 type Future is not a subtype of widget 的特定错误。如果有人可以帮助解决问题,并告诉我这个错误到底是什么意思......
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: FutureBuilder<List<MarkersOnMap>>(
future: future,
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (!snapshot.hasData)
return Container(
child: Center(
child: CircularProgressIndicator(),
),
);
if (snapshot.hasData && snapshot.data.isEmpty) {
return Center(
child: Container(
child: Column(
children: [
Text(
'No Properties Added Yet\nPlease Add Some!',
style:
TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
),
ElevatedButton.icon(
onPressed: () {
Navigator.push(
context,
PageTransition(
duration: Duration(microseconds: 500),
type: PageTransitionType.fade,
child: AddNewEproperty(
createEproperty: widget.createEproperty),
),
);
},
label: Text('Add'),
icon: Icon(Icons.add),
),
],
),
),
);
} else
_widgetbuilder();
if (snapshot.hasData) {
return ListView.builder(
itemCount: allWidgets.length + 1,
shrinkWrap: true,
padding: EdgeInsets.only(top: 16),
physics: NeverScrollableScrollPhysics(),
itemBuilder: (context, i) {
return Stack(
children: <Widget>[
Container(),],);},);},},),);}
这是 _widgetbuilder() 方法。当它到达这个 return _widgetbuilder 时,抛出 _typeerror.
_widgetbuilder() async {
allWidgets = [];
widget.markersonmap = await future;
widget.markersonmap.forEach(
(element) {
print(element);
allWidgets.add(
Container(
height: 25,
width: 50,
child: new DecoratedBox(
decoration: BoxDecoration(
border: Border.all(color: Colors.black),
borderRadius: BorderRadius.circular(5.0),
color: Colors.black54),
child: Text(
element.ePropertiesCardsList.price.toString(),
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
color: Colors.white),
),
),
),
);
},
);
}
你得到这个错误是因为你的函数 _widgetbuilder
returns Future<dynamic>
因为函数是异步的。
Widget _widgetbuilder(){
// code here
}
函数应该在这个结构中 return 类型 Widget
。如果确实需要,应该将需要异步的代码从构建函数中取出,或者使用 .then
模式来代替异步代码,而不是异步等待。
This short 9 min video 将帮助您更好地理解 flutter 中的异步。
现在这里的类型错误已经解决了,但是在读取'future.then.....之后,它不会转到未来并获取数据,而是跳转到下一个 foreach 行,然后将其称为 null。
_widgetbuilder() {
allWidgets = [];
// widget.markersonmap = await future;
future.then((value) {
widget.markersonmap = value;
});
widget.markersonmap.forEach(
(element) {
print(element);
allWidgets.add(
Container(
// other code
}
我在 google 地图上显示来自 API 的标记。这是我的构建方法。当程序到达 _widgetbuilder() 方法时,它会抛出 type Future is not a subtype of widget 的特定错误。如果有人可以帮助解决问题,并告诉我这个错误到底是什么意思......
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: FutureBuilder<List<MarkersOnMap>>(
future: future,
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (!snapshot.hasData)
return Container(
child: Center(
child: CircularProgressIndicator(),
),
);
if (snapshot.hasData && snapshot.data.isEmpty) {
return Center(
child: Container(
child: Column(
children: [
Text(
'No Properties Added Yet\nPlease Add Some!',
style:
TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
),
ElevatedButton.icon(
onPressed: () {
Navigator.push(
context,
PageTransition(
duration: Duration(microseconds: 500),
type: PageTransitionType.fade,
child: AddNewEproperty(
createEproperty: widget.createEproperty),
),
);
},
label: Text('Add'),
icon: Icon(Icons.add),
),
],
),
),
);
} else
_widgetbuilder();
if (snapshot.hasData) {
return ListView.builder(
itemCount: allWidgets.length + 1,
shrinkWrap: true,
padding: EdgeInsets.only(top: 16),
physics: NeverScrollableScrollPhysics(),
itemBuilder: (context, i) {
return Stack(
children: <Widget>[
Container(),],);},);},},),);}
这是 _widgetbuilder() 方法。当它到达这个 return _widgetbuilder 时,抛出 _typeerror.
_widgetbuilder() async {
allWidgets = [];
widget.markersonmap = await future;
widget.markersonmap.forEach(
(element) {
print(element);
allWidgets.add(
Container(
height: 25,
width: 50,
child: new DecoratedBox(
decoration: BoxDecoration(
border: Border.all(color: Colors.black),
borderRadius: BorderRadius.circular(5.0),
color: Colors.black54),
child: Text(
element.ePropertiesCardsList.price.toString(),
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
color: Colors.white),
),
),
),
);
},
);
}
你得到这个错误是因为你的函数 _widgetbuilder
returns Future<dynamic>
因为函数是异步的。
Widget _widgetbuilder(){
// code here
}
函数应该在这个结构中 return 类型 Widget
。如果确实需要,应该将需要异步的代码从构建函数中取出,或者使用 .then
模式来代替异步代码,而不是异步等待。
This short 9 min video 将帮助您更好地理解 flutter 中的异步。
现在这里的类型错误已经解决了,但是在读取'future.then.....之后,它不会转到未来并获取数据,而是跳转到下一个 foreach 行,然后将其称为 null。
_widgetbuilder() {
allWidgets = [];
// widget.markersonmap = await future;
future.then((value) {
widget.markersonmap = value;
});
widget.markersonmap.forEach(
(element) {
print(element);
allWidgets.add(
Container(
// other code
}