首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在颤振中实时获取数据库数据到列表格式中

如何在颤振中实时获取数据库数据到列表格式中
EN

Stack Overflow用户
提问于 2022-08-08 07:29:21
回答 1查看 396关注 0票数 2

我试图用模型将中的数据检索到一个列表中,我不了解snapshot.data如何获取data.value。我读过其他几篇关于使用Firebase的文章,但是还没有找到明确的答案。

模型类屏幕:

代码语言:javascript
复制
import 'package:firebase_database/firebase_database.dart';
 class DataModel {
    final String id;
    final String name;
    final String price;
    final String qty;

DataModel(
       {required this.id,
       required this.name,
       required this.price,
       required this.qty});

DataModel.fromSnapshot(DataSnapshot snapshot)
  : id = snapshot.key.toString(),
    name = (snapshot.value as Map<String, dynamic>?)?['productName'] ?? '',
    price =
        (snapshot.value as Map<String, dynamic>?)?['productPrice'] ?? '',
    qty = (snapshot.value as Map<String, dynamic>?)?['qty'] ?? '';

toJson() {
  return {
   "productName": name,
   "productPrice": price,
   "qty": qty,
   };
  }
}

具有Firebase查询的数据库服务:

代码语言:javascript
复制
import 'package:firebase_database/firebase_database.dart';
import 'package:money_management/data_json_model.dart';

 class DatabaseService {
   static List<DataModel> getData() {
    Query needsSnapshot =
    FirebaseDatabase.instance.ref("Money Management").orderByKey();

     //  print(needsSnapshot); // to debug and see if data is returned

      List<DataModel> needs = [];

       Map<dynamic, dynamic> values = needsSnapshot.onValue as Map;
       values.forEach((key, values) {
       needs.add(DataModel.fromSnapshot(values));
       });

       return needs;
      }
   }

ListView页面:

代码语言:javascript
复制
import 'package:flutter/material.dart';
import 'package:money_management/data_json_model.dart';

import 'database_service.dart';

   class ListScreen extends StatefulWidget {
   const ListScreen({Key? key}) : super(key: key);

   @override
   State<ListScreen> createState() => _ListScreenState();
   }

  class _ListScreenState extends State<ListScreen> {
  List<DataModel> _needs = [];

  @override
  void initState() {
  super.initState();
  _setupNeeds();
   }

  _setupNeeds() async {
  List<DataModel> needs = DatabaseService.getData();
  setState(() {
  _needs = needs;
   });
  }

  @override
  Widget build(BuildContext context) {
  return RefreshIndicator(
  onRefresh: () => _setupNeeds(),
  child: ListView.builder(
      itemCount: _needs.length,
      itemBuilder: (BuildContext context, int index) {
        DataModel need = _needs[index];
        return Column(
          children: [
            Text(need.id),
            Text(need.name),
            Text(need.price),
            Text(need.qty),
             ],
          );
        }),
     );
  }
}
EN

回答 1

Stack Overflow用户

发布于 2022-08-08 14:42:24

尝试使方法getData()异步并调用get() of FirebaseDatabase:

代码语言:javascript
复制
class DatabaseService {
  static Future<List<dynamic>> getData() async {

    final snapshot = await FirebaseDatabase.instance
        .ref("Money Management")
        .orderByKey()
        .get();

    //  print(snapshot); // to debug and see if data is returned

    List<DataModel> needs = [];

    Map<dynamic, dynamic> values = snapshot.value as Map;
    values.forEach((key, values) {
      needs.add(DataModel.fromSnapshot(values));
    });

    return needs;
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73274243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档