Dart中从Future.delay回调返回字符串时提示非空变量未赋值错误
错误原因
- Dart 2.12及以上版本默认开启空安全,你声明的非空类型变量
String result必须在使用前完成赋值,否则会直接触发编译错误。 Future.delayed属于异步非阻塞操作,代码执行到该语句时,只会将回调函数注册到事件队列,不会等待3秒执行回调逻辑,会立刻向下执行return语句,此时result还未被赋值,符合空安全的报错触发条件。- 你参考的课程资料代码未报错,大概率是使用了未开启空安全的旧Dart版本,即使无编译报错,运行后返回的也是null值,同样拿不到延迟处理后的结果,本身写法逻辑就是错误的。
正确实现方案
如果需要等待异步操作完成后返回处理结果,需要将函数改为异步函数,返回Future类型,配合await关键字等待异步操作执行完成:
Future<String> task2() async { Duration three = Duration(seconds: 3); // 等待Future.delayed的回调执行完成后再向下执行 String result = await Future.delayed(three, () { print('task 2 complete'); return 'task 2 data'; }); return result; }
调用该异步函数时,同样需要在标记了async的函数内使用await接收返回结果:
// 调用示例 void main() async { String data = await task2(); print(data); // 3秒后输出 task 2 data }
内容的提问来源于stack exchange,提问作者Samuella M. Aglago
相关产品推荐
相关产品推荐

