# #firebase #flutter #dart #firebase-realtime-database
Вопрос:
Я пытаюсь получить значение из базы данных в реальном времени. У меня нет проблем с установкой данных в базу данных, но я не могу сохранить значение. Это мой код:
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 = DBHelper().getData, но значения равны нулю. Что я могу сделать ?
Спасибо
Комментарии:
1. это происходит из
getDate
-за того, что тип возвращаемой функции является пустым, поэтому она ничего не вернет, поэтому просто сохраните значение в переменной и верните с соответствующим типом возвращаемого значения2. даже если я изменю void на данные, в нем не будут храниться значения
3. Вам не нужно добавлять правку в свой пост. Сайт автоматически отслеживает изменения в истории изменений. Не размещайте бессмысленный контент в своем посте.
4. опс извините, спасибо