【问题标题】:Flutter object is not initialized after initStateinitState 后 Flutter 对象未初始化
【发布时间】:2019-12-05 14:33:05
【问题描述】:

我是 Flutter 新手,遇到了一个问题。

我的应用中有一个 Feed 模型,如下所示:

import 'package:uuid/uuid.dart';

class Feed {

  // Static Members
  var uuid = new Uuid();

  // Members
  String   id;
  bool     isScheduled;
  DateTime createdTime;
  DateTime feedingTime;
  String   deviceId;

  // Constructors
  Feed({this.feedingTime, this.deviceId, this.isScheduled}) {
    id = uuid.v4();
    createdTime = DateTime.now();
  }

  Feed.fromDevice(deviceId) {
    Feed(deviceId: deviceId, feedingTime: DateTime.now(), isScheduled: false);
  }
}

现在我有我的 AddFeedForm,我正在尝试在 InitState 中使用默认值进行初始化:

class _AddFeedFormState extends State<AddFeedForm> {
  // Final Members
  final _formKey = GlobalKey<FormState>();
  final List<Machine> _devices = machinesFromServer;

  // Members
  Feed _feed;

  @override
  void initState() {
    _feed = Feed.fromDevice(_devices.first.id);
    super.initState();
  }

但不知何故,在 initState 之后,_feed 参数保持为空!

有什么想法吗?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    但不知何故,在 initState 之后,_feed 参数保持为空!

    你确定是这种情况,而不是你得到一个有空字段的Feed 实例?

    您的命名构造函数似乎不正确:

    Feed.fromDevice(deviceId) {
      Feed(deviceId: deviceId, feedingTime: DateTime.now(), isScheduled: false);
    }
    

    在这里,您在命名构造函数中调用默认的 Feed 构造函数,但不对结果做任何事情 - 这是创建另一个 Feed,然后将其丢弃。命名构造函数返回的那个尚未初始化。

    你可能想要的是这个:

    Feed.fromDevice(deviceId):
      this(deviceId: deviceId, feedingTime: DateTime.now(), isScheduled: false);
    

    这使得fromDevice 构造函数调用默认构造函数来初始化实例,而不是创建另一个未使用的副本。

    另一种选择是使其成为静态方法:

    static fromDevice(deviceId) {
      return Feed(deviceId: deviceId, feedingTime: DateTime.now(), isScheduled: false);
    }
    

    在这种情况下不会有太大区别.. 构造函数看起来更好,但有时您可能会发现您想要 a) 使初始化异步(静态方法可以返回 Future&lt;Feed&gt; 但构造函数不能或 b)做更多在将参数传递给可能不太适合初始化程序调用的真实构造函数之前对其进行处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-16
      • 2011-06-18
      • 1970-01-01
      • 2013-04-05
      • 2020-10-16
      • 2013-07-04
      相关资源
      最近更新 更多