首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何减少云防火墙的读取?

如何减少云防火墙的读取?
EN

Stack Overflow用户
提问于 2021-02-19 14:04:50
回答 1查看 592关注 0票数 1

我有一个搜索栏,它接收来自用户的查询字符串,如果查询字符串是空的,就像我刚刚启动搜索操作一样,它获取collection...if用户开始在bar...it中键入的所有文档,然后将其与防火墙集合中的每个文档中的字段进行比较,如果它matches...its检索匹配的文档并在屏幕上预览它们,如果用户删除了类型化查询string...so,查询字符串是空的,那么它将再次获取所有文档……我使用提供程序包将查询字符串传递到数据库获取函数,如下所示:

提供商:

代码语言:javascript
复制
import 'package:flutter/foundation.dart';

class QueryStringProvider extends ChangeNotifier {
  String _queryString = '';

  String getQueryString() => _queryString;

  updateQueryString(String userQueryString) {
    _queryString = userQueryString;
    notifyListeners();
  }
}

数据库功能:

代码语言:javascript
复制
Stream<QuerySnapshot> filterAllPosts(String query) {
    return query.isEmpty
        ? _postsCollection.snapshots()
        : _postsCollection
            .where('postSubtitles', arrayContains: query)
            .snapshots();
  }

以下是包装在Consumer<QueryStringProvider>中的流生成器,Streambuilder接收从数据库获取函数检索的所有数据,并根据我喜欢的布局结构填充数据:

代码语言:javascript
复制
  @override
  Widget build(BuildContext context) {
    return Container(
      child: Consumer<QueryStringProvider>(
        builder: (context, data, _) {
          return StreamBuilder<QuerySnapshot>(
            // stream: DatabaseService().listenToAllGigs(),
            stream: DatabaseService().filterAllGigs(data.getQueryString()),
            builder: (context, snapshot) {
              return !snapshot.hasData
                  ? Center(child: Text(''))
                  : snapshot.data.documents.length > 0
                      ? ListView.builder(
                          itemCount: snapshot.data.documents.length,
                          itemBuilder: (context, index) {
                            DocumentSnapshot data =
                                snapshot.data.documents[index];
                            Map getDocData = data.data;

                            return GestureDetector(
                              child: PostItem(
                                appointed: getDocData['appointed'],
                                appointedUserFullName:
                                    getDocData['appointedUserFullName'],
                                postId: getDocData['gigId'],
                                postTitle: getDocData['postTitle'],
                                postSubtitles: getDocData['postSubtitles'],
                                postBody: getDocData['postBody'],
                                // onDeleteItem: () => model.deleteGig(index),
                              ),
                            );
                          })
                      : Center(
                          child: Text(
                          'No Posts matching your criteria',
                          style: TextStyle(fontSize: 16),
                        ));
            },
          );
        },
      ),
    );
  }

关于如何用上面的代码减少云读取,我有三个问题:

1)启动搜索操作时,当查询字符串为空时,是否存在获取所有文档的问题?

(2)当用户开始在搜索bar...does中输入时,这意味着我们正在用filtering?...or再次进行新的读取,这意味着所有已获取的数据都是用filtering?...or重新读取的--它只是过滤了我从从开始就开始搜索操作中获得的内容?

( 3)当用户删除查询字符串并取消筛选,查询字符串现在为empty...does时,这意味着每当用户键入或删除查询字符串时,我都会对云集合again...so进行一次新的完全读取,我再次遍历所有集合?*

请原谅我,如果这个问题太long...but,它更接近理论概念,而不是代码.

如有任何澄清将不胜感激..。

非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2021-02-19 15:29:02

我建议的是,只有当用户输入了一些特定数量的字符,并且所有字符都是有效的时,才会查询结果。例如,在我的例子中,我确保用户输入了至少3个字符,并且它们都是字母或数字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66279058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档