我有一个颤动的移动应用程序,我希望我的用户根据他们将选择的过滤器来查询其他用户配置文件。过滤器是可选的,因此如果用户未选择任何用户配置文件,则查询将返回系统中的所有用户配置文件。
以下是我的用户模型架构:
class UserProfile extends Model {
static const classType = const _UserProfileModelType();
final String id;
final String Country;
final String Username;
final List<String> InterestList;
final List<String> LanguageList;
国家、兴趣和语言的列表来自数据库,因此用户没有免费的输入字段,但我很想知道如何进行查询,所以如果用户选择一个国家而不是语言,过滤器被正确执行。
该文档解释了如何创建复合查询,但假设正在查询所有字段。
它也没有解释如何查询列表中的值(例如,如果我选择西班牙语和英语,我会在他们的语言列表中获得所有西班牙语和英语用户)。这不是我的应用程序的必备功能。
我最好的尝试是做这样的事情:
var query = UserProfile.USERID.ne(loggedUser.userId);
var compositeQuery;
if(_selectedCountry != null) {
compositeQuery = query.and(UserProfile.COUNTRY.eq(_selectedCountry))
}
/* Rest of code not included for brevity, imagine two for-loops with all the selected languages and interests */
Amplify.DataStore.query(UserProfile.classType, where: compositeQuery != null ? compositeQuery: query);
很确定一定有更好的方法。还是我必须将所有用户带到应用程序,然后使用常规飞镖列表功能进行过滤?
谢谢!