Flutter 2.0:return 类型 <List<LatLng>> 不是闭包上下文所要求的 'void'

Flutter 2.0: The return Type <List<LatLng>> isn’t a 'void', as required by the closure's context

我遇到了错误 The return Type <List<LatLng>> 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: "> = 2.12.0 <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,
              ),
            ],
          ),
        ],
      ),
    );
  }
}

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

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

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

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

您正在提供一个匿名函数,其中包含 return polygonList;。 returned 值永远不能使用,所以 return 语句是无用的。只需将其删除即可。