类型 '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
}