RangeError (index): недопустимое значение: не в диапазоне 0..1 включительно: 2 - PullRequest
0 голосов
/ 30 апреля 2020

Я хочу сделать поиск по своим предметам из пожарного магазина, которые имеют 3 поля A, B, C. когда я нажимаю на свой запрос, он показывает, что он связан с моим алфавитом, и если я не использовал прописные буквы, он также дает мне тот же результат, что и в случае прописных букв.

Мой код

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

class Serchitemsbymod extends StatefulWidget {
  static String id='serchitemsbymod';
  @override
  _SerchitemsbymodState createState() => _SerchitemsbymodState();
}

class _SerchitemsbymodState extends State<Serchitemsbymod> {



  List<String> store=[];
  var q=[];
  var t=[];

  initiateserach(value){
    if(value.length==0){
      setState(() {
        q=[];
        t=[];
      }

      );
    }
    var cp=value.substring(0,1).toUpperCase()+value.substring(1);
    if(q.length==0 && value.length==1){
      SearchService().searchByName(value).then((QuerySnapshot docs){
        for(int i=0;i <= docs.documents.length;i++){
          q.add(docs.documents[i].data);

        }
      }
      );
    }
    else{
      t=[];
      q.forEach((element){
        if(element['A'].startsWith(cp)){
          setState(() {
            t.add(element);
          });
        }
      }
      );
    };}

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Mian Traders'),
      ),
      body: ListView(
        children: <Widget>[
          Padding(padding: EdgeInsets.all(10.0),
          child: TextField(
            onChanged: (val){
              initiateserach(val);
            },
            decoration: InputDecoration(
              prefix: IconButton(icon:Icon(Icons.arrow_back),
                onPressed: (){
                Navigator.of(context).pop();
                },),
              contentPadding:   EdgeInsets.only(left: 25.0),
              hintText: 'Serach Items',
              hintStyle: TextStyle(
                fontWeight: FontWeight.w500,
                fontSize: 25.0
              ),
              border: OutlineInputBorder(
                borderRadius: BorderRadius.circular(4.0)

              )

            ),
          ),),
          SizedBox(height: 10.0,),
          GridView.count(
            padding: EdgeInsets.only(left: 10.0,right: 10.0),
            crossAxisCount: 2,
            crossAxisSpacing: 4.0,
            mainAxisSpacing: 4.0,
            primary: false,
            shrinkWrap: true,
            children:t.map((element){
              return buildResult(element);

            }).toList()),

        ]));

  }
}

Widget buildResult(data) {

  return Card(
    shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.0)),
    elevation: 2.0,
    child: Container(
      child: Center(
        child: Text(data['items'],
        textAlign: TextAlign.center,
        style: TextStyle(
          color: Colors.black,
          fontSize: 20.0,
        ),),

      ),
    ),

  );
}

и база поиска связана с другим полем, которое d (в качестве ключа для поиска). мой код класса SearchService () -

import 'package:cloud_firestore/cloud_firestore.dart';

class SearchService{
  searchByName(String searchField){
    return Firestore.instance.collection('items')
        .where('d',
        isEqualTo: searchField.substring(0,1).toUpperCase())
        .getDocuments();
  }
}
...