Flutter移动开发SDK插件dgis_mobile_sdk_full的使用

Flutter移动开发SDK插件dgis_mobile_sdk_full的使用

本包允许你在应用中添加一个2GIS地图。使用此SDK,你可以在屏幕上显示地图,添加标记,绘制几何形状,规划路线,获取对象信息,控制相机等。

地图数据支持OGC标准。

获取访问密钥

要使用SDK,你需要获取一个dgissdk.key文件,并且必须指定为此应用程序创建的appId。该密钥将用于连接到2GIS服务器,获取地理数据,以及使用离线导航器。此密钥是此类型SDK独有的,不能与其他2GIS SDK一起使用。

要获取密钥文件:

  1. dev.2gis.ru填写表单。
  2. 将生成的密钥文件添加到应用的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

1 回复

更多关于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 文档和示例代码。

回到顶部