实时数据库中listview的问题

实时数据库中listview的问题,listview,flutter,firebase-realtime-database,Listview,Flutter,Firebase Realtime Database,我正在尝试将实时数据库与颤振应用程序连接,以便将数据下载到listview。我在尝试在listview上显示数据时遇到问题,因为它始终显示默认文本。我在android studio的控制台上打印数据,我看到数据已正确下载,但listview无法看到它们 我把代码贴在下面: class _ReadUsersDetailsState extends State<ReadUsersDetails> { List<FireBaseFunction> list = [];

我正在尝试将实时数据库与颤振应用程序连接,以便将数据下载到listview。我在尝试在listview上显示数据时遇到问题,因为它始终显示默认文本。我在android studio的控制台上打印数据,我看到数据已正确下载,但listview无法看到它们

我把代码贴在下面:

class _ReadUsersDetailsState extends State<ReadUsersDetails> {
  List<FireBaseFunction> list = [];
  DatabaseReference databaseReference =
      FirebaseDatabase.instance.reference().child("DataBase");

  @override
  void initState() {
    super.initState();
    chargeData();

    print("List: $list");
  }

  void chargeData() {
    databaseReference.once().then((DataSnapshot snap) {
      var keys = snap.value.keys;
      var data = snap.value;

      for (var key in keys) {
        FireBaseFunction fireBaseFunction =
            new FireBaseFunction(data[key]['Name'], data[key]['Surname']);
        list.add(fireBaseFunction);
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: new AppBar(
        title: new Text('Database'),
      ),
      body: Container(
        child: createListView(),
      ),
    );
  }

  Widget createListView() {
    print("List1: $list");
    return list.length == 0
        ? new Text("Data not available")
        : new ListView.builder(
            itemBuilder: (_, index) {
              return interface(list[index].name, list[index].surname);
            },
            itemCount: list.length,
          );
  }

  Widget interface(String name, String surname) {
    return Card(
      child: Container(
        height: 90,
        child: Padding(
          padding: EdgeInsets.only(top: 20, bottom: 20),
          child: Column(
            children: <Widget>[
              new Text("Name: " + name),
              new Text("Surname: " + surname),
            ],
          ),
        ),
      ),
    );
  }
}
class\u ReadUsersDetailsState扩展状态{
列表=[];
数据库引用数据库引用=
FirebaseDatabase.instance.reference().child(“数据库”);
@凌驾
void initState(){
super.initState();
chargeData();
打印(“列表:$List”);
}
void chargeData(){
databaseReference.once().then((DataSnapshot快照){
var keys=snap.value.keys;
var数据=snap.value;
for(变量键入键){
FireBaseFunction FireBaseFunction=
新的FireBaseFunction(数据[键]['Name'],数据[键]['Lastname']);
list.add(fireBaseFunction);
}
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:新的appBar(
标题:新文本(“数据库”),
),
主体:容器(
子项:createListView(),
),
);
}
小部件createListView(){
打印(“列表1:$list”);
return list.length==0
?新文本(“数据不可用”)
:new ListView.builder(
itemBuilder:(\ux,索引){
返回接口(列表[索引]。名称,列表[索引]。姓氏);
},
itemCount:list.length,
);
}
小部件接口(字符串名称、字符串姓氏){
回程卡(
子:容器(
身高:90,
孩子:填充(
填充:仅限边缘设置(顶部:20,底部:20),
子:列(
儿童:[
新文本(“名称:”+名称),
新文本(“姓氏:”+姓氏),
],
),
),
),
);
}
}

更改数据后,您需要调用
setState()
,告诉小部件有关更改的信息以及它需要重新加载

  void chargeData() {
    databaseReference.once().then((DataSnapshot snap) {
      var keys = snap.value.keys;
      var data = snap.value;

      for (var key in keys) {
        FireBaseFunction fireBaseFunction =
            new FireBaseFunction(data[key]['Name'], data[key]['Surname']);
        list.add(fireBaseFunction);
      }
      setState(() {});
    });
  }

你试过使用a吗?是的,但不起作用