Flutter地图链接跳转插件maplink的使用

Flutter地图链接跳转插件maplink的使用

Maplink Package

项目用于连接Maplink(SOAP)

pubspec.yaml文件中添加依赖:

dependencies:
  maplink: <last version>

使用示例

通过邮政编码和门牌号获取地址

final maplink = Maplink("your-token");
final response = await maplink.getAddressByZipcodeAndHouseNumber(
  "03118030", // 邮政编码
  "156", // 门牌号(可选)
);

通过街道名称获取地址

final maplink = Maplink("your-token");
final response = await maplink.getAddressByStreetName(
  state: "SP",
  city: "São Paulo",
  country: "BRA", // ISO 3166-1 alpha-3 国家代码(BRA)
  streetName: "Rua Guaimbé",
  houseNumber: "156", // 门牌号(可选)
);

错误处理

所有错误都继承自Failure类,该类有三个主要属性:

  • code: 用于标识错误的代码;
  • message: 错误的标准消息;
  • innerException: 导致错误的异常。

处理的错误

参数验证

代码 错误 消息 描述
null-token-failure NullTokenFailure 需要填写token以继续。 Token为空
empty-token-failure EmptyTokenFailure 需要填写token以继续。 Token为空
invalid-field-${fieldName}-failure InvalidFieldFailure 需要填写字段${fieldName}以继续。 传入的某个参数为空或为null

处理Maplink返回结果

代码 错误 消息 描述
empty-datasource-response EmptyDatasourceResponseFailure 地址未找到 Maplink未找到任何地址
null-datasource-response NullDatasourceResponseFailure null Maplink未在响应体中返回内容
maplink-error-messages-failure ErrorsMaplinkFailure 错误信息的拼接,用\n分隔 由Maplink处理的错误。包含一个ErrorsMaplinkMessage列表,每个项具有codemessage属性

完整示例Demo

下面是一个完整的示例代码,展示了如何使用Maplink插件进行地址查询,并处理可能出现的错误。

import 'package:flutter/material.dart';
import 'package:maplink/maplink.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Maplink Demo')),
        body: Center(
          child: MaplinkDemo(),
        ),
      ),
    );
  }
}

class MaplinkDemo extends StatefulWidget {
  [@override](/user/override)
  _MaplinkDemoState createState() => _MaplinkDemoState();
}

class _MaplinkDemoState extends State<MaplinkDemo> {
  String _response = '';
  final Maplink _maplink = Maplink("your-token");

  Future<void> _fetchAddressByZipcodeAndHouseNumber() async {
    try {
      final response = await _maplink.getAddressByZipcodeAndHouseNumber(
        "03118030", // 邮政编码
        "156", // 门牌号(可选)
      );
      setState(() {
        _response = '成功获取地址: ${response}';
      });
    } catch (e) {
      setState(() {
        _response = '获取地址失败: ${e.message}';
      });
    }
  }

  Future<void> _fetchAddressByStreetName() async {
    try {
      final response = await _maplink.getAddressByStreetName(
        state: "SP",
        city: "São Paulo",
        country: "BRA", // ISO 3166-1 alpha-3 国家代码(BRA)
        streetName: "Rua Guaimbé",
        houseNumber: "156", // 门牌号(可选)
      );
      setState(() {
        _response = '成功获取地址: ${response}';
      });
    } catch (e) {
      setState(() {
        _response = '获取地址失败: ${e.message}';
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        ElevatedButton(
          onPressed: _fetchAddressByZipcodeAndHouseNumber,
          child: Text('通过邮政编码和门牌号获取地址'),
        ),
        SizedBox(height: 20),
        ElevatedButton(
          onPressed: _fetchAddressByStreetName,
          child: Text('通过街道名称获取地址'),
        ),
        SizedBox(height: 20),
        Text(_response),
      ],
    );
  }
}

更多关于Flutter地图链接跳转插件maplink的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter地图链接跳转插件maplink的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,maplink 是一个用于生成地图链接并跳转到地图应用的插件。它支持多种地图应用,如 Google Maps、Apple Maps、Waze 等。通过 maplink,你可以轻松地在 Flutter 应用中生成地图链接,并跳转到用户设备上安装的地图应用。

安装 maplink 插件

首先,你需要在 pubspec.yaml 文件中添加 maplink 依赖:

dependencies:
  flutter:
    sdk: flutter
  maplink: ^1.0.0

然后运行 flutter pub get 来安装依赖。

使用 maplink 插件

1. 导入 maplink

import 'package:maplink/maplink.dart';

2. 生成地图链接并跳转

你可以使用 MapLink 类来生成地图链接并跳转到地图应用。以下是一个简单的示例:

void openMap(double latitude, double longitude, String label) async {
  final mapLink = MapLink(
    latitude: latitude,
    longitude: longitude,
    label: label,
  );

  // 跳转到地图应用
  await mapLink.launchMaps();
}

3. 调用 openMap 函数

你可以在按钮的 onPressed 事件中调用 openMap 函数,传入经纬度和标签:

ElevatedButton(
  onPressed: () {
    openMap(37.7749, -122.4194, 'San Francisco');
  },
  child: Text('Open Map'),
);

支持的参数

MapLink 构造函数支持以下参数:

  • latitude: 目标位置的纬度。
  • longitude: 目标位置的经度。
  • label: 目标位置的标签(可选)。
  • zoom: 地图的缩放级别(可选)。
  • mapType: 地图类型,支持 MapType.normalMapType.satelliteMapType.terrain 等(可选)。
  • directionsMode: 导航模式,支持 DirectionsMode.drivingDirectionsMode.walkingDirectionsMode.transit 等(可选)。

示例代码

以下是一个完整的示例代码:

import 'package:flutter/material.dart';
import 'package:maplink/maplink.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('MapLink Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              openMap(37.7749, -122.4194, 'San Francisco');
            },
            child: Text('Open Map'),
          ),
        ),
      ),
    );
  }

  void openMap(double latitude, double longitude, String label) async {
    final mapLink = MapLink(
      latitude: latitude,
      longitude: longitude,
      label: label,
    );

    // 跳转到地图应用
    await mapLink.launchMaps();
  }
}
回到顶部