Отображение версии приложения, версии ОС и модели во Flutter - PullRequest
0 голосов
/ 03 февраля 2020

Я использую плагин device_info для отображения версии приложения, версии ОС и модели в текстовых виджетах. Я делаю три функции, каждая из которых возвращает строку.

//OS version
Future<String> _getVersionInfo() async {
  DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
  AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
  return androidInfo.version.release.toString();
}

//app version
Future<String> _getPackageInfo() async {
  PackageInfo _packageInfo = await PackageInfo.fromPlatform();
  return _packageInfo.version.toString();
}

Future<String> _getDeviceModel() async {
  DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
  if (Platform.isAndroid) {
    AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
    return androidInfo.model.toString();
  } else if (Platform.isIOS) {
    IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
    return iosInfo.model.toString();
  } else {
    return ('Error retreiving device model');
  }
}

Затем я передаю эту функцию текстовому виджету.

Row(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Text('App Version: ${_getPackageInfo()}'),
        ],
      ),
      Row(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Text('Device Model: ${_getDeviceModel()}'),
        ],
      ),
      Row(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Text('OS Version: ${_getVersionInfo()}'),
        ],
      )

Вместо отображения возвращенной строки в виджете «Текст» отображается «Экземпляр будущего». Что я тут не так делаю?

1 Ответ

1 голос
/ 03 февраля 2020

Это асинхронные функции, и их нужно ждать. Я бы предложил использовать что-то вроде FutureBuilder для рендеринга этих свойств.

FutureBuilder<String>(
            future: _getDeviceModel(),
            builder: (BuildContext context,
                AsyncSnapshot<String> snapshot) {
              if (!snapshot.hasData) {
                return CircularProgressIndicator();
              }

              return Text('Device Model: ${snapshot.data}');
          })
...