firebase - 无法从实时数据库中保存值
问题描述
我尝试从实时数据库中获取价值。我将数据设置到数据库没有问题,但我无法保存价值。这是我的代码:
import 'package:cleverpot/Class/Data.dart';
import 'package:cleverpot/Helper/dbhelper.dart';
import 'package:cleverpot/Home/home_drawer.dart';
import 'package:cleverpot/Widget/card.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_database/firebase_database.dart';
import 'package:flutter/material.dart';
class home_body extends StatefulWidget {
home_body({Key? key}) : super(key: key);
@override
_home_bodyState createState() => _home_bodyState();
}
class _home_bodyState extends State<home_body> {
@override
void initState() {
// TODO: implement initState
super.initState();
}
@override
dbHelper _helper = dbHelper();
Widget build(BuildContext context) {
var data = Data(water: '', brightness: '', humidity: '');
data = _helper.getData();
print("luce: " + data.getBrightness().toString());
print("water" + data.getWater().toString());
print("Humidity: " + data.getHumidity().toString());
return Scaffold(
appBar: AppBar(
title: Text("Home"),
backgroundColor: Colors.green[200],
),
backgroundColor: Colors.green[100],
drawer: home_drawer(),
body: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.center,
colors: [Colors.green, Colors.greenAccent])),
child: GridView.count(
crossAxisCount: 3,
children: [
My_card(
title: "Umidità",
icon: Icons.thermostat,
value: data.getHumidity().toString(),
),
My_card(
title: "Luminosità",
icon: Icons.lightbulb,
value: data.getBrightness().toString(),
),
My_card(
title: "Serbatoio",
icon: Icons.water,
value: data.getWater().toString(),
)
],
),
),
);
}
}
和 dbHelper
import 'package:cleverpot/Class/Data.dart';
import 'package:cleverpot/Widget/axischart.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_database/firebase_database.dart';
import 'package:flutter/material.dart';
class dbHelper {
final FirebaseDatabase db = FirebaseDatabase(
databaseURL:
"https://cleverpot-d0c1a-default-rtdb.europe-west1.firebasedatabase.app");
final FirebaseAuth _auth = FirebaseAuth.instance;
Data getData() {
var data = Data(water: '', humidity: '', brightness: '');
db
.reference()
.child(_auth.currentUser.uid)
.child("status")
.once()
.then((value) => {
data.setBrightness(value.value['Brigthness'].toString()),
print("DB_Humidità: " + value.value['Humidiy'].toString()),
print("DB_LUCE: " + data.getBrightness().toString()),
data.setHumidity(value.value['Humidiy'].toString()),
print("data_umidità: " + data.getHumidity()),
data.setWater(value.value['Water'].toString())
});
return data;
}
我的数据类:
class Data {
String humidity;
String water;
String brightness;
Data({required this.brightness, required this.water, required this.humidity});
String getWater() {
return this.water;
}
String getHumidity() {
return this.humidity;
}
String getBrightness() {
return this.brightness;
}
void setWater(String value) {
this.water = value;
}
void setBrightness(String value) {
this.brightness = value;
}
void setHumidity(String value) {
this.humidity = value;
}
}
DbHelper 类中的打印方法运行良好,数据存储在 Data 类中。因此,我在 Data data = DbHelper().getData 之类的新 Data 实例中获取数据,但值为 null。我能做些什么 ?谢谢
解决方案
推荐阅读
- c# - 有没有办法使用机器人框架中的自适应卡将文件从模拟器上传到机器人
- vb.net - 如何从“table2”中删除记录,除了“table2”中包含的数组列表值
- c++ - 如何验证 `mkfifo` 调用是否成功?
- javascript - 如何在自定义构建的日历中呈现事件
- google-docs - 使用 google doc api 替换 google docs 中的图像时图像被裁剪
- javascript - console.table 不显示观察者
- php - php 7.3.8版本未启用samesite cookie属性功能
- laravel - 如何在 env 文件中设置条带公钥
- php - laravel,雄辩的条件在 yajra 数据表中得到结果
- arrays - 将列附加到 pyspark 数据框中的数组