Flutter位置追踪与设备管理插件traccar_gennissi的使用

Flutter位置追踪与设备管理插件traccar_gennissi的使用

维护者:Gennissi。

开始使用

此项目是一个Dart包的起点, 一个库模块,包含可以在多个Flutter或Dart项目中轻松共享的代码。

对于如何开始使用Flutter的帮助,请查看我们的 在线文档,它提供了教程、示例、移动开发指南以及完整的API参考。

许可证

MIT许可证

版权所有 © 2021 Gennissi Technologies

特此免费授予任何获得本软件副本及关联文档文件(以下简称“软件”)的人,无限制地处理软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件的副本,并允许他人这样做的权利,但须符合以下条件:

上述版权声明和本许可声明应包含在所有副本或软件的重要部分中。

软件按“原样”提供,不附带任何形式的明示或暗示保证,包括但不限于适销性、适用于特定用途和非侵权的保证。在任何情况下,作者或版权持有者均不对因软件或使用或其他交易而产生的任何索赔、损害或其他责任负责,无论是合同行为、侵权行为还是其他行为引起的。


### 完整示例Demo

#### 1. 添加依赖

在`pubspec.yaml`文件中添加以下依赖项:

```yaml
dependencies:
  traccar_gennissi: ^1.0.0

2. 初始化插件

main.dart文件中初始化插件并配置位置服务:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

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

class _HomeScreenState extends State<HomeScreen> {
  final TraccarGennissi _traccarGennissi = TraccarGennissi();

  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化位置服务
    _traccarGennissi.init();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('位置追踪与设备管理'),
      ),
      body: Center(
        child: Text('点击按钮开始位置追踪'),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () async {
          // 请求位置权限
          await _traccarGennissi.requestLocationPermission();
          // 开始位置追踪
          _traccarGennissi.startTracking();
        },
        child: Icon(Icons.location_on),
      ),
    );
  }
}

3. 监听位置更新

_HomeScreenState类中添加位置更新监听器:

[@override](/user/override)
void initState() {
  super.initState();
  // 初始化位置服务
  _traccarGennissi.init();
  
  // 添加位置更新监听器
  _traccarGennissi.onLocationUpdate.listen((location) {
    print('位置更新: 纬度 ${location.latitude}, 经度 ${location.longitude}');
  });
}

更多关于Flutter位置追踪与设备管理插件traccar_gennissi的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter位置追踪与设备管理插件traccar_gennissi的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


traccar_gennissi 是一个用于 Flutter 的位置追踪与设备管理插件,它允许开发者集成 Traccar 位置追踪服务到 Flutter 应用中。Traccar 是一个开源的 GPS 追踪平台,支持多种设备和协议。

以下是如何在 Flutter 项目中使用 traccar_gennissi 插件的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 traccar_gennissi 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  traccar_gennissi: ^1.0.0  # 请使用最新的版本号

然后运行 flutter pub get 来获取依赖。

2. 配置 Android 和 iOS 项目

由于位置追踪涉及到权限和后台服务,因此需要在 Android 和 iOS 项目中进行一些配置。

Android

AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

iOS

Info.plist 文件中添加以下键值对以请求位置权限:

<key>NSLocationAlwaysUsageDescription</key>
<string>We need access to your location to track your device.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>We need access to your location to track your device.</string>

3. 初始化插件

在 Flutter 应用中初始化 traccar_gennissi 插件。通常在 main.dart 文件中进行初始化:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await TraccarGenissi.initialize(
    serverUrl: 'https://your-traccar-server.com',
    deviceId: 'your-device-id',
    interval: 10, // 位置更新间隔,单位:秒
  );
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Traccar Flutter Demo',
      home: HomeScreen(),
    );
  }
}

4. 启动和停止追踪

你可以在应用中的任何地方启动和停止位置追踪服务:

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

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Traccar Flutter Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () async {
                await TraccarGenissi.startTracking();
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text('Tracking started')),
                );
              },
              child: Text('Start Tracking'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                await TraccarGenissi.stopTracking();
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text('Tracking stopped')),
                );
              },
              child: Text('Stop Tracking'),
            ),
          ],
        ),
      ),
    );
  }
}

5. 处理位置更新

你可以监听位置更新事件并处理位置数据:

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

class LocationScreen extends StatefulWidget {
  @override
  _LocationScreenState createState() => _LocationScreenState();
}

class _LocationScreenState extends State<LocationScreen> {
  Position? _currentPosition;

  @override
  void initState() {
    super.initState();
    TraccarGenissi.onPositionChanged.listen((position) {
      setState(() {
        _currentPosition = position;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Current Location'),
      ),
      body: Center(
        child: _currentPosition != null
            ? Text(
                'Lat: ${_currentPosition!.latitude}, Lon: ${_currentPosition!.longitude}')
            : Text('Waiting for location...'),
      ),
    );
  }
}

6. 处理权限

在使用位置追踪功能之前,确保你已经请求并获得了必要的位置权限。你可以使用 permission_handler 插件来处理权限请求。

import 'package:permission_handler/permission_handler.dart';

Future<void> requestLocationPermission() async {
  var status = await Permission.location.request();
  if (status.isGranted) {
    // 权限已授予
  } else {
    // 权限被拒绝
  }
}
回到顶部