如何在Flutter安卓应用中读取Firebase实时数据库的传感器输出值?
在Flutter安卓应用中读取Firebase实时数据库的传感器数据
前置准备
- 在Flutter项目的
pubspec.yaml中添加Firebase相关依赖:
执行dependencies: flutter: sdk: flutter firebase_core: ^2.15.0 firebase_database: ^10.2.0flutter pub get完成依赖安装。 - 确保已在Firebase控制台完成安卓应用配置(将
google-services.json放入安卓项目app目录)。
核心Dart实现代码
以下是完整的示例Widget,用于实时监听并显示超声波传感器的数值:
import 'package:flutter/material.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_database/firebase_database.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); // 初始化Firebase await Firebase.initializeApp(); runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: '超声波传感器数据', theme: ThemeData(primarySwatch: Colors.blue), home: const SensorDataScreen(), ); } } class SensorDataScreen extends StatefulWidget { const SensorDataScreen({super.key}); @override State<SensorDataScreen> createState() => _SensorDataScreenState(); } class _SensorDataScreenState extends State<SensorDataScreen> { // 替换为你Firebase数据库中存储传感器数据的实际节点路径 final DatabaseReference _sensorRef = FirebaseDatabase.instance.ref('sensor/ultrasonic'); double? _distance; String? _errorMessage; @override void initState() { super.initState(); // 实时监听数据变化 _sensorRef.onValue.listen((DatabaseEvent event) { setState(() { _errorMessage = null; final data = event.snapshot.value; // 根据你上传的数据格式解析,这里假设上传的是纯数值 if (data is num) { _distance = data.toDouble(); } else { _errorMessage = '数据格式不匹配'; } }); }, onError: (Object error) { setState(() { _errorMessage = '读取失败: ${error.toString()}'; }); }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('超声波传感器数据')), body: Center( child: _errorMessage != null ? Text(_errorMessage!, style: const TextStyle(color: Colors.red, fontSize: 18)) : _distance != null ? Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const Text('当前检测距离:', style: TextStyle(fontSize: 20)), const SizedBox(height: 16), Text( '${_distance!.toStringAsFixed(2)} cm', style: const TextStyle(fontSize: 32, fontWeight: FontWeight.bold), ), ], ) : const CircularProgressIndicator(), ), ); } }
关键说明
- 如果你的传感器数据是以JSON对象上传的(比如
{"distance": 23.7, "updateTime": 1700000000}),需要调整数据解析逻辑:final data = event.snapshot.value as Map<dynamic, dynamic>; _distance = data['distance']?.toDouble(); onValue监听会在数据库数据更新时自动触发,UI会实时刷新显示最新值。- 错误处理部分捕获了监听过程中的异常,避免应用崩溃并给出提示。
内容的提问来源于stack exchange,提问作者Aravind T R
相关产品推荐
相关产品推荐

