【问题标题】:Flutter 2.0: The return Type <List<LatLng>> isn’t a 'void', as required by the closure's contextFlutter 2.0:返回类型 <List<LatLng>> 不是“void”,这是闭包上下文所要求的
【发布时间】:2021-08-07 15:07:11
【问题描述】:

我收到了错误 The return Type &lt;List&lt;LatLng&gt;&gt; isn’t a 'void', as required by the closure's context 关于此按钮小部件中的return polygonList; 行:

Widget _markerButton(BuildContext context) {
  return IconButton(
    icon: Icon(Icons.favorite, color: _list ? Colors.green : Colors.red),
    onPressed: () {
      setState(() {
        _list = !_list;
        numberOfMarkers(latlng)[0];
        realtyTap = true;
      });
      return polygonList;
    },
  );
}

以前效果很好。当我切换到 Flutter 2.0 和 sdk: "&gt; = 2.12.0 &lt;3.0.0” 时出现此错误。

我查看了有类似困难的人的问题的答案,但对我没有帮助。

整个页面代码为:

import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';

import 'package:flutter_map/flutter_map.dart';
import 'package:latlong/latlong.dart';


class HomePage extends StatefulWidget {
  final Function state;
  HomePage(this.state);

  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  late MapController _mapController;
  late LatLng latlng;

  List<Marker> markers = [];
  List<LatLng> polygonList = [];

  bool singleTap = false;
  bool _list = false;

  double maxZoom = 6.0;
  double minZoom = 4.0;

  @override
  void initState() {
    super.initState();
  }

  Widget _markerButton(BuildContext context) {
    return IconButton(
      icon: Icon(Icons.favorite, color: _list ? Colors.green : Colors.red),
      onPressed: () {
        setState(() {
          _list = !_list;
        });
        return polygonList;
      },
    );
  }

  @override
  Widget build(BuildContext context) {

    return Scaffold(
      body: FlutterMap(
        mapController: _mapController,
        options: MapOptions(
            center: LatLng(40.000000, 70.000000),
            zoom: 4,
            onTap: (latlng) {
              if (singleTap) {
                setState(() {
                  if (markers.length == 0) {
                    markers.add(Marker(
                        point: latlng,
                        builder: (context) => _markerButton(context)));
                  } else {
                    markers.add(
                      Marker(
                        point: latlng,
                        builder: (ctx) => const Icon(
                          Icons.fiber_manual_record_rounded,
                          color: Colors.red,
                          size: 15.0,
                        ),
                      ),
                    );
                  }
                  polygonList.add(latlng);
                });
              }
            }),
        layers: [
          TileLayerOptions(
              urlTemplate: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
              subdomains: ['a', 'b', 'c']),
          PolygonLayerOptions(
            polygons: [
              Polygon(
                points: polygonList,
                borderStrokeWidth: 3.0,
              ),
            ],
          ),
        ],
      ),
    );
  }
}

这里应该发生什么:如果用户第二次点击他/她在地图上开始构建多边形的点,按钮会改变它的颜色,构建停止,并且角落中的点列表返回构造的多边形。

如果您能给我一些关于如何解决此问题的建议,我将不胜感激。

【问题讨论】:

    标签: dart sdk flutter2.0


    【解决方案1】:

    Dart 2.12 添加了更严格的类型检查,以捕获回调返回未使用值的情况。

    IconButton.onPressed 是一个VoidCallback?;也就是说,如果不是null,它就是一个什么都不返回的函数。

    您正在提供一个匿名函数,其中包含 return polygonList;。该返回值永远无法使用,因此return 语句毫无用处。只需将其删除。

    【讨论】:

    • 非常感谢!现在我明白发生了什么。但是当按下这个按钮时我需要返回polygonList,因为我稍后会使用它。如何通过其他方式做到这一点?
    • 还给什么?没有任何东西使用返回值。您说代码以前可以工作,所以当您删除未使用的行时它应该继续工作。
    • 哦,对不起,也许我应该包括我所有的代码。我只是取出了一些零件以使其更短。请看这个要点))gist.github.com/kotrotko/2841b9684857c55f415b0029516ee3ab
    • 正如我所说,只需删除该行。它从来没有做任何事情。如果您的代码不起作用,那么您有一些单独的问题(您应该在单独的问题中描述和询问)。
    • 谢谢!再次抱歉,“延迟点火”))我明白了)))
    猜你喜欢
    • 1970-01-01
    • 2021-08-26
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-13
    • 2021-06-05
    • 2021-09-27
    相关资源
    最近更新 更多