Flutter 在Firestore Flatter中搜索
我正在尝试为UI创建搜索栏,当我尝试什么都不搜索时,它正在发生。我把一些情况,如错误或没有发现或做什么,用户界面仍然与白色屏幕时,我搜索。我的代码有什么问题Flutter 在Firestore Flatter中搜索,flutter,google-cloud-firestore,Flutter,Google Cloud Firestore,我正在尝试为UI创建搜索栏,当我尝试什么都不搜索时,它正在发生。我把一些情况,如错误或没有发现或做什么,用户界面仍然与白色屏幕时,我搜索。我的代码有什么问题 import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flappy_search_bar/flappy_search_bar.dart'; import 'package:flutter/material.dart'; class Searchbar
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flappy_search_bar/flappy_search_bar.dart';
import 'package:flutter/material.dart';
class Searchbar extends StatefulWidget {
@override
SearchBarState createState() => SearchBarState();
}
class SearchBarState extends State<Searchbar> {
TextEditingController textEditingController = TextEditingController();
final database = Firestore.instance;
String searchString;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: Column(
children: <Widget>[
Expanded(
child: Column(
children: <Widget>[
Padding(
padding: const EdgeInsets.all(15.0),
child: Container(
child: TextField(
onChanged: (val) {
setState(() {
searchString = val.toLowerCase();
});
},
controller: textEditingController,
decoration: InputDecoration(
suffixIcon: IconButton(
icon: Icon(Icons.clear),
onPressed: () => textEditingController.clear()),
hintText: " Search name here ",
hintStyle: TextStyle(
fontFamily: 'Antra', color: Colors.blueGrey)),
),
),
),
Expanded(
child: StreamBuilder<QuerySnapshot>(
stream: (searchString == null || searchString.trim() == '')
? Firestore.instance.collection('Users').snapshots()
: Firestore.instance
.collection('Users')
.where('name', arrayContains: searchString)
.snapshots(),
builder: (context, snapshot) {
if (snapshot.hasError) {
return Text('We got an error ${snapshot.error}');
}
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return SizedBox(
child: Center(
// child: Lottie.asset('animations/loading2.json'),
),
);
case ConnectionState.none:
return Text('Oops no data present');
case ConnectionState.done:
return Text('We are done');
default:
return new ListView(
children: snapshot.data.documents
.map((DocumentSnapshot document) {
return new ListTile(
title: Text(document['Users']),
);
}).toList());
}
},
))
],
),
)
],
)));
}
}
import'包:cloud_firestore/cloud_firestore.dart';
导入“package:flappy_search_bar/flappy_search_bar.dart”;
进口“包装:颤振/材料.省道”;
类Searchbar扩展StatefulWidget{
@凌驾
SearchBarState createState()=>SearchBarState();
}
类SearchBarState扩展状态{
TextEditingController TextEditingController=TextEditingController();
最终数据库=Firestore.instance;
字符串搜索字符串;
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:容器(
子:列(
儿童:[
扩大(
子:列(
儿童:[
填充物(
填充:常数边集全部(15.0),
子:容器(
孩子:TextField(
一旦更改:(val){
设置状态(){
searchString=val.toLowerCase();
});
},
控制器:textEditingController,
装饰:输入装饰(
后缀:图标按钮(
图标:图标(图标。清除),
按下时:()=>textEditingController.clear()),
hintText:“在此搜索名称”,
hintStyle:TextStyle(
fontFamily:“Antra”,颜色:Colors.蓝灰色,
),
),
),
扩大(
孩子:StreamBuilder(
流:(searchString==null | | searchString.trim()=='')
?Firestore.instance.collection('Users').snapshots()
:Firestore.instance
.collection('用户')
.where('name',arrayContains:searchString)
.snapshots(),
生成器:(上下文,快照){
if(snapshot.hasError){
返回文本('我们得到一个错误${snapshot.error}');
}
交换机(快照.连接状态){
案例连接状态。正在等待:
返回大小框(
儿童:中心(
//子项:Lottie.asset('animations/loading2.json'),
),
);
案例连接状态。无:
返回文本(“Oops无数据存在”);
案例连接状态。完成:
返回文本(“我们完成了”);
违约:
返回新的ListView(
子项:snapshot.data.documents
.map((文档快照文档){
返回新的ListTile(
标题:文本(文档[‘用户]),
);
}).toList());
}
},
))
],
),
)
],
)));
}
}
这是Firestore:
我想按名称搜索用户,并将其添加到我的代码中,但我不知道为什么它不起作用数据库中的名称不是数组,因此必须使用equal或将名称更改为array@Merym我更改了.where('name',isEqualTo:searchString),但仍然得到了类似文本的屏幕(document['Users']),更改为文本(document.data()['name']),我在document.datayour name中遇到错误。数据库中的名称不是数组,因此必须使用equal或将名称更改为array@Merym我更改了。where('name',isEqualTo:searchString),但仍然得到了类似文本的屏幕(document['Users')),更改为文本(document.data()['name']),我在document.data处得到了错误