Flutter 变量在颤振中突然为空
我已经在我的Flitter应用程序中实现了日期选择。然后显示所选日期,但一旦焦点改变,所选的Flutter 变量在颤振中突然为空,flutter,dart,Flutter,Dart,我已经在我的Flitter应用程序中实现了日期选择。然后显示所选日期,但一旦焦点改变,所选的DateTime对象就会毫无理由地变为null 为了存储DateTime和一些其他变量,我创建了一个对象,它作为最后一个变量存储在StatefulWidget类中。此对象还包括字符串,当日期时间为空时,这些字符串不会更改 import 'package:flutter/material.dart'; import 'package:smartyne/core/assignment.dart'; clas
DateTime
对象就会毫无理由地变为null
为了存储DateTime
和一些其他变量,我创建了一个对象,它作为最后一个变量存储在StatefulWidget
类中。此对象还包括字符串
,当日期时间
为空时,这些字符串不会更改
import 'package:flutter/material.dart';
import 'package:smartyne/core/assignment.dart';
class AssignmentPage extends StatefulWidget {
final bool editMode;
final Assignment assignment;
AssignmentPage(this.assignment, this.editMode);
@override
_AssignmentPageState createState() => _AssignmentPageState();
}
class _AssignmentPageState extends State<AssignmentPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
...
body: Padding(
padding: EdgeInsets.all(16.0),
child: Column(
children: <Widget>[
TextField(
decoration: InputDecoration(
border: OutlineInputBorder(), labelText: "Title"),
onChanged: (value) {
widget.assignment.title = value;
setState(() {});
},
),
...
SizedBox(
height: 16.0,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
MaterialButton(
child: Text(widget.assignment.deadlineAsString),
onPressed: () {
_showDatePicker();
},
),
...
],
)
],
),
));
}
void _showDatePicker() async {
final DateTime newDeadline = await showDatePicker(
context: context,
initialDate: widget.assignment.deadline == null ? DateTime.now() : widget.assignment.deadline,
firstDate: DateTime(1900),
lastDate: DateTime(2099)
);
if (newDeadline != null && newDeadline != widget.assignment.deadline) {
setState(() {
widget.assignment.deadline = newDeadline;
});
}
}
}
导入“包装:颤振/材料.省道”;
导入“package:smartyne/core/assignment.dart”;
类分配页扩展StatefulWidget{
最终布尔编辑模式;
最终任务;
AssignmentPage(this.assignment,this.editMode);
@凌驾
_AssignmentPageState createState()=>\u AssignmentPageState();
}
类_AssignmentPageState扩展State在State类中使用声明的变量,如下所示
import 'package:flutter/material.dart';
import 'package:smartyne/core/assignment.dart';
class AssignmentPage extends StatefulWidget {
@override
_AssignmentPageState createState() => _AssignmentPageState();
}
class _AssignmentPageState extends State<AssignmentPage> {
final bool editMode;
final Assignment assignment;
@override
Widget build(BuildContext context) {
return new Container();
//access it like
//Text(assignment.deadlineAsString),
//instead of
//Text(widget.assignment.deadlineAsString),
}
导入“包装:颤振/材料.省道”;
导入“package:smartyne/core/assignment.dart”;
类分配页扩展StatefulWidget{
@凌驾
_AssignmentPageState createState()=>\u AssignmentPageState();
}
类_AssignmentPageState扩展状态{
最终布尔编辑模式;
最终任务;
@凌驾
小部件构建(构建上下文){
返回新容器();
//像这样访问它
//文本(赋值.死线字符串),
//而不是
//文本(widget.assignment.deadlineAsString),
}
在这种情况下,保留AssignmentPage
StatefulWidget
的好处是什么?这是一种错误的方法:现在可以这样做了,但什么才是正确有效的解决方案呢?