按用户名搜索用户?

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);
  }