// ignore: deprecated_member_use
final databaseReference = FirebaseDatabase.instance.reference();
var list = [];
var data = databaseReference
.child('influencer')
.orderByChild('follower');
data.onChildAdded
.forEach((event) => {
list.add(event.snapshot.value),
});
print(list);
Firebase最近使ってないので何となくの回答になりますが、
多分上記のコードの中に非同期メソッドがあるのではないでしょうか?
そうするとawaitを使うかFuture.thenメソッドを使うかしないと非同期メソッド
が完了してFirebaseからデータを取得するより前にbuildメソッドが実行されて、結局
データが表示されない、という流れになるような気がします。
追記 : と言ってもbuildメソッドの中でawaitは使えないのでthenメソッドですね、失礼致しました。
import 'package:flutter/material.dart';
void main(){
runApp(MaterialApp(home: MyApp()));
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
bool hasLoaded = false;
List<String> list = [];
Future<List<String>> fetchInitialData() async {
//ここをFirebase初期化、FirebaseDatabaseのデータの取得処理に置き換える。
await Future.delayed(Duration(seconds: 8,));
return ['one','two'];
}
@override
void initState(){
super.initState();
fetchInitialData().then((resultList){
setState((){
hasLoaded = true;
list = resultList;
});
});
}
@override
Widget build(BuildContext context) {
if(hasLoaded){
return Scaffold(
body: ListView(
children:list.map((str)=>ListTile(title:Text(str))).toList(),
),
);
}else{
return const Center(child: CircularProgressIndicator(),);
}
}
}
上記のコードで8秒後にリストが表示されるので、
fetchInitialDataの中身を必要な処理に置き換えればとりあえず動くようになるのではないかと思います。
FutureBuilderを使うのも良いのではないかと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/24 06:30