Flutter querysnapshot .getDocuments (). Затем не выполняет функцию - PullRequest
0 голосов
/ 19 июня 2020
• 1000 код после .then СМОТРЕТЬ ЗДЕСЬ

ОШИБКА image

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:random_color/random_color.dart';

import '../global/custom.dart';

import '../provider/prv_category.dart';

class WidgetCategories extends StatefulWidget {
  @override
  _WidgetCategoriesState createState() => _WidgetCategoriesState();
}

class _WidgetCategoriesState extends State<WidgetCategories> {

  @override
  Widget build(BuildContext context) {

    RandomColor _randomColor = RandomColor();
    // final categoryCount =
    //     Provider.of<ProviderProducts>(context).getCategoryCount() > 0;
    final isNotNull = Provider.of<ProviderProducts>(context, listen: false)
            .categories
            .categoryDocumentData !=
        null;

    final category = Provider.of<ProviderProducts>(context);
    final _categories = category.categories.categoryDocumentData;

    return !isNotNull
        ? Center(
            child: CircularProgressIndicator(),
          )
        : Container(
            height: 115,
            //width: 90,
            child: ListView.builder(
              physics: BouncingScrollPhysics(),
              itemCount: _categories.length,
              scrollDirection: Axis.horizontal,
              //padding: EdgeInsets.all(1 0.0),
              itemBuilder: (context, i) {
                return Column(
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: <Widget>[
                    Card(
                      color: _randomColor.randomColor(
                        //colorSaturation: ColorSaturation.highSaturation,
                        colorBrightness: ColorBrightness.dark,
                      ),
                      semanticContainer: true,
                      clipBehavior: Clip.antiAliasWithSaveLayer,
                      child: Column(
                        children: <Widget>[
                          Padding(
                            padding: const EdgeInsets.only(
                              top: 13,
                              left: 15,
                              right: 15,
                            ),
                            child: Image.network(
                              _categories[i]['imgPath'],
                              height: 60,
                              width: 60,
                              fit: BoxFit.fill,
                            ),
                          ),
                          Padding(
                            padding: const EdgeInsets.only(
                              bottom: 10.0,
                            ),
                            child: CustTextBody(
                              cText: _categories[i]['category_name'],
                              cTxtStyle: Theme.of(context).textTheme.headline5,
                              cTxtAlign: TextAlign.center,
                            ),
                          ),
                        ],
                      ),
                    ),
                  ],
                );
              },
            ));
  }
}

MODELCATEGORIES.dart

import 'package:cloud_firestore/cloud_firestore.dart';
//import 'package:flutter/material.dart';

class ModelCategories {
  List<Map<dynamic, dynamic>> _categoryDocumentData = [];

  // List<Map<dynamic, dynamic>> get categoryDocumentData => _categoryDocumentData;
  List<Map<dynamic, dynamic>> get categoryDocumentData {
    return [..._categoryDocumentData];
  }

  ModelCategories.fromSnapshot(QuerySnapshot snapshot) {
    _categoryDocumentData =
        snapshot.documents.map((DocumentSnapshot e) => e.data).toList();
  }
}

SERVICECATEGORIES.dart

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';

import '../model/mod_categories.dart';

class ServicesCategories {
  String collection = 'category';
  Firestore _firestore = Firestore.instance;

  Future<ModelCategories> getCategory() =>
      _firestore.collection(collection).getDocuments().then(
        (QuerySnapshot snapshot) {
          if (snapshot.documents.length == 0) {
            return null;
          }

          return ModelCategories.fromSnapshot(snapshot);
        },
      ).catchError(
        (e) => print("ERROR:::: $e"),
      );

}

мой СТЕК ВЫЗОВОВ

image

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

import '../services/serv_category.dart';
import '../model/mod_categories.dart';

class ProviderCategory with ChangeNotifier {
  ProviderCategory() {
    getCategories();
  }

  ModelCategories _categories;

  ServicesCategories _servicesCategories = ServicesCategories();

  //getter
  ModelCategories get categories => _categories;


  Future<void> getCategories() async {


    _categories = await _servicesCategories.getCategory();
    notifyListeners();

  }

  int getCategoryCount() {
    return _categories.categoryDocumentData.length;
  }
}

1 Ответ

1 голос
/ 19 июня 2020

Как вы используете SERVICECATEGORIES.dart в своей программе? Похоже, что для коллекции задана категория «категория» для всех событий, из-за чего snapshot.documents.length всегда будет иметь значение 0.

...