按用户名搜索用户?
Searching user by username?
我正在尝试按用户名搜索用户,但出现错误,也许任何人都可以提供帮助。
我想这样搜索
class MyprofilTile extends StatelessWidget {
final myprofil profile;
Future getusers()async{
var firestore= FirebaseFirestore.instance;
QuerySnapshot qn = await firestore.collection('meinprofilsettings').get();
return qn.docs.where((p) => p.startsWith(query)).toList();
}
MyprofilTile({this.profile});
@override
Widget build(BuildContext context) {
return Container(
child:FutureBuilder(
future:getusers(),
builder: (_,snapshot){
if(snapshot.connectionState ==ConnectionState.waiting){
return Center(
child: Container(
child: CircularProgressIndicator()),
);
}else{
return ListView.builder(itemCount: snapshot.data.length, itemBuilder: (_,index){
return ListTile(
title:Text(snapshot.data[index].data()['username']),
);
}
);
所以在上面的 Future 方法中,我正在尝试搜索,在这里我返回了整个 class
class DataSearch extends SearchDelegate<String> {
@override
List<Widget> buildActions(BuildContext context) {
// actions fro app bar
return [IconButton(icon: Icon(Icons.clear), onPressed: () {query = "";
},),];
}
@override
Widget buildLeading(BuildContext context) {
// leading icon on the left of the app bar
return IconButton(
icon: AnimatedIcon(
icon: AnimatedIcons.menu_arrow,
progress: transitionAnimation,
),
onPressed: () {
close(context, null);});
}
@override
Widget buildResults(BuildContext context) {
// show some result based on the selection
return Container();
}
@override
Widget buildSuggestions(BuildContext context,{String url, username, email, uid, receiperid}) {
// show when someone searches for something
return MyprofilTile();
}
}
我想要的是,如果用户喜欢点击 S 获取第一个字母为 S 的所有用户,然后点击 Sp 获取名称前 2 个字母包含 Sp 的所有用户,依此类推。并且也对 uppercases 做出反应。因此,如果用户点击 S 或 s 应该无关紧要。
错误是这样的:没有为类型 documetnsnapshot 定义方法 'startsWith'。还有未定义的名称查询,
您必须在属性用户名中搜索而不是在整个文档中搜索
Future getusers()async{
var firestore= FirebaseFirestore.instance;
QuerySnapshot qn = await firestore.collection('meinprofilsettings').get();
return qn.docs.where((p) => p.data()['username'].toString().startsWith(query)).toList();
}
更新你的构造函数
class MyprofilTile extends StatelessWidget {
final myprofil profile; final String query; // add this
MyprofilTile({this.query}`); //update this`
并在您的 class DataSearch
@override
Widget buildSuggestions(BuildContext context,{String url, username, email, uid, receiperid}) {
// show when someone searches for something
return MyprofilTile(query: query);
}
我正在尝试按用户名搜索用户,但出现错误,也许任何人都可以提供帮助。 我想这样搜索
class MyprofilTile extends StatelessWidget {
final myprofil profile;
Future getusers()async{
var firestore= FirebaseFirestore.instance;
QuerySnapshot qn = await firestore.collection('meinprofilsettings').get();
return qn.docs.where((p) => p.startsWith(query)).toList();
}
MyprofilTile({this.profile});
@override
Widget build(BuildContext context) {
return Container(
child:FutureBuilder(
future:getusers(),
builder: (_,snapshot){
if(snapshot.connectionState ==ConnectionState.waiting){
return Center(
child: Container(
child: CircularProgressIndicator()),
);
}else{
return ListView.builder(itemCount: snapshot.data.length, itemBuilder: (_,index){
return ListTile(
title:Text(snapshot.data[index].data()['username']),
);
}
);
所以在上面的 Future 方法中,我正在尝试搜索,在这里我返回了整个 class
class DataSearch extends SearchDelegate<String> {
@override
List<Widget> buildActions(BuildContext context) {
// actions fro app bar
return [IconButton(icon: Icon(Icons.clear), onPressed: () {query = "";
},),];
}
@override
Widget buildLeading(BuildContext context) {
// leading icon on the left of the app bar
return IconButton(
icon: AnimatedIcon(
icon: AnimatedIcons.menu_arrow,
progress: transitionAnimation,
),
onPressed: () {
close(context, null);});
}
@override
Widget buildResults(BuildContext context) {
// show some result based on the selection
return Container();
}
@override
Widget buildSuggestions(BuildContext context,{String url, username, email, uid, receiperid}) {
// show when someone searches for something
return MyprofilTile();
}
}
我想要的是,如果用户喜欢点击 S 获取第一个字母为 S 的所有用户,然后点击 Sp 获取名称前 2 个字母包含 Sp 的所有用户,依此类推。并且也对 uppercases 做出反应。因此,如果用户点击 S 或 s 应该无关紧要。
错误是这样的:没有为类型 documetnsnapshot 定义方法 'startsWith'。还有未定义的名称查询,
您必须在属性用户名中搜索而不是在整个文档中搜索
Future getusers()async{
var firestore= FirebaseFirestore.instance;
QuerySnapshot qn = await firestore.collection('meinprofilsettings').get();
return qn.docs.where((p) => p.data()['username'].toString().startsWith(query)).toList();
}
更新你的构造函数
class MyprofilTile extends StatelessWidget {
final myprofil profile; final String query; // add this
MyprofilTile({this.query}`); //update this`
并在您的 class DataSearch
@override
Widget buildSuggestions(BuildContext context,{String url, username, email, uid, receiperid}) {
// show when someone searches for something
return MyprofilTile(query: query);
}