Как перейти на страницу во Flutter после получения определенного значения c из потока - PullRequest
0 голосов
/ 10 июля 2020

Я хочу, чтобы мое приложение автоматически переходило на страницу после получения указанного c значения из потока, в моем случае идентификатора устройства. В противном случае он будет продолжать потоковую передачу / сканирование устройств, если пользователь не решит выйти из приложения. Для некоторого контекста FindDevicesScreen будет иметь текст посередине под названием «Обнаружение устройства ...». FindDevicesScreen будет продолжать сканирование, пока не найдет идентификатор устройства и не перейдет к MonitorPage. Пример кода ниже взят из Flutter Blue Package , который я настроил.

class FindDevicesScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Find Devices'),
      ),
      body: RefreshIndicator(
        onRefresh: () =>
            FlutterBlue.instance.startScan(timeout: Duration(seconds: 4)),
        child: SingleChildScrollView(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: <Widget>[
              Text("Locating Device..."),
              StreamBuilder<List<ScanResult>>(
                  stream: FlutterBlue.instance.scanResults,
                  initialData: [],
                  builder: (c, snapshot) {
                    List<ScanResult> results = snapshot.data;

                    for (var i = 0; i < results.length; i++) {
                      var result = results[i];
                        if (result.device.id.toString() == 'the_device_id') {
                        FlutterBlue.instance.stopScan();
                        result.device.connect();
                        Navigator.push(
                            context,
                            new MaterialPageRoute(
                                builder: (context) => MonitorPage()));
                      }
                    }
                    return FindDevicesScreen();
                  }),
            ],
          ),
        ),
      ),
    );
  }
}

Запуск кода возвращает ошибку (не удивительно, смеется). Я новичок в флаттерах и все еще пытаюсь под виджетами. Был бы очень признателен за помощь.

...