flutter - 无法在 intellijIDEA 的 .dart 文件中打开 toUpperCase() 或 toLowerCase() 的实现或声明
问题描述
在 Intellij IDEA 中使用 .dart 文件单击 F12 显示声明或 Ctrl+Alt+B 显示实现不适用于方法 toUpperCase() 或 toLowerCase()
他们与roundToDouble()和round()一起工作正常
任何想法如何解决这一问题 ?
编辑:下面是youtube上可以做到的人的屏幕截图! 在此处输入图像描述
解决方案
因为String
不是作为 SDK 的一部分实现的,而是特定于运行时的(String
您在 SDK 中看到的类只是一个abstract
类)。因此,如果您正在编译为 JavaScript,您将使用另一个实现(正确地直接调用 JavaScript 中的相同方法)。
在VM中,这些String
方法被“修补”到这个类中:
https ://github.com/dart-lang/sdk/blob/ea50b03cbee9971a3e3f1cc5c832fc2dfb941654/sdk/lib/_internal/vm/lib/string_patch.dart
但如您所见:
String toUpperCase() native "String_toUpperCase";
String toLowerCase() native "String_toLowerCase";
这两个方法实际上是通过调用 C++ 实现来实现的。所以我们需要看这里:https ://github.com/dart-lang/sdk/blob/78df4ac452dd3ba69ac0c78559f6dde51eeeadb2/runtime/lib/string.cc
我们在哪里找到:
DEFINE_NATIVE_ENTRY(String_toLowerCase, 0, 1) {
const String& receiver =
String::CheckedHandle(zone, arguments->NativeArgAt(0));
ASSERT(!receiver.IsNull());
return String::ToLowerCase(receiver);
}
DEFINE_NATIVE_ENTRY(String_toUpperCase, 0, 1) {
const String& receiver =
String::CheckedHandle(zone, arguments->NativeArgAt(0));
ASSERT(!receiver.IsNull());
return String::ToUpperCase(receiver);
}
这个实现可以在这里找到:https ://github.com/dart-lang/sdk/blob/da9697feb96364360bfaedbb1c661c20bf7a4cb0/runtime/vm/object.cc#L22023
StringPtr String::ToUpperCase(const String& str, Heap::Space space) {
// TODO(cshapiro): create a fast-path for OneByteString instances.
return Transform(CaseMapping::ToUpper, str, space);
}
StringPtr String::ToLowerCase(const String& str, Heap::Space space) {
// TODO(cshapiro): create a fast-path for OneByteString instances.
return Transform(CaseMapping::ToLower, str, space);
}
CaseMapping
可以在这里找到:https ://github.com/dart-lang/sdk/blob/da9697feb96364360bfaedbb1c661c20bf7a4cb0/runtime/platform/unicode.h#L170
等等等等...... :)
推荐阅读
- ajax - 如何从 RxJS 的 ajax 中获取响应头?
- java - 复制资源在 Maven 资源插件中不起作用
- opayo - PSD2 SagePay - 什么要求
- ansible - ansible awx/tower 不接受变量中的值列表
- php - 警告:move_uploaded_file():无法将“文件”移动到“文件夹”
- django - 如何自动将对象与创建它的用户连接起来,并仅显示特定用户在 django 中创建的那些对象?
- python - 如何在 QLineEdit 中居中文本?
- firebase - Package.json 表示 firebase-functions 的过时版本
- python - 获取日期时间对象以打印为真实日期
- node.js - use copied library in another project