这是从 Flutter 3.10.5 迁移到 3.24.5 后发生的。
我在一个类上有一个方法,它使用一个字符串,其中包含要使用的
FontWeight
的信息。基本上是这样的:
final fontWightText = `w400`;
final fontWeight = FontWeight.values.firstWhere(
(element) => element
.toString()
.endsWith(fontWeightText),
),
问题是,在发布模式下运行应用程序时,会引发
Bad state: No element
错误。如果我在调试中运行,它工作得很好。
我注意到,如果我在调试时打印 FontWeight.values.first
,我会得到 FontWeight.w100
,而在发布时我会得到 Instance of 'FontWeight'
。
我正在尝试为此找到解决方法,但我也想知道它是否可能发生在我的应用程序的其他地方,因为它只有在我运行这个新版本的 Flutter 时才会发生。
您好,欢迎来到 StackOverflow! 正如评论中指出的,
toString
的 FontWeight
实现仅返回常量值,因此问题可能出在您的配置中的某个地方。也许您需要更新 flutter、清除缓存或类似的操作:我首先添加一些 print
行,这样您就可以尝试调试发布模式下发生的情况。
我写下了一个可以在 DartPad 中运行的 MRE,这样你就可以看到最新版本的 flutter 正在按预期运行:
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
final fontWeightText = 'w400';
final fontWeight = FontWeight.values.firstWhere(
(element) {
print(element.hashCode() +' vs '+fontWeightText);
return element.toString().endsWith(fontWeightText);
},
);
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Center(
child: Column(
children: [
Text('Hello, World!'),
Text(
'Hello, World!',
style: TextStyle(fontWeight: fontWeight),
)
],
),
),
),
);
}
}