Имейте в виду, что 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
Я нашел проблему. Это должно произойти, когда построен StreamBuilder на странице настроек, он только слушает предстоящие данные, а не предыдущие данные. Для того, чтобы получить предыдущие данные, нам нужно сделать несколько вещей.
В Bloc использует пакет BehaviorSubject из rxdart вместо streamController и определяет ValueObservable вместо Stream
StreamController _selectedCurrencies = BehaviorSubject();
ValueObservable get getSelectedCurrencies => _selectedCurrencies.stream;
StreamSink get modifySelectedCurrencies => _selectedCurrencies.sink;
Затем на странице настроек предоставьте streamBuilder начальные данные
[111 ]Это работает:)