Как преобразовать метод Future в метод Stream для подачи списка

#flutter #dart

#flutter #dart

Вопрос:

У меня есть этот метод для подачи моего списка, но с его помощью я не могу динамически изменять элементы (добавлять элементы, удалять их …) :

 loadLab(String submenu, [int limit]) async {
    var parts = submenu.split('/');
    var pathSlashless = parts[0].trim();
    var subPathSlashless = parts.sublist(1).join('/').trim();

    var snapshot = await _storage.ref().child("/${submenu}");
    var retorno = await snapshot.listAll();
    List<ItemLab> conteudo = [];

    if(subPathSlashless.isEmpty || subPathSlashless == null){
      retorno.prefixes.forEach((element) {
        conteudo.add(
          ItemLab(
            tipo: 'PASTA',
            elemento: element,
          ),
        );
      });
    }
      if(limit != null){
        if(conteudo.length > limit){
          hasMore = true;
          return Stream.value(conteudo);
        }else{
          hasMore = false;
          print("menor quen ove");
        }
      }
    }

    try {
      if(subPathSlashless.isNotEmpty){
        print(subPathSlashless);
        List items;
        await databaseReference
            .collection("lab_${pathSlashless}_url")
            .snapshots().forEach((element) {
              element.docs.forEach((f) {
                if(f.data()['videos'] != null){
                    items == null ? items = f.data()['videos'] :
                    items.addAll(f.data()['videos']);
                  };
                  print("ITEMS :::: >>> ${items}");
              });
        });
    }catch(e){
      print(e);
    }

    pathSlashless = null;
    subPathSlashless = null;
    conteudo = checkDuplicateFolder(conteudo, submenu);
    print(conteudo);
    return Stream.value(conteudo);
  }
 

и список>

 return StreamBuilder(
      stream: ctrlLab.loadLab(submenu),
 

выдает эту ошибку:

тип ‘Future’ не является подтипом типа ‘Stream’

Что мне нужно сделать, чтобы вернуть поток вместо Future

Комментарии:

1. Я думаю, вам нужно вызвать .snapshots(), чтобы получить поток изменений в вашем запросе, а не .get() , который является «сообщите мне текущие значения».

2. Хорошо .. теперь каким должен быть возврат?

3. Вероятно, вам следует просто вернуть поток и извлечь то, что вам нужно, в чем-то вроде StreamBuilder ( api.flutter.dev/flutter/widgets/StreamBuilder-class.html ), или сначала выполните какое-нибудь преобразование потока в поток в этом методе, используя что-то вроде aStream.transform(…) .

4. Пожалуйста, посмотрите мое обновление