amap_map/example/lib/pages/map/min_max_zoom.dart

132 lines
3.7 KiB
Dart

import 'package:amap_map/amap_map.dart';
import 'package:flutter/material.dart';
class MinMaxZoomDemoPage extends StatefulWidget {
MinMaxZoomDemoPage({super.key});
@override
State<MinMaxZoomDemoPage> createState() => _BodyState();
}
class _BodyState extends State<MinMaxZoomDemoPage> {
final double _minZoom = 10;
final double _maxZoom = 15;
String? _currentZoom;
late AMapController _mapController;
@override
Widget build(BuildContext context) {
final AMapWidget amap = AMapWidget(
onMapCreated: _onMapCreated,
onCameraMove: _onCameraMove,
onCameraMoveEnd: _onCameraMoveEnd,
minMaxZoomPreference: MinMaxZoomPreference(_minZoom, _maxZoom),
);
return ConstrainedBox(
constraints: BoxConstraints.expand(),
child: Stack(
children: [
Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
child: amap,
),
Positioned(
top: 5,
left: 15,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Container(
width: MediaQuery.of(context).size.width,
color: Colors.grey,
padding: EdgeInsets.all(5),
alignment: Alignment.centerLeft,
child: Text(
'当前限制的最小最大缩放级别是:[$_minZoom, $_maxZoom]',
style: TextStyle(color: Colors.blue),
),
),
_currentZoom != null
? Container(
width: MediaQuery.of(context).size.width,
color: Colors.grey,
padding: EdgeInsets.all(5),
alignment: Alignment.centerLeft,
child: Text(
_currentZoom!,
style: TextStyle(color: Colors.white),
))
: SizedBox(),
],
),
),
Positioned(
right: 5,
bottom: 5,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
InkResponse(
child: Container(
child: Icon(
Icons.add,
color: Colors.white,
),
width: 40,
height: 40,
color: Colors.blue,
),
onTap: _zoomIn,
),
InkResponse(
child: Container(
child: Icon(
Icons.remove,
color: Colors.white,
),
color: Colors.blue,
width: 40,
height: 40,
),
onTap: _zoomOut,
),
],
),
),
],
),
);
}
void _onMapCreated(AMapController controller) {
_mapController = controller;
}
//移动视野
void _onCameraMove(CameraPosition cameraPosition) {}
//移动地图结束
void _onCameraMoveEnd(CameraPosition cameraPosition) {
setState(() {
_currentZoom = '当前缩放级别:${cameraPosition.zoom}';
});
}
//级别加1
void _zoomIn() {
_mapController.moveCamera(
CameraUpdate.zoomIn(),
animated: true,
);
}
//级别减1
void _zoomOut() {
_mapController.moveCamera(
CameraUpdate.zoomOut(),
animated: true,
);
}
}