Flutter 变量在颤振中突然为空

Flutter 变量在颤振中突然为空,flutter,dart,Flutter,Dart,我已经在我的Flitter应用程序中实现了日期选择。然后显示所选日期,但一旦焦点改变,所选的DateTime对象就会毫无理由地变为null 为了存储DateTime和一些其他变量,我创建了一个对象,它作为最后一个变量存储在StatefulWidget类中。此对象还包括字符串,当日期时间为空时,这些字符串不会更改 import 'package:flutter/material.dart'; import 'package:smartyne/core/assignment.dart'; clas

我已经在我的Flitter应用程序中实现了日期选择。然后显示所选日期,但一旦焦点改变,所选的
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
的好处是什么?这是一种错误的方法:现在可以这样做了,但什么才是正确有效的解决方案呢?