由于 Dart 中的 Null 安全问题,无法构建我的项目
Failing to build my project due to Null safety issues in Dart
我已经离开 Flutter 和 Dart 一个月了,但是当我看到 Flutter 2 发布时,我决定更新我的一个 Flutter 项目。一切都超级酷,我就是喜欢 Flutter 和 Dart。
现在我 运行 遇到了空安全问题。
Dart 正在编译一个方法,我在构建项目时得到了。
Error: A non-null value must be returned since the return type 'String' doesn't allow null.
它抱怨的方法
static String _fmt(String fmt, Object? val, int maxlen) {
if (null == val) {
return '';
}
// -- Ad support for thousand separators. --
if (fmt.startsWith('%,') && fmt.endsWith('d')) {
int i = val as int;
val = i.toThousandString(',');
fmt = '%${fmt.substring(2, fmt.length - 1)}s';
}
String s = sprintf(fmt, [val]);
// -- Truncate if text overflows. --
if (s.length > maxlen) {
s = s.substring(0, maxlen);
if (s.length > 1) {
return s.substring(0, s.length - 2) + '..';
} else if (s.length > 0 ) {
return s.substring(0, s.length - 1) + '.';
}
} else {
return s;
}
}
代码很丑陋,但除此之外我看不到此方法中的任何内容 return null。
还是我傻?
你的问题是不是你所有的代码路径 return 一个值:
if (s.length > maxlen) {
s = s.substring(0, maxlen);
if (s.length > 1) {
return s.substring(0, s.length - 2) + '..';
} else if (s.length > 0 ) {
return s.substring(0, s.length - 1) + '.';
}
// Nothing will be explicitly returned if control flow reaches here.
} else {
return s;
}
以前这意味着 隐式地 returning null
。在那里添加一个 return 值或调整您的逻辑,以便覆盖所有可能的路径。
(现在,maxlen
可能被期望为非负数,这使得在实践中不可能达到该控制路径,但分析器无法知道这一点。)
我已经离开 Flutter 和 Dart 一个月了,但是当我看到 Flutter 2 发布时,我决定更新我的一个 Flutter 项目。一切都超级酷,我就是喜欢 Flutter 和 Dart。
现在我 运行 遇到了空安全问题。
Dart 正在编译一个方法,我在构建项目时得到了。
Error: A non-null value must be returned since the return type 'String' doesn't allow null.
它抱怨的方法
static String _fmt(String fmt, Object? val, int maxlen) {
if (null == val) {
return '';
}
// -- Ad support for thousand separators. --
if (fmt.startsWith('%,') && fmt.endsWith('d')) {
int i = val as int;
val = i.toThousandString(',');
fmt = '%${fmt.substring(2, fmt.length - 1)}s';
}
String s = sprintf(fmt, [val]);
// -- Truncate if text overflows. --
if (s.length > maxlen) {
s = s.substring(0, maxlen);
if (s.length > 1) {
return s.substring(0, s.length - 2) + '..';
} else if (s.length > 0 ) {
return s.substring(0, s.length - 1) + '.';
}
} else {
return s;
}
}
代码很丑陋,但除此之外我看不到此方法中的任何内容 return null。
还是我傻?
你的问题是不是你所有的代码路径 return 一个值:
if (s.length > maxlen) {
s = s.substring(0, maxlen);
if (s.length > 1) {
return s.substring(0, s.length - 2) + '..';
} else if (s.length > 0 ) {
return s.substring(0, s.length - 1) + '.';
}
// Nothing will be explicitly returned if control flow reaches here.
} else {
return s;
}
以前这意味着 隐式地 returning null
。在那里添加一个 return 值或调整您的逻辑,以便覆盖所有可能的路径。
(现在,maxlen
可能被期望为非负数,这使得在实践中不可能达到该控制路径,但分析器无法知道这一点。)