# Conflicts:
#	android/build.gradle
#	pubspec.yaml
This commit is contained in:
2025-03-18 08:21:02 +08:00
31 changed files with 229 additions and 190 deletions

View File

@ -26,7 +26,8 @@ if (flutterVersionName == null) {
android {
compileSdkVersion 34
namespace = "com.amap.flutter.amap_map_example"
compileSdkVersion 35
lint {
disable 'InvalidPackage'
@ -36,7 +37,7 @@ android {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.amap.flutter.amap_map_example"
minSdkVersion flutter.minSdkVersion
targetSdkVersion 33
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
@ -69,7 +70,7 @@ android {
jniLibs.srcDirs = ['libs']
}
}
ndkVersion '25.1.8937393'
ndkVersion '27.0.12077973'
}
dependencies {
}

View File

@ -19,6 +19,7 @@
<application
android:allowNativeHeapPointerTagging="false"
android:enableOnBackInvokedCallback="true"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher"
android:label="amap_map_example">

View File

@ -1,4 +1,15 @@
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
## For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
#
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx1024m -XX:MaxPermSize=256m
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. For more details, visit
# https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects
# org.gradle.parallel=true
#Tue Mar 11 22:34:19 CST 2025
android.enableJetifier=true
#android.enableR8=true
android.useAndroidX=true

View File

@ -1,6 +1,6 @@
#Fri Jun 23 08:50:38 CEST 2017
#Tue Mar 11 20:48:47 CST 2025
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-all.zip

View File

@ -18,8 +18,8 @@ pluginManagement {
plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "7.4.2" apply false
id "org.jetbrains.kotlin.android" version "1.7.10" apply false
id "com.android.application" version "8.9.0" apply false
id "org.jetbrains.kotlin.android" version "2.1.10" apply false
}
include ":app"

View File

@ -1,5 +1,5 @@
PODS:
- AMap3DMap (10.0.900):
- AMap3DMap (10.1.200):
- AMapFoundation (>= 1.8.0)
- amap_map (1.0.8):
- AMap3DMap

View File

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
class AnimatedCategoryItem extends StatelessWidget {
AnimatedCategoryItem({
super.key,
required double startDelayFraction,
required this.controller,
required this.child,
@ -27,7 +28,7 @@ class AnimatedCategoryItem extends StatelessWidget {
Widget build(BuildContext context) {
return AnimatedBuilder(
animation: controller,
builder: (context, child) {
builder: (BuildContext context, Widget? child) {
return Padding(
padding: EdgeInsets.only(top: topPaddingAnimation.value),
child: child,

View File

@ -4,7 +4,7 @@ import 'package:amap_map_example/widgets/amap_gridview.dart';
import 'package:flutter/material.dart';
class MoveCameraDemoPage extends StatefulWidget {
MoveCameraDemoPage({super.key});
const MoveCameraDemoPage({super.key});
@override
State<MoveCameraDemoPage> createState() => _BodyState();
@ -29,7 +29,7 @@ class _BodyState extends State<MoveCameraDemoPage> {
Widget cameraOptions() {
return Container(
padding: EdgeInsets.all(5),
padding: const EdgeInsets.all(5),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
@ -45,7 +45,7 @@ class _BodyState extends State<MoveCameraDemoPage> {
}
return ConstrainedBox(
constraints: BoxConstraints.expand(),
constraints: const BoxConstraints.expand(),
child: Column(
children: [
ConstrainedBox(
@ -54,7 +54,7 @@ class _BodyState extends State<MoveCameraDemoPage> {
minHeight: MediaQuery.of(context).size.height * 0.7),
child: Stack(
children: [
Container(
SizedBox(
height: MediaQuery.of(context).size.height * 0.7,
width: MediaQuery.of(context).size.width,
child: amap,
@ -66,28 +66,28 @@ class _BodyState extends State<MoveCameraDemoPage> {
mainAxisSize: MainAxisSize.min,
children: [
InkResponse(
onTap: _zoomIn,
child: Container(
child: Icon(
width: 40,
height: 40,
color: Colors.blue,
child: const Icon(
Icons.add,
color: Colors.white,
),
width: 40,
height: 40,
color: Colors.blue,
),
onTap: _zoomIn,
),
InkResponse(
onTap: _zoomOut,
child: Container(
child: Icon(
color: Colors.blue,
width: 40,
height: 40,
child: const Icon(
Icons.remove,
color: Colors.white,
),
color: Colors.blue,
width: 40,
height: 40,
),
onTap: _zoomOut,
),
],
),
@ -103,14 +103,14 @@ class _BodyState extends State<MoveCameraDemoPage> {
? Container(
width: MediaQuery.of(context).size.width,
color: Colors.grey,
padding: EdgeInsets.all(5),
padding: const EdgeInsets.all(5),
alignment: Alignment.centerLeft,
child: Text(
_currentZoom!,
style: TextStyle(color: Colors.white),
style: const TextStyle(color: Colors.white),
),
)
: SizedBox(),
: const SizedBox(),
Container(
child: cameraOptions(),
),
@ -141,7 +141,7 @@ class _BodyState extends State<MoveCameraDemoPage> {
void _changeCameraPosition() {
_mapController?.moveCamera(
CameraUpdate.newCameraPosition(
CameraPosition(
const CameraPosition(
//中心点
target: LatLng(31.230378, 121.473658),
//缩放级别
@ -184,8 +184,8 @@ class _BodyState extends State<MoveCameraDemoPage> {
_mapController?.moveCamera(
CameraUpdate.newLatLngBounds(
LatLngBounds(
southwest: LatLng(33.789925, 104.838326),
northeast: LatLng(38.740688, 114.647472)),
southwest: const LatLng(33.789925, 104.838326),
northeast: const LatLng(38.740688, 114.647472)),
15.0),
animated: true,
);

View File

@ -6,13 +6,15 @@ import 'package:flutter/services.dart';
import 'package:x_amap_base/x_amap_base.dart';
class AllMapConfigDemoPage extends StatefulWidget {
const AllMapConfigDemoPage({super.key});
@override
State<StatefulWidget> createState() => _MapUiBodyState();
}
class _MapUiBodyState extends State<AllMapConfigDemoPage> {
//默认显示在北京天安门
static final CameraPosition _kInitialPosition = const CameraPosition(
static const CameraPosition _kInitialPosition = CameraPosition(
target: LatLng(39.909187, 116.397451),
zoom: 10.0,
);
@ -127,7 +129,7 @@ class _MapUiBodyState extends State<AllMapConfigDemoPage> {
//ui控制
final List<Widget> uiOptions = [
AMapSwitchButton(
label: Text('显示路况'),
label: const Text('显示路况'),
defaultValue: _trafficEnabled,
onSwitchChanged: (value) => {
setState(() {
@ -136,7 +138,7 @@ class _MapUiBodyState extends State<AllMapConfigDemoPage> {
},
),
AMapSwitchButton(
label: Text('显示3D建筑物'),
label: const Text('显示3D建筑物'),
defaultValue: _buildingsEnabled,
onSwitchChanged: (value) => {
setState(() {
@ -145,7 +147,7 @@ class _MapUiBodyState extends State<AllMapConfigDemoPage> {
},
),
AMapSwitchButton(
label: Text('显示指南针'),
label: const Text('显示指南针'),
defaultValue: _compassEnabled,
onSwitchChanged: (value) => {
setState(() {
@ -154,7 +156,7 @@ class _MapUiBodyState extends State<AllMapConfigDemoPage> {
},
),
AMapSwitchButton(
label: Text('显示地图文字'),
label: const Text('显示地图文字'),
defaultValue: _labelsEnabled,
onSwitchChanged: (value) => {
setState(() {
@ -163,7 +165,7 @@ class _MapUiBodyState extends State<AllMapConfigDemoPage> {
},
),
AMapSwitchButton(
label: Text('显示比例尺'),
label: const Text('显示比例尺'),
defaultValue: _scaleEnabled,
onSwitchChanged: (value) => {
setState(() {
@ -172,7 +174,7 @@ class _MapUiBodyState extends State<AllMapConfigDemoPage> {
},
),
AMapSwitchButton(
label: Text('点击Poi'),
label: const Text('点击Poi'),
defaultValue: _touchPoiEnabled,
onSwitchChanged: (value) => {
setState(() {
@ -181,7 +183,7 @@ class _MapUiBodyState extends State<AllMapConfigDemoPage> {
},
),
AMapSwitchButton(
label: Text('自定义地图'),
label: const Text('自定义地图'),
defaultValue: _customStyleOptions.enabled,
onSwitchChanged: (value) => {
setState(() {
@ -194,7 +196,7 @@ class _MapUiBodyState extends State<AllMapConfigDemoPage> {
//手势开关
final List<Widget> gesturesOptions = [
AMapSwitchButton(
label: Text('旋转'),
label: const Text('旋转'),
defaultValue: _rotateGesturesEnabled,
onSwitchChanged: (value) => {
setState(() {
@ -203,7 +205,7 @@ class _MapUiBodyState extends State<AllMapConfigDemoPage> {
},
),
AMapSwitchButton(
label: Text('滑动'),
label: const Text('滑动'),
defaultValue: _scrollGesturesEnabled,
onSwitchChanged: (value) => {
setState(() {
@ -212,7 +214,7 @@ class _MapUiBodyState extends State<AllMapConfigDemoPage> {
},
),
AMapSwitchButton(
label: Text('倾斜'),
label: const Text('倾斜'),
defaultValue: _tiltGesturesEnabled,
onSwitchChanged: (value) => {
setState(() {
@ -221,7 +223,7 @@ class _MapUiBodyState extends State<AllMapConfigDemoPage> {
},
),
AMapSwitchButton(
label: Text('缩放'),
label: const Text('缩放'),
defaultValue: _zoomGesturesEnabled,
onSwitchChanged: (value) => {
setState(() {
@ -233,14 +235,14 @@ class _MapUiBodyState extends State<AllMapConfigDemoPage> {
Widget mapTypeOptions() {
return Container(
padding: EdgeInsets.all(5),
padding: const EdgeInsets.all(5),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Text('地图样式', style: TextStyle(fontWeight: FontWeight.w600)),
const Text('地图样式', style: TextStyle(fontWeight: FontWeight.w600)),
Container(
padding: EdgeInsets.only(left: 10),
padding: const EdgeInsets.only(left: 10),
child: createGridView(mapTypeList),
),
],
@ -250,15 +252,15 @@ class _MapUiBodyState extends State<AllMapConfigDemoPage> {
Widget myLocationStyleContainer() {
return Container(
padding: EdgeInsets.all(5),
padding: const EdgeInsets.all(5),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: [
// Text('定位小蓝点', style: TextStyle(fontWeight: FontWeight.w600)),
AMapSwitchButton(
label:
Text('定位小蓝点', style: TextStyle(fontWeight: FontWeight.w600)),
label: const Text('定位小蓝点',
style: TextStyle(fontWeight: FontWeight.w600)),
defaultValue: _myLocationStyleOptions.enabled,
onSwitchChanged: (value) => {
setState(() {
@ -273,14 +275,14 @@ class _MapUiBodyState extends State<AllMapConfigDemoPage> {
Widget uiOptionsWidget() {
return Container(
padding: EdgeInsets.all(5),
padding: const EdgeInsets.all(5),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Text('UI操作', style: TextStyle(fontWeight: FontWeight.w600)),
const Text('UI操作', style: TextStyle(fontWeight: FontWeight.w600)),
Container(
padding: EdgeInsets.only(left: 10),
padding: const EdgeInsets.only(left: 10),
child: createGridView(uiOptions),
),
],
@ -290,14 +292,14 @@ class _MapUiBodyState extends State<AllMapConfigDemoPage> {
Widget gesturesOptiosWeidget() {
return Container(
padding: EdgeInsets.all(5),
padding: const EdgeInsets.all(5),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Text('手势控制', style: TextStyle(fontWeight: FontWeight.w600)),
const Text('手势控制', style: TextStyle(fontWeight: FontWeight.w600)),
Container(
padding: EdgeInsets.only(left: 10),
padding: const EdgeInsets.only(left: 10),
child: createGridView(gesturesOptions),
),
],
@ -364,7 +366,7 @@ class _MapUiBodyState extends State<AllMapConfigDemoPage> {
Widget createGridView(List<Widget> widgets) {
return GridView.count(
primary: false,
physics: NeverScrollableScrollPhysics(),
physics: const NeverScrollableScrollPhysics(),
//水平子Widget之间间距
crossAxisSpacing: 1.0,
//垂直子Widget之间间距
@ -379,7 +381,7 @@ class _MapUiBodyState extends State<AllMapConfigDemoPage> {
//移动地图中心点到首开广场
void _moveCameraToShoukai() {
_controller.moveCamera(CameraUpdate.newCameraPosition(CameraPosition(
_controller.moveCamera(CameraUpdate.newCameraPosition(const CameraPosition(
target: LatLng(39.993306, 116.473004),
zoom: 18,
tilt: 30,

View File

@ -2,7 +2,7 @@ import 'package:amap_map/amap_map.dart';
import 'package:flutter/material.dart';
class MinMaxZoomDemoPage extends StatefulWidget {
MinMaxZoomDemoPage({super.key});
const MinMaxZoomDemoPage({super.key});
@override
State<MinMaxZoomDemoPage> createState() => _BodyState();
@ -22,7 +22,7 @@ class _BodyState extends State<MinMaxZoomDemoPage> {
minMaxZoomPreference: MinMaxZoomPreference(_minZoom, _maxZoom),
);
return ConstrainedBox(
constraints: BoxConstraints.expand(),
constraints: const BoxConstraints.expand(),
child: Stack(
children: [
Container(
@ -40,24 +40,24 @@ class _BodyState extends State<MinMaxZoomDemoPage> {
Container(
width: MediaQuery.of(context).size.width,
color: Colors.grey,
padding: EdgeInsets.all(5),
padding: const EdgeInsets.all(5),
alignment: Alignment.centerLeft,
child: Text(
'当前限制的最小最大缩放级别是:[$_minZoom, $_maxZoom]',
style: TextStyle(color: Colors.blue),
style: const TextStyle(color: Colors.blue),
),
),
_currentZoom != null
? Container(
width: MediaQuery.of(context).size.width,
color: Colors.grey,
padding: EdgeInsets.all(5),
padding: const EdgeInsets.all(5),
alignment: Alignment.centerLeft,
child: Text(
_currentZoom!,
style: TextStyle(color: Colors.white),
style: const TextStyle(color: Colors.white),
))
: SizedBox(),
: const SizedBox(),
],
),
),
@ -69,7 +69,7 @@ class _BodyState extends State<MinMaxZoomDemoPage> {
children: [
InkResponse(
child: Container(
child: Icon(
child: const Icon(
Icons.add,
color: Colors.white,
),
@ -81,7 +81,7 @@ class _BodyState extends State<MinMaxZoomDemoPage> {
),
InkResponse(
child: Container(
child: Icon(
child: const Icon(
Icons.remove,
color: Colors.white,
),

View File

@ -3,7 +3,7 @@ import 'package:x_amap_base/x_amap_base.dart';
import 'package:flutter/material.dart';
class MultiMapDemoPage extends StatefulWidget {
const MultiMapDemoPage();
const MultiMapDemoPage({super.key});
@override
State<StatefulWidget> createState() => _MultiMapDemoState();
}
@ -14,7 +14,7 @@ class _MultiMapDemoState extends State<MultiMapDemoPage> {
return Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
child: Column(
child: const Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[

View File

@ -39,8 +39,8 @@ class _State extends State<CustomInfoWindowDemoPage> {
position: markPostion,
icon: _markerIcon!,
infoWindow: InfoWindow(title: '$markerCount 个Marker'),
onTap: (markerId) => _onMarkerTapped(markerId),
onDragEnd: (markerId, endPosition) =>
onTap: (String markerId) => _onMarkerTapped(markerId),
onDragEnd: (String markerId, LatLng endPosition) =>
_onMarkerDragEnd(markerId, endPosition),
);
@ -196,7 +196,7 @@ class _State extends State<CustomInfoWindowDemoPage> {
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
children: <Widget>[
Container(
height: MediaQuery.of(context).size.height * 0.6,
width: MediaQuery.of(context).size.width,
@ -212,64 +212,64 @@ class _State extends State<CustomInfoWindowDemoPage> {
Column(
children: <Widget>[
TextButton(
child: const Text('添加'),
onPressed: _add,
child: const Text('添加'),
),
TextButton(
child: const Text('移除'),
onPressed:
(selectedMarkerId == null) ? null : _remove,
child: const Text('移除'),
),
TextButton(
child: const Text('更新InfoWidow'),
onPressed:
(selectedMarkerId == null) ? null : _changeInfo,
child: const Text('更新InfoWidow'),
),
TextButton(
child: const Text('修改锚点'),
onPressed: (selectedMarkerId == null)
? null
: _changeAnchor,
child: const Text('修改锚点'),
),
TextButton(
child: const Text('修改透明度'),
onPressed: (selectedMarkerId == null)
? null
: _changeAlpha,
child: const Text('修改透明度'),
),
],
),
Column(
children: <Widget>[
TextButton(
child: const Text('全部移除'),
onPressed: _markers.isNotEmpty ? _removeAll : null,
child: const Text('全部移除'),
),
AMapSwitchButton(
label: Text('允许拖动'),
label: const Text('允许拖动'),
onSwitchChanged: (selectedMarkerId == null)
? null
: _toggleDraggable,
defaultValue: false,
),
AMapSwitchButton(
label: Text('显示'),
label: const Text('显示'),
onSwitchChanged: (selectedMarkerId == null)
? null
: _toggleVisible,
defaultValue: true,
),
TextButton(
child: const Text('修改坐标'),
onPressed: (selectedMarkerId == null)
? null
: _changePosition,
child: const Text('修改坐标'),
),
TextButton(
child: const Text('修改旋转角度'),
onPressed: (selectedMarkerId == null)
? null
: _changeRotation,
child: const Text('修改旋转角度'),
),
],
),
@ -300,8 +300,8 @@ class CustomInfoWindowAdapter extends BaseInfoWindowAdapter {
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8.0),
boxShadow: [
BoxShadow(
boxShadow: <BoxShadow>[
const BoxShadow(
color: Colors.black26,
blurRadius: 4.0,
spreadRadius: 2.0,
@ -310,10 +310,10 @@ class CustomInfoWindowAdapter extends BaseInfoWindowAdapter {
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
children: <Widget>[
Text(
marker.infoWindow.title ?? 'No Title',
style: TextStyle(fontWeight: FontWeight.bold),
style: const TextStyle(fontWeight: FontWeight.bold),
),
Text(
marker.infoWindow.snippet ?? 'No Snippet',

View File

@ -265,64 +265,64 @@ class _State extends State<MarkerConfigDemoPage> {
Column(
children: <Widget>[
TextButton(
child: const Text('添加'),
onPressed: _add,
child: const Text('添加'),
),
TextButton(
child: const Text('移除'),
onPressed:
(selectedMarkerId == null) ? null : _remove,
child: const Text('移除'),
),
TextButton(
child: const Text('更新InfoWidow'),
onPressed:
(selectedMarkerId == null) ? null : _changeInfo,
child: const Text('更新InfoWidow'),
),
TextButton(
child: const Text('修改锚点'),
onPressed: (selectedMarkerId == null)
? null
: _changeAnchor,
child: const Text('修改锚点'),
),
TextButton(
child: const Text('修改透明度'),
onPressed: (selectedMarkerId == null)
? null
: _changeAlpha,
child: const Text('修改透明度'),
),
],
),
Column(
children: <Widget>[
TextButton(
child: const Text('全部移除'),
onPressed: _markers.isNotEmpty ? _removeAll : null,
child: const Text('全部移除'),
),
AMapSwitchButton(
label: Text('允许拖动'),
label: const Text('允许拖动'),
onSwitchChanged: (selectedMarkerId == null)
? null
: _toggleDraggable,
defaultValue: false,
),
AMapSwitchButton(
label: Text('显示'),
label: const Text('显示'),
onSwitchChanged: (selectedMarkerId == null)
? null
: _toggleVisible,
defaultValue: true,
),
TextButton(
child: const Text('修改坐标'),
onPressed: (selectedMarkerId == null)
? null
: _changePosition,
child: const Text('修改坐标'),
),
TextButton(
child: const Text('修改旋转角度'),
onPressed: (selectedMarkerId == null)
? null
: _changeRotation,
child: const Text('修改旋转角度'),
),
],
),

View File

@ -3,17 +3,19 @@ import 'package:x_amap_base/x_amap_base.dart';
import 'package:flutter/material.dart';
class MarkerCustomIconPage extends StatefulWidget {
const MarkerCustomIconPage({super.key});
@override
State<MarkerCustomIconPage> createState() => _BodyState();
}
class _BodyState extends State<MarkerCustomIconPage> {
static final LatLng markerPosition = const LatLng(39.909187, 116.397451);
static const LatLng markerPosition = LatLng(39.909187, 116.397451);
final Map<String, Marker> _initMarkerMap = <String, Marker>{};
String? _currentMarkerId;
bool _hasInitMarker = false;
static final String _startIconPath = 'assets/start.png';
static final String _endIconPath = 'assets/end.png';
static const String _startIconPath = 'assets/start.png';
static const String _endIconPath = 'assets/end.png';
String _iconPath = _startIconPath;
void _initMarker(BuildContext context) async {
if (_hasInitMarker) {

View File

@ -110,7 +110,7 @@ class _State extends State<PolygonDemoPage> {
List<LatLng> currentPoints = polygon.points;
List<LatLng> newPoints = <LatLng>[];
newPoints.addAll(currentPoints);
newPoints.add(LatLng(39.828809, 116.360364));
newPoints.add(const LatLng(39.828809, 116.360364));
setState(() {
_polygons[selectedPolygonId!] = polygon.copyWith(
@ -133,7 +133,7 @@ class _State extends State<PolygonDemoPage> {
Widget build(BuildContext context) {
final AMapWidget map = AMapWidget(
initialCameraPosition:
CameraPosition(target: LatLng(39.828809, 116.360364), zoom: 13),
const CameraPosition(target: LatLng(39.828809, 116.360364), zoom: 13),
onMapCreated: _onMapCreated,
polygons: Set<Polygon>.of(_polygons.values),
);
@ -159,42 +159,42 @@ class _State extends State<PolygonDemoPage> {
Column(
children: <Widget>[
TextButton(
child: const Text('添加'),
onPressed: _add,
child: const Text('添加'),
),
TextButton(
child: const Text('删除'),
onPressed:
(selectedPolygonId == null) ? null : _remove,
child: const Text('删除'),
),
TextButton(
child: const Text('修改边框宽度'),
onPressed: (selectedPolygonId == null)
? null
: _changeStrokeWidth,
child: const Text('修改边框宽度'),
),
],
),
Column(
children: <Widget>[
TextButton(
child: const Text('修改边框和填充色'),
onPressed: (selectedPolygonId == null)
? null
: _changeColors,
child: const Text('修改边框和填充色'),
),
AMapSwitchButton(
label: Text('显示'),
label: const Text('显示'),
onSwitchChanged: (selectedPolygonId == null)
? null
: _toggleVisible,
defaultValue: true,
),
TextButton(
child: const Text('修改坐标'),
onPressed: (selectedPolygonId == null)
? null
: _changePoints,
child: const Text('修改坐标'),
),
],
),

View File

@ -171,7 +171,7 @@ class _State extends State<PolylineDemoPage> {
List<LatLng> currentPoints = polyline.points;
List<LatLng> newPoints = <LatLng>[];
newPoints.addAll(currentPoints);
newPoints.add(LatLng(39.835347, 116.34575));
newPoints.add(const LatLng(39.835347, 116.34575));
setState(() {
_polylines[selectedPolylineId!] = polyline.copyWith(
@ -218,28 +218,28 @@ class _State extends State<PolylineDemoPage> {
Column(
children: <Widget>[
TextButton(
child: const Text('添加'),
onPressed: _add,
child: const Text('添加'),
),
TextButton(
child: const Text('删除'),
onPressed:
(selectedPolylineId == null) ? null : _remove,
child: const Text('删除'),
),
TextButton(
child: const Text('修改线宽'),
onPressed: (selectedPolylineId == null)
? null
: _changeWidth,
child: const Text('修改线宽'),
),
TextButton(
child: const Text('修改透明度'),
onPressed: (selectedPolylineId == null)
? null
: _changeAlpha,
child: const Text('修改透明度'),
),
AMapSwitchButton(
label: Text('显示'),
label: const Text('显示'),
onSwitchChanged: (selectedPolylineId == null)
? null
: _toggleVisible,
@ -250,34 +250,34 @@ class _State extends State<PolylineDemoPage> {
Column(
children: <Widget>[
TextButton(
child: const Text('修改颜色'),
onPressed: (selectedPolylineId == null)
? null
: _changeColor,
child: const Text('修改颜色'),
),
TextButton(
child: const Text('修改线头样式'),
onPressed: (selectedPolylineId == null)
? null
: _changeCapType,
child: const Text('修改线头样式'),
),
TextButton(
child: const Text('修改连接样式'),
onPressed: (selectedPolylineId == null)
? null
: _changeJointType,
child: const Text('修改连接样式'),
),
TextButton(
child: const Text('修改虚线类型'),
onPressed: (selectedPolylineId == null)
? null
: _changeDashLineType,
child: const Text('修改虚线类型'),
),
TextButton(
child: const Text('修改坐标'),
onPressed: (selectedPolylineId == null)
? null
: _changePoints,
child: const Text('修改坐标'),
),
],
),

View File

@ -13,7 +13,6 @@ dependencies:
sdk: flutter
permission_handler: ^11.3.1
flutter_plugin_android_lifecycle: ^2.0.21
amap_map:
path: ../

View File

@ -3,36 +3,36 @@ import 'package:x_amap_base/x_amap_base.dart';
void main() {
test('Distance between two different point', () {
LatLng p1 = LatLng(1, 1);
LatLng p2 = LatLng(2, 2);
LatLng p1 = const LatLng(1, 1);
LatLng p2 = const LatLng(2, 2);
double distance = AMapTools.distanceBetween(p1, p2);
expect(distance, 157401.56104583555);
});
test('Distance between two same point', () {
LatLng p1 = LatLng(1, 1);
LatLng p2 = LatLng(1, 1);
LatLng p1 = const LatLng(1, 1);
LatLng p2 = const LatLng(1, 1);
double distance = AMapTools.distanceBetween(p1, p2);
expect(distance, 0);
});
test('Distance between two different point with equal lat', () {
LatLng p1 = LatLng(1, 1);
LatLng p2 = LatLng(1, 2);
LatLng p1 = const LatLng(1, 1);
LatLng p2 = const LatLng(1, 2);
double distance = AMapTools.distanceBetween(p1, p2);
expect(distance, 111302.53586533663);
});
test('Distance between two different point with equal lng', () {
LatLng p1 = LatLng(1, 1);
LatLng p2 = LatLng(2, 1);
LatLng p1 = const LatLng(1, 1);
LatLng p2 = const LatLng(2, 1);
double distance = AMapTools.distanceBetween(p1, p2);
expect(distance, 111319.49079327357);
});
test('Distance between two different point with close point', () {
LatLng p1 = LatLng(39.938212, 116.455139);
LatLng p2 = LatLng(39.987656, 116.265605);
LatLng p1 = const LatLng(39.938212, 116.455139);
LatLng p2 = const LatLng(39.987656, 116.265605);
double distance = AMapTools.distanceBetween(p1, p2);
expect(distance, 17082.425889709597);
});