【问题标题】:Firestore value returns only one valueFirestore 值仅返回一个值
【发布时间】:2020-08-22 06:04:16
【问题描述】:

每当我尝试从 Firestore 中检索数据时,只会调用一部分 你可以看到我有一个带有标题和副标题的 ListTile 现在只显示字幕中的数据,不需要空指示 但是标题需要空指示但仍然不返回字符串This is my firestore

谢谢

// ...

class SearchPage extends StatefulWidget {
  @override
  _SearchPageState createState() => _SearchPageState();
}

class _SearchPageState extends State<SearchPage> {
  TextEditingController searchController = TextEditingController();

  Future<QuerySnapshot> searchResultsFuture;

  handleSearch(String query){
    Future<QuerySnapshot> users = usersReference.where("profilename",isGreaterThanOrEqualTo: query ).getDocuments();
    setState(() {
      searchResultsFuture = users;
    });
  //searchResultsFuture = users;
  }

  clearSearch(){
    searchController.clear();
  }

  AppBar buildSearchField(){
      return AppBar(
        backgroundColor: Colors.white,
        title: TextFormField(
          controller: searchController,
          decoration: InputDecoration(
            hintText: "Search Your Friends",
            filled: true,
            prefixIcon: Icon(
              Icons.account_box,
              size: 28.0,
            ),
            suffixIcon: IconButton(
              icon: Icon(Icons.clear),
              onPressed: clearSearch,
            ),
          ),
          onFieldSubmitted: handleSearch,
        ),
      );
  }

  Container buildNoContent(){
    final Orientation orientation = MediaQuery.of(context).orientation;
    return Container(
      child: ListView(
        shrinkWrap: true,
        children: <Widget>[
          Icon(Icons.group, color: Colors.white,size: orientation == Orientation.portrait ? 400.0 : 200.0 ,),
          Text("Find Users",textAlign: TextAlign.center,style: TextStyle(color: Colors.white,fontStyle: FontStyle.italic,fontWeight: FontWeight.w600,fontSize: 65.0),),
        ],
      ),
    );
  }

  buildSearchResults() {
    return FutureBuilder(
        future: searchResultsFuture,
        builder: (context, snapshot){
          if(!snapshot.hasData){
            return circularProgress();
          }
          List<UserResult> searchResults = [];
          snapshot.data.documents.forEach((doc){
            User user = User.fromDocument(doc);
            UserResult searchResult = UserResult(user);
            searchResults.add(searchResult);
          });
          return ListView(
            children: searchResults,
          );
        }
    );
  }


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Theme.of(context).primaryColor.withOpacity(0.8) ,
      appBar: buildSearchField(),
      body: searchResultsFuture == null ? buildNoContent() : buildSearchResults(),
    );
  }
}


class UserResult extends StatelessWidget {

  final User eachUser;

  UserResult(this.eachUser);

  @override
  Widget build(BuildContext context) {
 return Container(
      color: Theme.of(context).primaryColor.withOpacity(0.7),
      child: Column(children: <Widget>[
        GestureDetector(
          onTap: ()=> print("tapped"),
          child: ListTile(
            leading: CircleAvatar(
              backgroundColor: Colors.grey,
              backgroundImage: CachedNetworkImageProvider(eachUser.url),
            ),
            title: eachUser.profileName != null ? Text(eachUser.profileName,
              style: TextStyle(color: Colors.white,fontWeight: FontWeight.bold),): 'User',
            subtitle: Text(eachUser.username,style: TextStyle(color: Colors.white),),
          ),
        ),
        Divider(
          height: 2.0,
          color: Colors.white54,
        ),
      ],),
    );
  }
}

【问题讨论】:

  • 嗨,欢迎来到 Stack Overflow。请使用代码 sn-p 发布您的代码。它是非结构化的。
  • 我的代码更新了,请看一下

标签: firebase flutter firebase-realtime-database dart google-cloud-firestore


【解决方案1】:

尝试上传更详细的代码,以便了解可能出现的问题。

我认为你应该尝试调用 setSate in

void didChangeDependencies() {
super.didChangeDependencies();
WidgetsBinding.instance.addPostFrameCallback((callback) async {
  /// logic here!
  eachUser = get data from firebase;
  after that call setState();
});

}

【讨论】:

    【解决方案2】:

    我认为问题是:

    Future<QuerySnapshot> users = usersReference.where("profilename",isGreaterThanOrEqualTo: query ).getDocuments();
    setState(() {
      searchResultsFuture = users;
    });
    

    searchResultsFuture 在用户未完成时获取价值

    【讨论】:

    • 那我该怎么办?
    猜你喜欢
    • 2015-01-19
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多