dart Flutter确保我在异步/等待和初始化函数中有一个值[重复]

tyu7yeag  于 2023-02-01  发布在  Flutter
关注(0)|答案(3)|浏览(149)
    • 此问题在此处已有答案**:

What is a Future and how do I use it?(5个答案)
12小时前关门了。
如何确保在异步函数调用后有一个可用的状态变量?我认为因为getValues()是异步的,所以它应该"等待"直到移动到下一行。因此,getValues()不应退出,并且在对setState的调用完成之前不应调用configValue()。但是,我看到values在我的Widget中是一个空数组。

late List values = [];

  @override
  void initState() {
    super.initState();
    getValues();
    configValue();
  }

  getValues() async {
    final String response = await rootBundle.loadString('assets/values.json');
    final vals = await json.decode(response)['values'];
    setState(() {
      values = vals;
    });
  }

  void configValue() {
    // How to make sure I have values[0] here?
  }

先谢了!

gudnpqoy

gudnpqoy1#

您可以将getValues更改为:

Future<List> getValues() async {
  final String response = await rootBundle.loadString('assets/values.json');
  final vals = await json.decode(response)['values'];
  return vals;
}

然后创建另一个中间函数,如下所示:

callasyncs() async {
   var result = await getValues();
   configValue(result);
}

initState中这样调用它:

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

也将您的configValue更改为:

void configValue(List values) {
  // now you have updated values here.
}

在这里,configValuegetValues彼此分离,并且configValue将等待getValues结果。

n9vozmp4

n9vozmp42#

你需要使用await之前的方法来完成未来.也可以使用.then .

Future<void> getVids() async { //I prefer retuning value
  final String response = await rootBundle.loadString('assets/values.json');
  final vals = await json.decode(response)['values'];
  setState(() {
    values = vals;
  });
}

void configValue() async {
  await getVids();
   
}
q0qdq0h2

q0qdq0h23#

请尝试以下代码:

List? values;

@override
void initState() {
  super.initState();
  getValues();
  configValue();
}

Future<void> getVids() async {
  final String response = await rootBundle.loadString('assets/values.json');
  final vals = await json.decode(response)['values'];
  setState(() {
    values = vals;
  });
}

void configValue() {
  if (values != null) {
    if (values!.isNotEmpty) {
      …
    }
  }
}

相关问题