我添加“flutter_map”包以在 Android 和 iOS 上显示 OpenStreetMap。 当我调用mapcontroller.move时它可以工作,但在iOS上用手指手势缩放时出现异常。
这里有一个例外: flutter:ClientException 和 SocketException:连接失败(操作系统错误:打开的文件太多,errno = 24),地址 =tile.openstreetmap.org,端口 = 443,uri = https://tile.openstreetmap.org/10/546/ 350.png dnssd_clientstub Deliver_request:套接字对失败 24(打开文件太多)
这是我的颤振代码
class _MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin {
// Create map controller
final MapController _mapController = MapController();
LatLng currentPosition = const LatLng(52.5200, 13.4050);
@override
Widget build(BuildContext context) {
return Scaffold(
extendBodyBehindAppBar: true,
floatingActionButton: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
// cuurrent location button
SizedBox(
height: 50.0,
width: 50.0,
child: FittedBox(
child: FloatingActionButton(
heroTag: "getCurrentLocation_bnb",
backgroundColor: Colors.white,
child: const Icon(
Icons.my_location,
color: Colors.black,
),
onPressed: () {
setState(() {
_mapController.move(currentPosition, 17);
});
},
),
),
),
],),
// Scaffold body
body: FlutterMap(
mapController: _mapController,
options: MapOptions(
initialCenter: currentPosition,
initialZoom: 5,
maxZoom: 18,
minZoom: 5,
),
// layers of map
children: <Widget>[
TileLayer(
urlTemplate: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',
),
])
);
}
我通过添加tileprovider解决了这个问题
TileLayer(
urlTemplate:'https://tile.openstreetmap.org/{z}/{x}/{y}.png',
tileProvider: CachedNetworkTileProvider(),
),