You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter安卓应用中读取Firebase实时数据库的传感器输出值?

在Flutter安卓应用中读取Firebase实时数据库的传感器数据

前置准备

  • 在Flutter项目的pubspec.yaml中添加Firebase相关依赖:
    dependencies:
      flutter:
        sdk: flutter
      firebase_core: ^2.15.0
      firebase_database: ^10.2.0
    
    执行flutter 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:52:15