up 0 down

Будучи новым трепетать, я увидел очень хороший пример вещательного StreamController в это видео здесь (Который потребляет изображения из URL).

У меня есть следующая проблема, которую я хотел бы решить. (И я думал о решении его потока в флаттера - может быть, это оказывается неправильный подход, и вы дайте мне знать;)).

Я в настоящее время использовать SQL-запрос, который в конечном итоге находит кучу предметов, которые заселены в списке. Эта часть работает отлично. И я использую FutureBuilder представить список после того, как его элементы были запрошены в SQLite-DB. DB очень большой и запрос занимает время.

Теперь проблема: Я хочу, чтобы запросить дополнительные данные. И вместо того, чтобы ожидание пользователя для запроса-2, 3, 4 и 5, я хотел бы показать список из запроса-1 и в конечном итоге (динамически) добавить результаты из запроса-2, 3, 4 и 5 к тому же список (т.е. возможно добавление вновь обнаруженных элементов, или даже лучше, динамически обновлять список в отсортированном порядке, вставляя новые элементы, как они встречаются). Таким образом, список-обновления должны произойти сразу же после каждого запроса - таким образом, пользователь видит список населяющих все больше и больше новых запросов результатов.

Я думал использовать поток, который в конечном итоге потоки новых запросов результаты в этом же списке.

Является ли это вообще возможно - и если да, то как бы я сделать это точно?

Ниже приводится пробный код, который пока не работает. Как бы я должен реализовать пользовательский поток?

    class MyClassState extends State<MyClass> {

      StreamController<MyCustomList> streamController;
      List<MyCustomList> list = [];

      @override
      void initState() {
        super.initState();
        streamController = StreamController.broadcast();
        streamController.stream.listen((p) => setState(() => list.add(p)));
        load(streamController);
      }

      load(StreamController<MyCustomList> sc) async {

        final StateContainerState container = StateContainer.of(context);

        var streamedRes = await queryMyDB(container.someData.someProperty);

        streamedRes.stream  // ????????????? Here is the exception ???????
            .transform(utf8.decoder)
            .transform(json.decoder)
            .expand((e) => e)
            .map((map) => MyCustomList.fromJsonMap(map))
            .pipe(sc);
      }

      @override
      void dispose() {
        super.dispose();
        streamController?.close();
        streamController = null;
      }

      @override
      Widget build(BuildContext context) { ... }
    }