无法将参数类型“UserResult”分配给参数类型“UserSearch”

时间:2021-02-17 08:02:06

标签: firebase flutter dart google-cloud-firestore

我正在尝试创建一个搜索功能,以帮助用户搜索其他用户。我创建了一个有状态小部件 UserSearch 和一个无状态小部件 UserResult。 UserSearch 根据 UserResult 的数据构建结果。但是,我无法在 UserSearch 中将 UserResult 作为参数传递,我也不知道为什么。任何帮助都会很棒。提前致谢

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:vibing_app/feed.dart';
import 'package:vibing_app/model/user.dart';

class UserSearch extends StatefulWidget {
  @override
  _UserSearchState createState() => _UserSearchState();
}

class _UserSearchState extends State<UserSearch> {
  final userRef = FirebaseFirestore.instance.collection('user');
  TextEditingController searchController = new TextEditingController();
  Future<QuerySnapshot> searchResults;

  handleSearch(String query)
  {
    Future<QuerySnapshot> users = userRef.where("first_name"+ "last_name", isGreaterThanOrEqualTo: query).get();
    setState(() {
      searchResults = users;
    });
  }

  clearSearch()
  {
    searchController.clear();
  }

  AppBar buildSearchField()
  {
    return AppBar(
      backgroundColor: Colors.yellow,
      title: TextFormField(
        controller: searchController,
        decoration: InputDecoration(
          hintText: "Search for a user",
          filled: true,
          suffixIcon: IconButton(
              icon: Icon(Icons.clear),
             onPressed: clearSearch,
          ),
        ),
        onFieldSubmitted: handleSearch,
      ),
    );
  }

  Container searchContainer(){
    final Orientation orientation = MediaQuery.of(context).orientation;
    return Container(
      child: Center(
        child: ListView(
          shrinkWrap: true,
          children: [
            Text("Find users...",
              textAlign: TextAlign.center,
            ),
          ],
        ),
      ),
    );
  }

  buildSearchResults()
  {
    return FutureBuilder(
      future: searchResults,
      builder: (context, snapshot){
        if(!snapshot.hasData)
          return CircularProgressIndicator();
        List<UserSearch> searchResults = [];
        snapshot.data.forEach((docu){
          AppUser user = AppUser.fromDocument(docu);
          UserResult searchResult = UserResult(user);
         searchResults.add(UserResult(user)); //This part is giving me the error

        });
        return ListView(
          children: searchResults,
        );
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: buildSearchField(),
      body:
          searchResults == null ? searchContainer(): buildSearchResults(),
    );
  }
}

class UserResult extends StatelessWidget {
  final AppUser user;
  UserResult(this.user);
  @override
  Widget build(BuildContext context) {
    return Container(
      child: Column(
        children: [
          GestureDetector(
            onTap: showUserProfile(context,profileID: user.userId),
            child: ListTile(
              leading: CircleAvatar(
                backgroundColor: Colors.yellow,
                backgroundImage: Image.network(user.photoURL).image,
              ),
              title: Text(user.firstName + " " + user.lastName),

            ),
          ),
          Divider(
            height: 2.0,
            color: Colors.white54,
          ),
        ],
      ),
    );
  }
}

1 个答案:

答案 0 :(得分:1)

这是不同的类型。您需要将 List 类型更改为 UserList

List<UserResult> searchResults = [];