首页 > 解决方案 > 无法从实时数据库中保存值

问题描述

我尝试从实时数据库中获取价值。我将数据设置到数据库没有问题,但我无法保存价值。这是我的代码:

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。我能做些什么 ?谢谢

标签: firebaseflutterdartfirebase-realtime-database

解决方案


推荐阅读