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
语句是无用的。只需将其删除即可。
我遇到了错误
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
语句是无用的。只需将其删除即可。