Flutter插件jawal_flutter的使用方法详解
Flutter插件jawal_flutter的使用方法详解
开始使用Flutter插件jawal_flutter
在你的 pubspec.yaml
文件中添加以下依赖:
dependencies:
jawal_flutter: ^1.0.3
Android
该插件会在你的 Android 清单文件中添加以下权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
iOS
在你的 Info.plist
文件中添加以下内容:
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>YOUR_LOCATION_DESCRIPTION</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>YOUR_LOCATION_DESCRIPTION</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>YOUR_LOCATION_DESCRIPTION</string>
如果你计划在应用处于后台时继续跟踪位置,则需要启用“后台模式”功能并勾选以下两个选项:
- 位置更新
- 后台获取
使用
初始化SDK时需要提供API密钥:
JawalConfig config = JawalConfig(
apiKey: "YOUR_API_KEY",
userId: "USER_UNIQUE_ID",
userDescription: "USER_DESCRIPTION", // 可选
onInitResult: (InitResultEvent event) {
if(event.isSuccessful) {
/// SDK 初始化成功
} else {
/// 可以从 event.error 获取错误信息
print(event.error);
}
},
);
Jawal.init(config);
USER_UNIQUE_ID
: 用户的唯一ID,可以是你数据库中的用户ID。USER_DESCRIPTION
: 用户的描述,可以是用户名。
请求位置权限
你需要向用户请求位置权限。SDK 提供了一个方法来请求权限:
PermissionStatus locationStatus = await Jawal.requestLocationPermission();
if(locationStatus.isGranted){
/// 可选:如果需要在应用后台时继续跟踪位置,请请求后台位置权限
PermissionStatus backgroundStatus = await Jawal.requestBackgroundLocationPermission();
} else if(locationStatus.isPermanentlyDenied) {
/// 权限被永久拒绝,你可以提示用户去设置中开启权限
}
开始跟踪
开始位置跟踪:
Jawal.startTracking();
停止跟踪
停止位置跟踪:
Jawal.stopTracking();
监听位置更新
监听位置变化事件:
Jawal.onLocationChange((LocationChangeEvent event) {
/// 处理位置变化
});
完整示例
以下是一个完整的示例,展示了如何使用 jawal_flutter
插件:
import 'package:flutter/material.dart';
import 'package:jawal_flutter/events/init_result_event.dart';
import 'package:jawal_flutter/events/location_change_event.dart';
import 'package:jawal_flutter/jawal_config.dart';
import 'package:jawal_flutter/models/permission_status.dart';
import 'package:jawal_flutter/jawal.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
bool _initialized = false;
bool _tracking = false;
[@override](/user/override)
void initState() {
super.initState();
bootstrap();
}
void bootstrap() async {
initJawalFlutter();
final PermissionStatus locationStatus = await Jawal.requestLocationPermission();
if (locationStatus.isGranted) {
/// 请求后台位置权限(可选)
/// 如果不需要后台位置,可以跳过这一步
await Jawal.requestBackgroundLocationPermission();
} else if (locationStatus.isPermanentlyDenied) {
/// 提示用户位置权限需要开启,并引导用户到设置页面
}
}
void initJawalFlutter() async {
JawalConfig config = JawalConfig(
apiKey: "YOUR_API_KEY",
userId: "USER_UNIQUE_ID",
userDescription: "USER_DESCRIPTION", // 可选
onInitResult: (InitResultEvent event) {
setState(() {
_initialized = event.isSuccessful;
});
},
);
await Jawal.init(config);
Jawal.onLocationChange((LocationChangeEvent event) {
/// 处理位置变化
});
final isTracking = await Jawal.isTracking();
setState(() {
_tracking = isTracking;
});
}
void toggleTracking() async {
Jawal.isTracking().then((value) => {
if (value) {
Jawal.stopTracking()
} else {
Jawal.startTracking("YOUR_SESSION_ID")
}
});
setState(() {
_tracking = !_tracking;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Jawal Flutter Demo App'),
),
body: Center(
child: Column(
children: [
Container(
margin: const EdgeInsets.only(top: 20),
child: Text(
_initialized
? "Jawal Flutter 已初始化"
: "Jawal Flutter 未初始化",
style: const TextStyle(fontSize: 20),
),
),
ElevatedButton(
onPressed: (_initialized) ? toggleTracking : null,
child: Text(_tracking ? "停止跟踪" : "开始跟踪")),
],
)),
),
);
}
}
更多关于Flutter插件jawal_flutter的使用方法详解的实战教程也可以访问 https://www.itying.com/category-92-b0.html