Удалить документ из стека - PullRequest
0 голосов
/ 23 октября 2019

У меня есть Stream Builder, который заполняет колоду карт:

_showCards() {
    return StreamBuilder<QuerySnapshot>(
        stream: cardReference.snapshots(),
        builder: (context, snapshot) {
          if (!snapshot.hasData) {
            return circularProgress();
          }
          return Stack(children: fillCards(snapshot));
        });
  }
fillCards(AsyncSnapshot<QuerySnapshot> snapshot) {
    return snapshot.data.documents
        .map((doc) => buildCards(
              image: doc["mediaUrl"],
              title: doc["title"],
              type: doc["description"],
            ))
        .toList();
  }

Я хочу удалить верхний снимок стека с помощью кнопки пропуска. Как я могу управлять снимками для доступа к определенному индексу?

Редактировать:

Мне нужно удалить карту из стека, а не удалить ее из базы данных,Я думаю, что я должен использовать список и использовать .removeAt (индекс), но не уверен, как добавить снимки из Firestore в список. В настоящее время у меня есть карта документов, которую вы можете увидеть в fillCards ().

Widget buildCards({image, title, type}) {
    return Column(
      children: <Widget>[
      // UI showing Image Url, title and description in a Card.
      // then I have an icon, to skip the card on top and show the one behind
         IconButton(
          icon: Icon(FontAwesomeIcons.forward,
          color: Colors.greenAccent, size: 21),
          onPressed: () => //SKIP CARD

Ответы [ 2 ]

0 голосов
/ 23 октября 2019

Кажется, вы пытаетесь пропустить любой элемент списка, полученный при нажатии кнопки пропуска элемента.

Вот несколько способов сделать это:

  • ЕслиЭтот список относится к конкретному пользователю, вы можете пометить элемент в базе данных как «пропущенный», а при отображении списка просто показать элементы, которые не «пропущены».
  • Если список можно открыть для общего доступас разными пользователями вы можете создать другой список для каждого пользователя с «пропущенными» идентификаторами. Затем покажите элементы, идентификаторы которых отсутствуют в этом «пропущенном» списке этого пользователя.
  • Если вы хотите обработать это на стороне клиента, не изменяя базу данных, вы можете создать список пропущенных идентификаторов и когдавы показываете список, просто показывает элементы, которых нет в этом «пропущенном» списке.

Вот идея для последнего варианта:

final _skippedIds = List();

// The filtered list
snapshot.data.documents.where((doc) => !_skippedIds.contains(doc["id"])).map(...

// The onTap of each skip button:
onTap: () => setState(() => _skippedIds.add(doc["id"])),

Кроме того, выможет сохранить SharedPreferences список пропущенных идентификаторов.

0 голосов
/ 23 октября 2019

Если бы вы оказались в такой ситуации, я делаю viewModel и копирую данные документов в viewModel. Затем я изменяю только viewModel для управления видами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...