Flutter - Как использовать данные, полученные из FireStore, без использования SteamBuilder? - PullRequest
0 голосов
/ 28 апреля 2020

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

Я не хочу печатать ListView с StreamBuilder, просто хочу получить данные и передать на следующий экран я звоню с Navigator.push(...

Так что это мой get_news() метод, который я реализовал для получения данных:

  // get the news
  Stream<List<News>> getNews() {
    return _db.collection("news").snapshots().map(
          (snapshot) => snapshot.documents
              .map((doc) => News.fromMap(doc.data, doc.documentID))
              .toList(),
        ) ;
  }

И это мой News модель.

class News {
  final String headline;
  final String description;
  final String imageUrl;
  final String timeNews;
  final String timeDate;
  final String priority;
  String id;


  News({this.headline,this.description, this.imageUrl, this.timeNews, this.timeDate, this.priority, this.id});

  News.fromMap(Map<String,dynamic> data, String id):
    headline=data['headline'], 
    description=data['description'], 
    imageUrl=data['imageUrl'],
    timeNews=data['timeNews'],
    timeDate=data['timeDate'],
    priority=data['priority'],
    id=data['id'];

  Map<String, dynamic> toMap(){
    return {
      "headline" : headline,
      "description": description,
      "imageUrl": imageUrl,
      "timeNews": timeNews,
      "timeDate": timeDate,
      "priority": priority,
      "id": id,
    };
  }
}

Вот как я передаю его в нормальных условиях через StreamBuilder - Что я не хочу сейчас делать

Expanded(
              child: StreamBuilder(
            stream: FireStoreServiceApi().getNews(),
            builder:
                (BuildContext context, AsyncSnapshot<List<News>> snapshot) {
              if (snapshot.hasError || !snapshot.hasData) {
                return Text("Invalid");
              } else {
                return ListView.builder(
                  itemCount: snapshot.data.length,
                  itemBuilder: (BuildContext context, int index) {
                    News news = snapshot.data[index]; // this is I want to get
                    return Text("Working");
                  },
                );
              }
            },
          )),

Итак без с использованием StreamBuilder , как я могу вызвать FireStoreServiceApi().getNews() и получить объект news?

1 Ответ

0 голосов
/ 28 апреля 2020

Вместо этого вы можете использовать changeNotifier. getNews вместо того, чтобы возвращать Stream, будет обновлять список и вызывать notifyListeners. Ваш метод сборки будет прослушивать это через ChangeNotifierProvider .

Этот должен обеспечить хорошую отправную точку для реализации через changeNotifier.

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