Flutter血糖监测插件dexcom的使用
Flutter血糖监测插件dexcom的使用
关于
dexcom
for Dart 允许你使用 Dexcom Share 获取你的 Dexcom 连续血糖监测(CGM)数据,或者任何其他人的数据来运行你的应用程序。包括时间(自Enoch以来的毫秒数)、读数和趋势。只需使用你的电子邮件和密码即可访问所有的葡萄糖数据!用户名可以是电子邮件、用户名或电话号码。
重要信息
警告:此包处于测试阶段(版本号为0.x.x),请自行承担风险使用。
警告:此包会获取、处理、计算并输出实时血糖水平。请勿将其用于重要的医疗治疗决策。
我们不对因使用本程序或任何使用它的程序而造成的任何医疗事件/紧急情况负责。请自行承担风险使用。
特性
非常简单易用。只需创建一个包含用户名和密码的Dexcom对象,然后获取用户的最新读数。脚本会自动处理所有账户ID、会话ID和会话创建。用户名可以是电子邮件、用户名或电话号码。
使用方法
验证登录
String username = "用户名";
String password = "密码";
var dexcom = Dexcom(username, password);
List<dynamic>? response;
try {
// getReadings 可以选择设置为 false(默认为 true),如果你只想检查会话是否成功
await dexcom.verifyLogin(username, password, [optional: getReadings]);
print("验证帐户成功");
} catch (e) {
print("无法验证帐户: $e");
}
这将登录用户到他们的帐户并获取他们的数据。如果两者都成功(或者会话成功且getReadings设置为false),它将返回:
{"success": true, "error": "none"};
然而,如果失败,它将返回:
// 如果会话失败(用户名/密码错误):
{"success": false, "error": "session"}
// 如果无法检索读数(可能是因为过去48小时内没有读数):
{"success": false, "error": "readings"}
获取数据
String username = "用户名";
String password = "密码";
var dexcom = Dexcom(username, password);
List<dynamic>? response;
try {
response = await dexcom.getGlucoseReadings([optional: minutes, maxCount]);
print("使用dexcom读取数据: $dexcom");
} catch (e) {
print("无法使用dexcom读取数据: $e");
}
if (response != null) {
print("接收到的数据: $response");
return response;
} else {
print("数据为空");
}
这实际上会从用户那里获取葡萄糖读数。如果失败,它会自动尝试重新创建会话。这是样本数据(实际上是实际读数):
[
{
WT: Date(1731645818222),
ST: Date(1731645818222),
DT: Date(1731645818222-0600),
Value: 155,
Trend: Flat
},
{
WT: Date(1731645518663),
ST: Date(1731645518663),
DT: Date(1731645518663-0600),
Value: 155,
Trend: FortyFiveDown
}
]
可以看到,这是一个包含两个项目的数组,因为这是我想让程序获取的数量。顶部的那个(项目0)是最新的。WT和ST都告诉你该值何时被采集。DT,我甚至不知道是什么意思。Value是实际的葡萄糖值。趋势是指箭头的方向。趋势可以是:
- Flat:平稳
- FortyFiveDown:缓慢下降(-1/分钟)
- FortyFiveUp:缓慢上升(+1/分钟)
- SingleDown:下降(-2/分钟)
- SingleUp:上升(+2/分钟)
- DoubleDown:快速下降(-3/分钟)
- DoubleUp:快速上升(+3/分钟)
- None:无趋势
- NonComputable:图表太乱了,Dexcom无法知道葡萄糖水平的走向。如果你愿意,你可以自己尝试计算。
- RateOutOfRange:血糖水平上升或下降得太快,无法计算。这通常发生在传感器错误期间,在传感器失效之前,血糖水平会随机下降50以上。
其他信息
此包是基于Python的pydexcom。我(和ChatGPT的一些帮助)将其移植到Flutter(版本0.0.0
),然后最终移植到Dart(版本0.1.2
)。
以下是完整的示例代码:
import 'package:flutter/material.dart';
import 'package:dexcom/dexcom.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'dexcom Example',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(
seedColor: Colors.green, // For Dexcom
brightness: Brightness.light,
),
useMaterial3: true,
),
darkTheme: ThemeData(
colorScheme: ColorScheme.fromSeed(
seedColor: Colors.green, // For Dexcom
brightness: Brightness.dark,
),
brightness: Brightness.dark,
useMaterial3: true,
),
home: const Home(),
);
}
}
class Home extends StatefulWidget {
const Home({super.key});
[@override](/user/override)
State<Home> createState() => _HomeState();
}
class _HomeState extends State<Home> {
// 更改以测试你的Dexcom帐户
String username = "用户名"; // 可以是电子邮件、用户名或电话号码
String password = "密码";
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("dexcom Example"),
centerTitle: true,
),
body: Center(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
"按按钮查看dexcom插件的效果!",
style: TextStyle(
fontSize: 20,
),
),
),
Text("用户名: $username\n密码: $password"),
TextButton(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text("获取过去的6个葡萄糖读数"),
),
onPressed: () async {
List data = await getGlucoseReadings(username, password);
List readings = [];
for (var item in data) {
readings.add("${item["Value"]} ${item["Trend"]}");
}
showDialogue("过去的6个葡萄糖读数", readings.toString());
},
),
TextButton(
child: Text("验证登录"),
onPressed: () async {
try {
await verifyLogin(username, password);
showDialogue(
"验证登录", "登录成功验证");
} catch (e) {
showDialogue(
"验证登录", "登录未成功验证: $e");
}
},
),
],
),
),
),
);
}
Future<List> getGlucoseReadings(String username, String password) async {
print("加载中...");
try {
Dexcom dexcom = Dexcom(username, password);
List readings = await dexcom.getGlucoseReadings(maxCount: 6);
return readings;
} catch (e) {
showDialogue("无法验证登录", e.toString());
throw Exception(e);
}
}
Future<void> verifyLogin(String username, String password) async {
print("加载中...");
Dexcom dexcom = Dexcom(username, password);
try {
Map verify = await dexcom.verifyLogin(username, password);
if (verify["success"]) {
return;
} else {
throw Exception(verify["error"]);
}
} catch (e) {
throw Exception(e);
}
}
void showDialogue(String title, String message) {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text(title),
content: Text(message),
actions: [
TextButton(
onPressed: () {
Navigator.of(context).pop();
},
child: const Text('确定'),
),
],
);
},
);
}
}
更多关于Flutter血糖监测插件dexcom的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter血糖监测插件dexcom的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter项目中集成Dexcom血糖监测插件需要遵循Dexcom的API规范,并确保你具备相应的开发者权限和认证。以下是一个简化的代码示例,展示了如何在Flutter中集成和使用Dexcom API来获取血糖数据。请注意,实际应用中需要处理更多的错误处理、身份验证和安全措施。
首先,确保你已经安装了必要的Flutter依赖项,并创建了一个新的Flutter项目。
-
添加HTTP请求库: 为了与Dexcom API进行通信,我们可以使用
dio
库,它是一个强大的HTTP客户端库。# 在你的 pubspec.yaml 文件中添加以下依赖 dependencies: flutter: sdk: flutter dio: ^4.0.0 # 请检查最新版本
然后运行
flutter pub get
来安装依赖。 -
创建Dexcom API服务: 创建一个新的Dart文件,例如
dexcom_api_service.dart
,用于封装与Dexcom API的通信逻辑。import 'package:dio/dio.dart'; class DexcomApiService { private static const baseUrl = 'https://api.dexcom.com/v2'; // 示例URL,实际使用时应替换为Dexcom提供的API端点 private final Dio dio; DexcomApiService(this.dio); // 获取血糖数据的示例方法 Future<Map<String, dynamic>> fetchGlucoseData(String accessToken, String userId) async { try { final response = await dio.get( '$baseUrl/users/$userId/glucose', options: Options( headers: { 'Authorization': 'Bearer $accessToken', 'Content-Type': 'application/json', }, ), ); return response.data; } catch (error) { throw error; } } }
-
在主应用程序中使用服务: 在你的主Dart文件(通常是
main.dart
)中,初始化Dexcom API服务并使用它来获取血糖数据。import 'package:flutter/material.dart'; import 'package:dio/dio.dart'; import 'dexcom_api_service.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('Dexcom Glucose Monitor'), ), body: GlucoseDataScreen(), ), ); } } class GlucoseDataScreen extends StatefulWidget { @override _GlucoseDataScreenState createState() => _GlucoseDataScreenState(); } class _GlucoseDataScreenState extends State<GlucoseDataScreen> { final Dio dio = Dio(); String glucoseData = ''; @override void initState() { super.initState(); _fetchGlucoseData(); } Future<void> _fetchGlucoseData() async { final String accessToken = 'YOUR_ACCESS_TOKEN_HERE'; // 请替换为实际的访问令牌 final String userId = 'YOUR_USER_ID_HERE'; // 请替换为实际的用户ID final DexcomApiService service = DexcomApiService(dio); try { final data = await service.fetchGlucoseData(accessToken, userId); setState(() { glucoseData = data.toString(); // 你可以根据需要格式化输出 }); } catch (error) { print('Error fetching glucose data: $error'); } } @override Widget build(BuildContext context) { return Center( child: Text(glucoseData), ); } }
注意事项:
- 你需要替换
YOUR_ACCESS_TOKEN_HERE
和YOUR_USER_ID_HERE
为实际的Dexcom API访问令牌和用户ID。 - 访问令牌通常是通过OAuth2或其他认证机制获得的,你可能需要实现一个完整的认证流程来获取令牌。
- 实际的Dexcom API端点和请求参数可能与此示例不同,请参考Dexcom的开发者文档进行适当调整。
- 确保你的应用遵循Dexcom的隐私政策和数据使用条款。
这个示例提供了一个基本的框架,展示了如何在Flutter应用中集成Dexcom API来获取血糖数据。实际应用中可能需要更复杂的逻辑来处理认证、错误处理和用户交互。