【发布时间】:2021-07-17 05:59:15
【问题描述】:
我正在编写一个类型安全的构建器包来包装名为 Fireproof 的 Firestore 原语。我目前正在用我自己的自定义FireQuery.where 包装Query.where ,我希望它是完全类型安全的。 Firestore where 的函数声明为
Query where(
dynamic field, {
dynamic isEqualTo,
dynamic isNotEqualTo,
dynamic isLessThan,
dynamic isLessThanOrEqualTo,
dynamic isGreaterThan,
dynamic isGreaterThanOrEqualTo,
dynamic arrayContains,
List<dynamic>? arrayContainsAny,
List<dynamic>? whereIn,
List<dynamic>? whereNotIn,
bool? isNull,
}) {/*...*/}
但是当我围绕一个特定模型或文档生成代码时,我知道所有可能的字段及其类型,所以我不希望任何东西是动态的。但是,我想不出一种方法来利用它或函数调用的样子。
考虑到我有一个用户文档,这是一个示例
class UserDoc {
final int age;
final String city;
UserDoc(this.age, this.city);
}
还有一个用户查询:
/// Generated Code
class UserQuery implements FireQuery {
// ...
UserQuery where(
// I know the only fields possible are age and city therefore
// I want the comparators to be typed to whatever is the selected field.
//
// E.g. If the user somehow selects age, isEqualTo should be isEqualTo<String>
) {
// TODO
}
}
有什么想法可以做到这一点吗?
编辑
我弃用了该软件包,转而支持 Firestore 的原生 withConverters,并得出了相同的结论,即如果没有部分类或对 api 进行重大更改,这是不可能的
【问题讨论】:
标签: flutter google-cloud-firestore code-generation