Ссылка на документ Flutter Firebase / Firestore для представления списка будущего разработчика - PullRequest
0 голосов
/ 09 декабря 2018

Только что начал использовать Firestore и Flutter и пытался перенести элементы моего документа из Firestore в ListView и столкнулся с ошибками.Вот моя структура данных:

Firestore Data Structure

и вот мой код для этой страницы.

import 'package:flutter/material.dart';
import 'package:async/async.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter_firestore_test/ui/restaurantDetail.dart';

class RestaurantList extends StatefulWidget {

  final String title;
  final String director;
  RestaurantList({Key key,this.title, this.director}) : super(key: key);



  @override
  _RestaurantListState createState() => _RestaurantListState();
}

class _RestaurantListState extends State<RestaurantList> {

  Future getList() async{
    var firestore = Firestore.instance;

    DocumentReference docRef = firestore.collection('Restaurant').document('Test');
    var data;
    docRef.get().then((datasnapshot){
      if(datasnapshot.exists){
        data = datasnapshot.data['Locations'];
      }
    });
    return data;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('${widget.title}'),
        centerTitle: true,
        backgroundColor: Colors.blueGrey,
      ),
      body: new Container(
        child: FutureBuilder(
            future: getList(),
            builder: (_, snapshot){
              if(snapshot.connectionState == ConnectionState.waiting){
                return CircularProgressIndicator();
//                return Center(
//                  child: Text("Loading..."),
//                );
              }else{
                return ListView.builder(
                    itemCount: snapshot.data.length,
                    itemBuilder: (_, index){
                      if(snapshot.data[index].data["title"]==true){
                        return ListTile(
                          title: new Center(child: Text(snapshot.data[index].data["name"],
                            style: TextStyle(fontSize: 25.0),),),
                        );
                      }else if(snapshot.data[index].data["title"]==false) {
                        return ListTile(
                          title: Text(snapshot.data[index].data["name"],
                          style: TextStyle(
                              fontWeight: FontWeight.w500,
                              color: Colors.black),
                          ),
                          subtitle: Text('Insert Type of food?',
                          style: TextStyle(
                            color: Colors.grey),
                          ),
                          onTap: (){
                            Navigator.push(
                                context,
                                MaterialPageRoute(builder: (context)=> RestaurantDetail())
                            );
                          },
                        );
                      }
                    });
            }}),
      ),
    );
  }
}

В моем документе с данными у меня есть поле заказа и поле заголовка на карте по причинам внешнего вида.Порядок - это порядок, в котором я хочу, чтобы данные были в алфавитном порядке по умолчанию в Firestore.Титул bool - это так, данные Центров просмотра списка, которые считаются заголовком в списке и делают его таким, чтобы его нельзя было использовать.

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

1 Ответ

0 голосов
/ 09 декабря 2018

есть функция сортировки, встроенная в firestore, есть метод orderBy(field), который вы можете использовать для сортировки данных.подробнее см. https://firebase.google.com/docs/firestore/query-data/order-limit-data

, вам необходимо отредактировать эту строку

DocumentReference docRef = firestore.collection('Restaurant').document('Test');

до

DocumentReference docRef = firestore.collection('Restaurant').orderBy('order').document('Test');

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