首页 > 解决方案 > 在实际搜索发生之前在页面加载时从 Firestore 中提取的值

问题描述

我想知道为什么下面的代码会在页面加载时从 Firestore 中提取值,即使我没有输入任何搜索词。如果我开始输入匹配的搜索值,我也看不到任何结果。它现在以相反的方式工作。我希望它仅在用户输入搜索词时才从 Firestore 中提取值。请指教!

class _ConversationsState extends State<Conversations> {
  String _searchTerm ='';
  Future<void> _signOut() async {
    try {
      await FirebaseAuth.instance.signOut();
    } catch (e) {
      print(e); // TODO: show dialog with error
    }
  }
    @override
    Widget build(BuildContext context) {
      return Scaffold(
        body: Column(
          children: [
            TextFormField(
              keyboardType: TextInputType.text,
              decoration: InputDecoration(
                  border: OutlineInputBorder(), hintText: 'Search'),
              onChanged: (value) {
                setState(() {
                  _searchTerm = value.trim();
                });
              },
            ),
            StreamBuilder(
            stream: (_searchTerm != "") ? FirebaseFirestore.instance
                .collection('users')
                .where('email', arrayContains: _searchTerm )
                .snapshots() : FirebaseFirestore.instance.collection("users").snapshots(),
                builder: (ctx, snapshot) {
                  if (snapshot.connectionState == ConnectionState.waiting) {
                    return Center(
                        child: CircularProgressIndicator(),
                  );
              }
              final results = snapshot.data.docs;
                  print(results.length);
              return ListView.builder(
                shrinkWrap: true,
                itemCount: results.length,
                itemBuilder: (ctx, index) => Text(
                  results[index].data()['email'],
                  //chatDocs[index].data()['email'] == user.uid,
                ),
              );
            })
          ],
        ),
      );
    }

标签: flutterdartgoogle-cloud-firestore

解决方案


尝试在此处反转您的三元运算符

FirebaseFirestore.instance .collection('users') .where('email', arrayContains: _searchTerm ) .snapshots() : FirebaseFirestore.instance.collection("users").snapshots(),

FirebaseFirestore.instance.collection("users").snapshots() : FirebaseFirestore.instance .collection('users') .where('email', arrayContains: _searchTerm ) .snapshots()


推荐阅读