我想做一个搜索到我的firestore项目,有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();
}
}
1条答案
按热度按时间q8l4jmvw1#
此问题似乎是由尝试读取的无效范围引起的。当迭代对象列表时,值用完时会发生此错误。您需要确定RangeError发生的位置。
如果在GridView上抛出错误,则与屏幕上预期的Widget相比,可能没有更多的数据要显示。确保Widget的项目计数与显示的List匹配。如果您只需要填充Grid中的空白区域,则可以使用
return Container();