Flutter移动开发SDK插件dgis_mobile_sdk_full的使用
Flutter移动开发SDK插件dgis_mobile_sdk_full的使用
本包允许你在应用中添加一个2GIS地图。使用此SDK,你可以在屏幕上显示地图,添加标记,绘制几何形状,规划路线,获取对象信息,控制相机等。
地图数据支持OGC标准。
获取访问密钥
要使用SDK,你需要获取一个dgissdk.key
文件,并且必须指定为此应用程序创建的appId
。该密钥将用于连接到2GIS服务器,获取地理数据,以及使用离线导航器。此密钥是此类型SDK独有的,不能与其他2GIS SDK一起使用。
要获取密钥文件:
- 在dev.2gis.ru填写表单。
- 将生成的密钥文件添加到应用的
assets
目录中。
激活密钥后,你可以在个人账户Platform Manager中注册并查看请求分布统计。
安装
Android
在构建Android应用时,使用.aar
格式的二进制工件。为了正确连接,你需要将包含此工件的仓库添加到应用的build.gradle
中:
repositories {
maven {
url "https://artifactory.2gis.dev/sdk-maven-release"
}
}
示例应用
此包提供了一个位于example
文件夹中的示例应用。运行应用之前,请确保将获取的dgissdk.key
文件添加到应用的assets
目录中。
示例代码
以下是示例应用的主入口点代码:
import 'package:dgis_mobile_sdk_full/l10n/generated/dgis_localizations.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'pages/add_objects.dart';
import 'pages/all_map_controls.dart';
import 'pages/benchmark.dart';
import 'pages/calc_position.dart';
import 'pages/camera_moves.dart';
import 'pages/clustering.dart';
import 'pages/common.dart';
import 'pages/copyright.dart';
import 'pages/download_territories_page.dart';
import 'pages/fps_page.dart';
import 'pages/indoor_widget.dart';
import 'pages/map_gestures.dart';
import 'pages/map_objects_identification.dart';
import 'pages/map_snapshot.dart';
import 'pages/navigator.dart';
import 'pages/route_editor.dart';
import 'pages/search_page.dart';
import 'pages/stateless_screen_with_map.dart';
import 'pages/traffic_widget.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
supportedLocales: DgisLocalizations.supportedLocales,
localizationsDelegates: const [
DgisLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
title: 'Flutter SDK 测试应用',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flutter SDK 测试应用首页'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({required this.title, super.key});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
[@override](/user/override)
Widget build(BuildContext context) {
return DefaultTabController(
length: 3,
child: Scaffold(
appBar: AppBar(
title: Text(widget.title),
bottom: const TabBar(
tabs: [
Tab(text: '导航'),
Tab(text: '地图'),
Tab(text: '目录'),
],
),
),
body: TabBarView(
children: [
_navigationPages(),
_mapPages(),
_directoryPages(),
],
),
),
);
}
Widget _navigationPages() {
return ListView(
children: [
ListTile(
title: buildPageTitle('路线编辑器'),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => RouteEditorPage(title: '路线编辑器')),
);
},
),
ListTile(
title: buildPageTitle("导航示例"),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
NavigatorPage(title: "导航示例")));
},
)
],
);
}
Widget _mapPages() {
return ListView(
children: [
ListTile(
title: buildPageTitle('添加对象'),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => AddObjectsPage(title: '添加对象')),
);
},
),
ListTile(
title: buildPageTitle('所有地图控件'),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
AllMapControlsPage(title: '所有地图控件')),
);
},
),
ListTile(
title: buildPageTitle('基准测试'),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => BenchmarkPage(title: '基准测试')),
);
},
),
ListTile(
title: buildPageTitle('计算位置'),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
CalcPositionPage(title: '计算位置')),
);
},
),
ListTile(
title: buildPageTitle('相机移动'),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
CameraMovesPage(title: '相机移动')),
);
},
),
ListTile(
title: buildPageTitle('聚类'),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
ClusteringPage(title: '聚类')),
);
},
),
ListTile(
title: buildPageTitle('版权信息'),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
CopyrightPage(title: '版权信息')),
);
},
),
ListTile(
title: buildPageTitle('下载区域'),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
DownloadTerritoriesPage(title: '下载区域')),
);
},
),
ListTile(
title: buildPageTitle('帧率'),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => FpsPage(title: '帧率')),
);
},
),
ListTile(
title: buildPageTitle('室内小部件'),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
IndoorWidgetPage(title: '室内小部件')),
);
},
),
ListTile(
title: buildPageTitle('地图手势'),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
MapGesturesPage(title: '地图手势')),
);
},
),
ListTile(
title: buildPageTitle('地图对象识别'),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
MapObjectsIdentificationPage(
title: '地图对象识别')),
);
},
),
ListTile(
title: buildPageTitle('地图快照'),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
MapSnapshotPage(title: '地图快照')),
);
},
),
ListTile(
title: buildPageTitle('简单的地图屏幕(无状态小部件)'),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
SimpleMapScreen(
title: '简单的地图屏幕(无状态小部件)')),
);
},
),
ListTile(
title: buildPageTitle('交通小部件'),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
TrafficWidgetPage(title: '交通小部件')),
);
},
),
],
);
}
Widget _directoryPages() {
return ListView(
children: [
ListTile(
title: buildPageTitle('搜索'),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SearchPage(title: '搜索')),
);
},
),
],
);
}
}
更多关于Flutter移动开发SDK插件dgis_mobile_sdk_full的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter移动开发SDK插件dgis_mobile_sdk_full的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成和使用 dgis_mobile_sdk_full
插件的示例代码。假设你已经创建了一个Flutter项目,并希望在其中使用 dgis_mobile_sdk_full
进行移动开发。
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 dgis_mobile_sdk_full
插件的依赖。
dependencies:
flutter:
sdk: flutter
dgis_mobile_sdk_full: ^最新版本号 # 请替换为实际最新版本号
然后运行 flutter pub get
以获取依赖。
2. 导入插件
在你希望使用 SDK 的 Dart 文件中导入插件。
import 'package:dgis_mobile_sdk_full/dgis_mobile_sdk_full.dart';
3. 初始化 SDK
通常,SDK 需要在应用启动时进行初始化。你可以在 main.dart
文件中添加初始化代码。
void main() {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 SDK,这里假设 SDK 提供了 init 方法
DgisMobileSdkFull.instance.init().then((_) {
runApp(MyApp());
}).catchError((error) {
// 处理初始化错误
print("SDK initialization failed: $error");
runApp(MaterialApp(home: Scaffold(body: Center(child: Text("SDK initialization failed")))));
});
}
4. 使用 SDK 功能
假设 SDK 提供了地图显示功能,以下是如何在 Flutter 中显示地图的示例代码。
import 'package:flutter/material.dart';
import 'package:dgis_mobile_sdk_full/dgis_mobile_sdk_full.dart';
class MapScreen extends StatefulWidget {
@override
_MapScreenState createState() => _MapScreenState();
}
class _MapScreenState extends State<MapScreen> {
late MapController _mapController;
@override
void initState() {
super.initState();
// 初始化地图控制器,这里假设 SDK 提供了 MapController 类
_mapController = MapController();
// 设置地图中心点和缩放级别等
_mapController.setMapCenter(LatLng(latitude, longitude)); // 请替换为实际的经纬度
_mapController.setZoomLevel(15);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Map Screen'),
),
body: DGisMapView(
controller: _mapController,
onMapCreated: (mapView) {
// 地图创建后的回调,可以在这里添加更多的地图设置
print("Map created");
},
),
);
}
@override
void dispose() {
// 释放地图控制器资源
_mapController.dispose();
super.dispose();
}
}
5. 运行应用
确保所有代码正确无误后,运行 flutter run
启动应用。你应该能够看到一个显示地图的屏幕。
注意事项
- 插件的具体方法和类名可能有所不同,请参考
dgis_mobile_sdk_full
的官方文档以获取准确的信息。 - 确保你已经按照 SDK 的要求处理了任何必要的权限和配置,例如位置权限、网络权限等。
- 在实际开发中,请处理各种可能的异常和错误情况,以提高应用的健壮性。
由于 dgis_mobile_sdk_full
是一个假设的 SDK 名称,实际使用时请参考具体的 SDK 文档和示例代码。