Flutter 使用initState从函数中获取值并在生成之前插入变量
我有两个函数,我试图从中获取值,并将其存储到主页中的变量中,以便在构建小部件中使用。我正在使用firebase实时数据库。Flutter 使用initState从函数中获取值并在生成之前插入变量,flutter,dart,firebase-realtime-database,flutter-layout,flutter-dependencies,Flutter,Dart,Firebase Realtime Database,Flutter Layout,Flutter Dependencies,我有两个函数,我试图从中获取值,并将其存储到主页中的变量中,以便在构建小部件中使用。我正在使用firebase实时数据库。我拥有的功能有: Future<List> receive_button(String button) async{ List<String> lst = new List<String>(2); final FirebaseUser user = await _auth.currentUser(); var sn
我拥有的功能有:
Future<List> receive_button(String button) async{
List<String> lst = new List<String>(2);
final FirebaseUser user = await _auth.currentUser();
var snapshot = await databaseReference.child(user.uid+"/buttons/"+button+"/icon").once();
String result = snapshot.value;
var snapshot1 = await databaseReference.child(user.uid+"/buttons/"+button+"/nome").once();
String result1 = snapshot1.value;
lst[0] = result;
lst[1] = result1;
print(lst);
return lst;
}
Future<int> receive_quantity() async{
final FirebaseUser user = await _auth.currentUser();
var snapshot = await databaseReference.child(user.uid+"/buttons/quantity").once();
var result = snapshot.value;
print(result);
return result;
}
在我的数据库中,这个颤振:0
,实际值是2。这个
flatter:[null,null]
有[“添加”,“巧克力”]我已经测试了函数本身,它给了我正确的数据,我只在存储它们时遇到问题。您可以使用futurebuilder
FutureBuilder(
future: Future.wait([receive_button, receive_quantity]), //Init receive_button/quantity in initState
builder: (context, AsyncSnapshot<List<dynamic>> snapshot) {
if (snapshot.hasData) { //Wait for futures to finish
int quantity = snapshot.data[1];
List<String> lst = snapshot.data[0];
return Container(...);
else {
return Text("Waiting for datas...");
}
},
);
FutureBuilder(
future:future.wait([receive\u button,receive\u quantity]),//Init receive\u button/initState中的数量
生成器:(上下文,异步快照){
if(snapshot.hasData){//等待期货完成
int数量=快照数据[1];
List lst=快照数据[0];
返回容器(…);
否则{
返回文本(“等待数据…”);
}
},
);
试试这个,因为我知道您不能在重写方法initState()
中使用wait,所以这是我通常做的,它工作正常
@override
void initState() {
super.initState();
asyncInit();
}
void asyncInit() async {
quantity = await _auth.receive_quantity();
lst = await _auth.receive_button("button1");
setState(() {});
}
不幸的是,这不起作用,但你需要调用一个setState,因为这些是局部变量,我已经编辑了Asyncint()。实际上效果很好,你能看看这篇文章并帮我解决一下吗:
FutureBuilder(
future: Future.wait([receive_button, receive_quantity]), //Init receive_button/quantity in initState
builder: (context, AsyncSnapshot<List<dynamic>> snapshot) {
if (snapshot.hasData) { //Wait for futures to finish
int quantity = snapshot.data[1];
List<String> lst = snapshot.data[0];
return Container(...);
else {
return Text("Waiting for datas...");
}
},
);
@override
void initState() {
super.initState();
asyncInit();
}
void asyncInit() async {
quantity = await _auth.receive_quantity();
lst = await _auth.receive_button("button1");
setState(() {});
}