重构example项目结构
This commit is contained in:
@ -1,64 +1,42 @@
|
||||
import 'package:amap_map/amap_map.dart';
|
||||
import 'package:amap_map_example/animated_category_item.dart';
|
||||
import 'package:amap_map_example/category_list_item.dart';
|
||||
import 'package:amap_map_example/const_config.dart';
|
||||
import 'package:amap_map_example/pages/overlays/marker_add_after_map.dart';
|
||||
import 'package:amap_map_example/pages/overlays/marker_add_with_map.dart';
|
||||
import 'package:amap_map_example/pages/overlays/marker_config.dart';
|
||||
import 'package:amap_map_example/pages/overlays/marker_custom_icon.dart';
|
||||
import 'package:amap_map_example/pages/overlays/place_polygon.dart';
|
||||
import 'package:amap_map_example/pages/overlays/place_polyline.dart';
|
||||
import 'package:amap_map_example/pages/interactive/map_gestures_options.dart';
|
||||
import 'package:amap_map_example/pages/interactive/map_ui_options.dart';
|
||||
import 'package:amap_map_example/pages/interactive/move_camera_demo.dart';
|
||||
import 'package:amap_map_example/pages/interactive/poi_click_demo.dart';
|
||||
import 'package:amap_map_example/pages/interactive/snapshot_demo.dart';
|
||||
import 'package:amap_map_example/pages/map/change_map_type.dart';
|
||||
import 'package:amap_map_example/pages/map/custom_map_style.dart';
|
||||
import 'package:amap_map_example/pages/map/limit_map_bounds.dart';
|
||||
import 'package:amap_map_example/pages/map/map_all_config.dart';
|
||||
import 'package:amap_map_example/pages/map/map_my_location.dart';
|
||||
import 'package:amap_map_example/pages/map/min_max_zoom.dart';
|
||||
import 'package:amap_map_example/pages/map/multi_map.dart';
|
||||
import 'package:amap_map_example/pages/map/show_map_page.dart';
|
||||
import 'package:amap_map_example/pages/overlays/polyline_geodesic.dart';
|
||||
import 'package:amap_map_example/pages/overlays/polyline_texture.dart';
|
||||
import 'package:amap_map_example/widgets/demo_group.dart';
|
||||
import 'package:amap_map_example/data/demos.dart';
|
||||
import 'package:amap_map_example/routes.dart';
|
||||
import 'package:amap_map_example/theme.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:permission_handler/permission_handler.dart';
|
||||
|
||||
import 'base_page.dart';
|
||||
// final List<BasePage> _mapDemoPages = <BasePage>[
|
||||
// AllMapConfigDemoPage('总体演示', '演示AMapWidget的所有配置项'),
|
||||
|
||||
final List<BasePage> _mapDemoPages = <BasePage>[
|
||||
AllMapConfigDemoPage('总体演示', '演示AMapWidget的所有配置项'),
|
||||
ShowMapPage('显示地图', '基本地图显示'),
|
||||
LimitMapBoundsPage('限制地图显示范围', '演示限定手机屏幕显示地图的范围'),
|
||||
MinMaxZoomDemoPage('指定显示级别范围', '演示指定最小最大级别功能'),
|
||||
ChangeMapTypePage('切换地图图层', '演示内置的地图图层'),
|
||||
CustomMapStylePage('自定义地图', '根据自定义的地图样式文件显示地图'),
|
||||
MultiMapDemoPage('地图多实例', '同时显示多个地图'),
|
||||
];
|
||||
// MinMaxZoomDemoPage('指定显示级别范围', '演示指定最小最大级别功能'),
|
||||
// ChangeMapTypePage('切换地图图层', '演示内置的地图图层'),
|
||||
// CustomMapStylePage('自定义地图', '根据自定义的地图样式文件显示地图'),
|
||||
// MultiMapDemoPage('地图多实例', '同时显示多个地图'),
|
||||
// ];
|
||||
|
||||
final List<BasePage> _interactiveDemoPages = <BasePage>[
|
||||
MapUIDemoPage('UI控制', 'ui开关演示'),
|
||||
GesturesDemoPage('手势交互', '手势交互'),
|
||||
PoiClickDemoPage('点击poi功能', '演示点击poi之后的回调和信息透出'),
|
||||
MoveCameraDemoPage('改变地图视角', '演示改变地图的中心点、可视区域、缩放级别等功能'),
|
||||
SnapshotPage('地图截屏', '地图截屏示例'),
|
||||
MyLocationPage('显示我的位置', '在地图上显示我的位置'),
|
||||
];
|
||||
// final List<BasePage> _interactiveDemoPages = <BasePage>[
|
||||
// MapUIDemoPage('UI控制', 'ui开关演示'),
|
||||
// GesturesDemoPage('手势交互', '手势交互'),
|
||||
// PoiClickDemoPage('点击poi功能', '演示点击poi之后的回调和信息透出'),
|
||||
// MoveCameraDemoPage('改变地图视角', '演示改变地图的中心点、可视区域、缩放级别等功能'),
|
||||
// SnapshotPage('地图截屏', '地图截屏示例'),
|
||||
// ];
|
||||
|
||||
final List<BasePage> _markerPages = <BasePage>[
|
||||
MarkerConfigDemoPage('Marker操作', '演示Marker的相关属性的操作'),
|
||||
MarkerAddWithMapPage("随地图添加", "演示初始化地图时直接添加marker"),
|
||||
MarkerAddAfterMapPage("单独添加", "演示地图初始化之后单独添加marker功能"),
|
||||
MarkerCustomIconPage('自定义图标', '演示marker使用自定义图标功能'),
|
||||
];
|
||||
// final List<BasePage> _markerPages = <BasePage>[
|
||||
// MarkerAddWithMapPage("随地图添加", "演示初始化地图时直接添加marker"),
|
||||
// MarkerAddAfterMapPage("单独添加", "演示地图初始化之后单独添加marker功能"),
|
||||
// MarkerCustomIconPage('自定义图标', '演示marker使用自定义图标功能'),
|
||||
// ];
|
||||
|
||||
final List<BasePage> _overlayPages = <BasePage>[
|
||||
PolylineDemoPage('Polyline操作', '演示Polyline的相关属性的操作'),
|
||||
PolylineGeodesicDemoPage('Polyline大地曲线', '演示大地曲线的添加'),
|
||||
PolylineTextureDemoPage('Polyline纹理线', '演示纹理线的添加'),
|
||||
PolygonDemoPage('Polygon操作', '演示Polygon的相关属性的操作'),
|
||||
];
|
||||
// final List<BasePage> _overlayPages = <BasePage>[
|
||||
// PolylineDemoPage('Polyline操作', '演示Polyline的相关属性的操作'),
|
||||
// PolylineGeodesicDemoPage('Polyline大地曲线', '演示大地曲线的添加'),
|
||||
// PolylineTextureDemoPage('Polyline纹理线', '演示纹理线的添加'),
|
||||
// PolygonDemoPage('Polygon操作', '演示Polygon的相关属性的操作'),
|
||||
// ];
|
||||
|
||||
final List<Permission> needPermissionList = [
|
||||
Permission.location,
|
||||
@ -68,17 +46,24 @@ final List<Permission> needPermissionList = [
|
||||
|
||||
class AMapDemo extends StatefulWidget {
|
||||
@override
|
||||
State<StatefulWidget> createState() {
|
||||
return DemoWidget();
|
||||
}
|
||||
State<StatefulWidget> createState() => _AMapDemoState();
|
||||
}
|
||||
|
||||
class DemoWidget extends State<AMapDemo> {
|
||||
class _AMapDemoState extends State<AMapDemo>
|
||||
with RestorationMixin, SingleTickerProviderStateMixin {
|
||||
late AnimationController _animationController;
|
||||
final RestorableBool _isMapListExpanded = RestorableBool(false);
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
_checkPermissions();
|
||||
|
||||
_animationController = AnimationController(
|
||||
vsync: this,
|
||||
duration: const Duration(milliseconds: 800),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
@ -101,41 +86,83 @@ class DemoWidget extends State<AMapDemo> {
|
||||
AMapInitializer.updatePrivacyAgree(ConstConfig.amapPrivacyStatement);
|
||||
return Scaffold(
|
||||
appBar: AppBar(title: const Text('高德地图示例')),
|
||||
body: Container(
|
||||
height: MediaQuery.of(context).size.height,
|
||||
width: MediaQuery.of(context).size.width,
|
||||
child: SingleChildScrollView(
|
||||
child: Container(
|
||||
child: Column(
|
||||
children: [
|
||||
DemoGroupWidget(
|
||||
groupLabel: '创建地图',
|
||||
itemPages: _mapDemoPages,
|
||||
),
|
||||
DemoGroupWidget(
|
||||
groupLabel: '地图交互',
|
||||
itemPages: _interactiveDemoPages,
|
||||
),
|
||||
DemoGroupWidget(
|
||||
groupLabel: '绘制点标记',
|
||||
itemPages: _markerPages,
|
||||
),
|
||||
DemoGroupWidget(
|
||||
groupLabel: '绘制线和面',
|
||||
itemPages: _overlayPages,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
body: ListView(
|
||||
children: [
|
||||
AnimatedCategoryItem(
|
||||
startDelayFraction: 0,
|
||||
controller: _animationController,
|
||||
child: CategoryListItem(
|
||||
category: DemoCategory.basic,
|
||||
demos: mapDemos(),
|
||||
)),
|
||||
AnimatedCategoryItem(
|
||||
startDelayFraction: 0.05,
|
||||
controller: _animationController,
|
||||
child: CategoryListItem(
|
||||
category: DemoCategory.interactive,
|
||||
demos: interactiveDemos(),
|
||||
)),
|
||||
AnimatedCategoryItem(
|
||||
startDelayFraction: 0.1,
|
||||
controller: _animationController,
|
||||
child: CategoryListItem(
|
||||
category: DemoCategory.overlay,
|
||||
demos: overlayDemos(),
|
||||
)),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
String? get restorationId => 'demos';
|
||||
|
||||
@override
|
||||
void restoreState(RestorationBucket? oldBucket, bool initialRestore) {
|
||||
registerForRestoration(_isMapListExpanded, 'map_list');
|
||||
}
|
||||
}
|
||||
|
||||
void main() {
|
||||
// debugProfileBuildsEnabled = true;
|
||||
// debugProfilePaintsEnabled = true;
|
||||
// debugPaintLayerBordersEnabled = true;
|
||||
runApp(MaterialApp(home: AMapDemo()));
|
||||
runApp(MaterialApp(
|
||||
theme: ThemeData(colorScheme: DemoThemeData.lightColorScheme),
|
||||
themeMode: ThemeMode.light,
|
||||
onGenerateRoute: RouteConfig.onGenerateRoute,
|
||||
home: AMapDemo()));
|
||||
}
|
||||
|
||||
enum DemoCategory {
|
||||
basic,
|
||||
interactive,
|
||||
overlay;
|
||||
|
||||
String toDisplayTitle() {
|
||||
switch (this) {
|
||||
case basic:
|
||||
return '创建地图';
|
||||
case interactive:
|
||||
return '与地图交互';
|
||||
case overlay:
|
||||
return '在地图上绘制';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Demo {
|
||||
const Demo({
|
||||
required this.title,
|
||||
required this.category,
|
||||
required this.subtitle,
|
||||
// Parameters below are required for non-study demos.
|
||||
this.slug,
|
||||
this.configurations = const [],
|
||||
}) : assert(slug != null);
|
||||
|
||||
final String title;
|
||||
final DemoCategory category;
|
||||
final String subtitle;
|
||||
final String? slug;
|
||||
final List<DemoConfiguration> configurations;
|
||||
|
||||
String get describe => '$slug@${category.name}';
|
||||
}
|
||||
|
Reference in New Issue
Block a user