Flutter - 不可为 null 的局部变量 'newTaskTitle' 必须先赋值才能使用
Flutter - The non-nullable local variable 'newTaskTitle' must be assigned before it can be used
您好,我收到了这个错误 - “不可为 null 的局部变量 'newTaskTitle' 必须先赋值才能使用。(文档)尝试给它一个初始化表达式,或确保它已赋值在每条执行路径上。”在构建我的 flutter 应用程序时。我正在学习于安琪的udemy课程。
class AddTaskScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
late String newTaskTitle;
return Container(
color: const Color(0xff757575),
child: Container(
padding: const EdgeInsets.all(25),
decoration: const BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20),
topRight: Radius.circular(20),
),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
const Text(
'Add task',
textAlign: TextAlign.center,
style: TextStyle(color: Colors.lightBlueAccent, fontSize: 30.0),
),
TextField(
autofocus: true,
textAlign: TextAlign.center,
onChanged: (newText) {
newTaskTitle = newText;
},
),
const SizedBox(height: 20),
TextButton(
child: const Text(
'Add',
style: TextStyle(color: Colors.white),
),
style: TextButton.styleFrom(
backgroundColor: Colors.lightBlueAccent,
),
onPressed: () {
print(newTaskTitle);
},
),
],
),
),
);
}
}
如果我将 String newTaskTitle 设置为 - late String newTaskTitle
late String newTaskTitle;
当我打印 'newTaskTitle' 变量时显示以下错误- "======== Exception caught by gesture ================ ===============================================
处理手势时抛出以下 LateError:
LateInitializationError: 本地 'newTaskTitle' 尚未初始化。"
这是我在 Whosebug 上的第一个 post,非常感谢您的帮助!
这个错误告诉你到底是什么问题。
您是说您将在 'later' 时间初始化 newTaskTitle
的值,但这必须在您使用它之前。通常您使用 late
变量初始化,因为您需要将一些数据传递到对象或小部件中以对其进行初始化。
late String newTaskTitle;
我可以在 TextField
小部件中看到,当文本更改时,您将其分配给 newTaskTitle
。
TextField(
...
onChanged: (newText) {
newTaskTitle = newText;
},
),
如果您先更改 TextField
文本,然后按 TextButton
您应该看不到错误。
您也可以尝试在创建变量时只提供一个默认值
String newTaskTitle = '';
我总是建议,如果您是 Dart 的新手并且 null-safety,请完成此代码实验室,这将为您省去很多麻烦:https://dart.dev/codelabs/null-safety
您好,我收到了这个错误 - “不可为 null 的局部变量 'newTaskTitle' 必须先赋值才能使用。(文档)尝试给它一个初始化表达式,或确保它已赋值在每条执行路径上。”在构建我的 flutter 应用程序时。我正在学习于安琪的udemy课程。
class AddTaskScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
late String newTaskTitle;
return Container(
color: const Color(0xff757575),
child: Container(
padding: const EdgeInsets.all(25),
decoration: const BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20),
topRight: Radius.circular(20),
),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
const Text(
'Add task',
textAlign: TextAlign.center,
style: TextStyle(color: Colors.lightBlueAccent, fontSize: 30.0),
),
TextField(
autofocus: true,
textAlign: TextAlign.center,
onChanged: (newText) {
newTaskTitle = newText;
},
),
const SizedBox(height: 20),
TextButton(
child: const Text(
'Add',
style: TextStyle(color: Colors.white),
),
style: TextButton.styleFrom(
backgroundColor: Colors.lightBlueAccent,
),
onPressed: () {
print(newTaskTitle);
},
),
],
),
),
);
}
}
如果我将 String newTaskTitle 设置为 - late String newTaskTitle
late String newTaskTitle;
当我打印 'newTaskTitle' 变量时显示以下错误- "======== Exception caught by gesture ================ =============================================== 处理手势时抛出以下 LateError: LateInitializationError: 本地 'newTaskTitle' 尚未初始化。"
这是我在 Whosebug 上的第一个 post,非常感谢您的帮助!
这个错误告诉你到底是什么问题。
您是说您将在 'later' 时间初始化 newTaskTitle
的值,但这必须在您使用它之前。通常您使用 late
变量初始化,因为您需要将一些数据传递到对象或小部件中以对其进行初始化。
late String newTaskTitle;
我可以在 TextField
小部件中看到,当文本更改时,您将其分配给 newTaskTitle
。
TextField(
...
onChanged: (newText) {
newTaskTitle = newText;
},
),
如果您先更改 TextField
文本,然后按 TextButton
您应该看不到错误。
您也可以尝试在创建变量时只提供一个默认值
String newTaskTitle = '';
我总是建议,如果您是 Dart 的新手并且 null-safety,请完成此代码实验室,这将为您省去很多麻烦:https://dart.dev/codelabs/null-safety