шаблон блока флаттера & mdash; как получить доступ к данным блока после навигатора

Имейте в виду, что Asyncio предназначен для запуска в одном потоке.

Если программе необходимо взаимодействовать с другими потоками, вам нужно будет использовать одну из выделенных функций:

Вот упрощенный пример:

async def run_with_non_asyncio_lib(action, arg):
    future = asyncio.Future()
    loop = asyncio.get_event_loop()

    def callback(*args):
        loop.call_soon_threasafe(future.set_result, args)

    non_asyncio_lib.register_callback(action, arg, callback)
    callback_args = await future
    return process(*callback_args)

Альтернативно, loop.run_in_executor предоставляет способ взаимодействия с не-асинхронными библиотеками путем запуска данной функции в своем собственном потоке:

async def run_with_non_asyncio_lib(action, arg):
    loop = asyncio.get_event_loop()
    future = loop.run_in_executor(None, non_asyncio_lib.run, action, arg)
    result = await future
    return result

2
задан dshukertjr 19 January 2019 в 18:58
поделиться

1 ответ

Я нашел проблему. Это должно произойти, когда построен StreamBuilder на странице настроек, он только слушает предстоящие данные, а не предыдущие данные. Для того, чтобы получить предыдущие данные, нам нужно сделать несколько вещей.

В Bloc использует пакет BehaviorSubject из rxdart вместо streamController и определяет ValueObservable вместо Stream

  StreamController _selectedCurrencies = BehaviorSubject();
  ValueObservable get getSelectedCurrencies => _selectedCurrencies.stream;
  StreamSink get modifySelectedCurrencies => _selectedCurrencies.sink;

Затем на странице настроек предоставьте streamBuilder начальные данные

[111 ]

Это работает:)

0
ответ дан Rick Chen 19 January 2019 в 18:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: