在Flutter中,“Future”关键字修饰的方法即为异步方法,如果想要让它的返回值在widget组件中显示,则比较复杂,这里简单介绍一下Flutter异步方法的简单使用,假如有一个如下这样异步获取手机设备型号的方法:
Future<String> getPhoneModel() async { try { DeviceInfoPlugin deviceInfo = DeviceInfoPlugin(); String modelName; if (Platform.isAndroid) { AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo; return Future.value(androidInfo.model); } else if (Platform.isIOS) { IosDeviceInfo iosInfo = await deviceInfo.iosInfo; return Future.value(iosInfo.model); } return modelName; } on PlatformException { print("================="); } return null; }
因为Future是一个异步方法,所以我们在组件中不可以直接这样获取,如下所示是错误的:
Text("设备号:"+getPhoneModel());
它的返回值则是一个字符串,并不能得到手机设备的型号,返回结果如下:
设备号:Instance of 'Future<String>'
那么我们如何获取并在widget组件中显示异步方法的返回值呢?可以使用“FutureBuilder”组件对象来显示异步数据,代码如下:
body: Center( child: FutureBuilder( future: getPhoneModel(), builder: (BuildContext context, AsyncSnapshot<String> snapshot){ return Text("设备号:"+snapshot.data); }, ), ),
此时Flutter就可以获取Future修饰的异步方法返回值了,输出的字符串值则为:
设备号:TAS-AN00
说明:
在FutureBuilder中,future属性则为前面定义的异步方法,而builder里面的“AsyncSnapshot<String>”泛型String则为上面“getPhoneModel()”方法的返回类型,可以使用“snapshot.data”来获取此值。