如何解决Dart Flutter:为函数指定数据类型
这是一个没有错误的函数,它使用String
和具有常规返回类型Function
的{{1}}:
T
据我所知,我很难缠住 Stream<List<T>> _collectionStream<T>({
@required String path,@required T builder(Map<String,dynamic> map),}) {
final jobsCollection = _instance.collection(path);
final jobsSnapshots = jobsCollection.snapshots();
return jobsSnapshots.map((snapshot) => snapshot.docs
.map((document) => builder(document.data()))
.toList());
}
部分,这意味着它需要一个通用类型_collectionStream<T>
的变量吗?如果是这样,它也需要一个T
变量,但是当我将其添加到String
时会出现异常(见下文):
_collectionStream<String,T>
问题是 final jobsCollection = _instance.collection(path); //HERE: The argument type 'String' can't be assigned to the parameter type 'String'.
final jobsSnapshots = jobsCollection.snapshots();
return jobsSnapshots.map((snapshot) => snapshot.docs
.map((document) => builder(document.data())) // HERE: The argument type 'Map<String,dynamic>' can't be assigned to the parameter type 'Map<String,dynamic>'.
.toList());
中的String引用了<String,T>
方法中的path
参数,我想写_collectionStream
来引用这两个参数该方法需要,我没有创建一个名为String的新类。还是我使用<String,T>
语法不正确?
感谢您向我解释为什么会出现此错误,请帮助我理解method<TypeOne,TypeTwo>({varOne,varTwo})
语法及其含义。
这是我尝试运行该应用程序时的错误日志:
_collectionStream<intOrWhatever>
解决方法
在您的项目中,有一个重复的类String
。它可能在另一个项目中,但是从包路径来看,它似乎是您创建的。该类将在导入该文件的项目中的任何地方与内置String
类产生阴影并发生冲突。
要解决冲突,您需要将String
类重命名为没有冲突的内容(例如DatabaseString
),或使用前缀导入该文件:
import 'package:time_tracking_andrea_udemy_project/services/database.dart' as db;
// elsewuere
final s = new db.String();
我建议第一种选择。通常,不要为您的内容命名,以免与项目中的其他内容(尤其是核心Dart库中的其他内容)冲突。这只是乞求遇到这样的碰撞错误。
,括号中的类型,
正确的函数,括号中只有一个 T,意味着你的函数的每个调用点在编译时选择一个静态类型 T,使函数调用具有正确的类型,给定参数类型和预期的返回值类型,并使用在函数定义中出现 T 时使用的静态类型调用函数的实现。
当您添加第二个类型变量
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。