【发布时间】:2021-11-11 18:53:22
【问题描述】:
我想使用一个变量来访问我的 hive 数据库中的某个值: 在下面的代码中,如果我使用 myBox.getAt(i).attributeSelect 我会收到错误,因为未为框定义 attributeSelect。 如果我使用 myBox.getAt(i).test 它可以工作。我怎样才能让颤振认识到 attributeSelect 是一个变量并将值放在那里?我总共有 181 个不同的变量可供用户选择。我真的需要那么多 if 子句吗?变量是布尔值。所以我想检查索引 i 处的文档的该属性是否为真。
错误:NoSuchMethodError:'attributeSelect' 找不到方法 接收方:“HiveDocMod”实例
attributeSelect = 'test'; //value depends on user choice
Future<void> queryHiveDocs() async {
final myBox = await Hive.openBox('my');
for (var i = 0; i < myBox.length; i++) {
if (attributeSelect == 'All Documents') {
_hiveDocs.add(myBox.getAt(i)); // get all documents
//print(myBox.getAt(24).vesselId);
} else {
// Query for attribute
if (myBox.getAt(i).attributeSelect) {
_hiveDocs.add(myBox.getAt(i)); // get only docs where the attributeSelect is true
}
}
}
setState(() {
_hiveDocs = _hiveDocs;
_isLoading = false;
});
}
【问题讨论】:
-
可能您需要使用 TypeAdapter 设置您的类。 docs.hivedb.dev/#/custom-objects/generate_adapter
-
你能发布更完整的代码(理想情况下是一个最小的、可重现的例子)吗?
attributeSelect声明在哪里? -
typeadapter 是为测试等设置的。正如我所说,如果我写 myBox.getAt(i).test,它工作正常,但是用 attributeSelect = test 写 myBox.getAt(i).attributeSelect不起作用,因为它不使用该变量的值。
-
我知道您现在要做什么:您想使用
String作为属性名称。如果没有代码生成,这是不可能的。或者,您可以存储Map<String, bool>。 -
请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。
标签: flutter dart variables methods flutter-hive