Не удается сохранить значение из базы данных в реальном времени

# #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. опс извините, спасибо