Флаттер с использованием потока в другом потоке - PullRequest
0 голосов
/ 26 мая 2020

У меня есть проект flutter, который использует firebase в качестве базы данных. Я пытаюсь получить список имен документов через поток, разбить его на наборы по 10, чтобы обойти максимум 10 сравнений для функции .where () в firebase, а затем выполнить пакетные запросы с помощью .where () и объединить их.

Известные мне проблемы:

  1. friends.length нельзя использовать в качестве числа в al oop, потому что он имеет тип future

  2. Возврат запроса firestore не может быть добавлен в список потоков по непонятным мне причинам («Тип аргумента« Запрос »не может быть назначен типу параметра« Поток ».»)

  3. .where () ожидает 1 позиционный аргумент, но я даю ему 3, хотя в документации firestore сказано, что я должен делать

  4. StreamGroup - это underfined

  Stream<List<Memo>> get memos {
    // create list of streams
    List<Stream> streams = [];
    // Get list of friend userids
    var friends = Firestore.instance.collection("users").document(userid).collection("friends").snapshots().map(_snapshotToStringList);
    // split friend userid list into chunks of 10
    for (var i = 0; i < friends.length; i += 10) {
      // query database for each chunk of 10 and add to stream list
      streams.add(Firestore.instance.collection("memos").where("userid", "in", friends.sublist(i, i+10)));
    }
    // merge and return stream list
    return StreamGroup.merge(streams);
  }

Любые советы приветствуются

1 Ответ

1 голос
/ 26 мая 2020
Stream<List<Memo>> get memos {

List<Stream> streams = [];
Firestore.instance.collection("users").document(userid).collection("friends").snapshots().map(_snapshotToStringList).listen((friends){
                for (var i = 0; i < friends.length; i += 10) {
                  // query database for each chunk of 10 and add to stream list
                  streams.add(Firestore.instance.collection("memos").where("userid", isEqualTo: friends.sublist(i, i+10)));
                }
        });


                return StreamGroup.merge(streams);
              }


use this code
...