Flutter 2.0:根据闭包上下文的要求,返回类型 <List<LatLng>> 不是“void”

问题描述

我收到错误 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,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 2.12 添加了更严格的类型检查以捕获回调返回未使用值的情况。

IconButton.onPressed 是一个 VoidCallback?;也就是说,如果它不是 null,则它是一个不返回任何内容的函数。

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