Размещение модели устройства в текстовом виджете - PullRequest
0 голосов
/ 05 июня 2019

Мне нужно напечатать модель моего устройства в текстовом виджете.

Я пытался использовать виджет FutureBuilder, чтобы получить модель устройства.

import 'package:flutter/material.dart';
import 'package:device_info/device_info.dart';

class DeviceInfoPage extends StatelessWidget {
  String s;
  Future _getModel() async{
    DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
    AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
    return androidInfo.model;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: <Widget>[
          FutureBuilder(
            future: _getModel(),
            builder: (BuildContext context, AsyncSnapshot snap) {
              if(snap.hasData) {}
              else {}
            }
          ),
        ],
      ),
    );
  }
}

Я пытаюсь получить строку androidInfo.model из метода _getModel. Я понимаю, что тип возвращаемого значения - Future, поэтому я попытался с помощью будущего компоновщика получить значение. Но сейчас я в растерянности. Попытка _getModel().then(value) не сработает, поэтому я не знаю, как извлечь модель устройства.

1 Ответ

0 голосов
/ 05 июня 2019

Из параметра привязки.Я полагаю, вы можете сделать что-то вроде:

FutureBuilder(
    future: _getModel(),
    builder: (BuildContext context, AsyncSnapshot<String> snap) {
      if(snap.hasData) {
        Text('Model: ${snap.data}')
      } else {
        Text('Awaiting model...')
      }
    }
),

Рекомендуется проверить состояние соединения.Посмотрите пример docs для получения дополнительной информации и, возможно, рефакторинг к чему-то подобному:

FutureBuilder<String>(
  future: _getModel(), 
  builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
    switch (snapshot.connectionState) {
      case ConnectionState.active:
      case ConnectionState.waiting:
        return Text('Awaiting result...');
      case ConnectionState.done:
        if (snapshot.hasError)
          return Text('Error: ${snapshot.error}');
        return Text('Result: ${snapshot.data}');
    }
    return null;
  },
)
...