当我点击升起的按钮时,时间 Select 器出现了.例如,如果我等待5秒钟,然后确认时间,就会出现以下错误:

我确实在控制台中看到了Flatter是如何更新父窗口小部件的,但为什么呢?我什么都没做-我就等5秒钟?!

[UPDATE] 我又看了一眼,发现它正在从我的TabBarTabBarView的关卡更新. 它会不会跟我在TabBarView上需要的"with TickerProviderStateMixin"有什么关系呢?会不会是它导致应用程序定期和随机刷新?

 class DateTimeButton extends State<DateTimeButtonWidget> {
  DateTime selectedDate = new DateTime.now();

  Future initTimePicker() async {
    final TimeOfDay picked = await showTimePicker(
      context: context,
      initialTime: new TimeOfDay(hour: selectedDate.hour, minute: selectedDate.minute),
    );

    if (picked != null) {
      setState(() {
        selectedDate = new DateTime(selectedDate.year, selectedDate.month, selectedDate.day, picked.hour, picked.minute);
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return new RaisedButton(
      child: new Text("${selectedDate.hour} ${selectedDate.minute}"),
      onPressed: () {
        initTimePicker();
      }
    );
  }
}

推荐答案

在调用setState()之前,只需判断小部件的State类的布尔属性mounted即可.

if (this.mounted) {
  setState(() {
    // Your state change code goes here
  });
}

或者更干净的方法 重写StatelfulWidget类中的setState方法.

class DateTimeButton extends StatefulWidget {
  @override
  void setState(fn) {
    if(mounted) {
      super.setState(fn);
    }
  }
}

Flutter相关问答推荐

Flutter bloc -如何使用BlocBuilder?

Flutter ReorderableListView在可滚动父级中无法完美工作

自动测试Flutter应用程序进行QA的最佳方法是什么?

无法在GroupButton内部正确呈现

DART 3.3:为什么扩展类型不起作用?

IsScrollable为True时如何删除Flutter 选项卡栏左侧填充

无效参数(S):隔离消息中的非法参数:try 旋转图像时对象不可发送

我不能在Fighting中裁剪图片输入错误,否则应用程序会崩溃

分页控制器在到达页面末尾之前或在初始化页面时对每个索引调用API

如何删除使用isscllable时出现的左边距?

Flutter为什么不;没有ListView.iterable()构造函数?

Flutter Xcode 15 错误(Xcode):DT_TOOLCHAIN_DIR 无法用于判断 LIBRARY_SEARCH_PATHS

运行任何 flutter 命令都会显示无法安装 <版本>

Flutter:我应该使用哪种应用内购买服务?

如何删除或隐藏覆盖

如何删除图像边框半径与其父容器边框半径之间的空白

Flutter/Dart 返回_Future的实例而不是实际的字符串值

如何将 void 函数放入单独的 dart 文件的单独页面中

如何在 flutter 中更改日期 Select 器 colored颜色 ?

Flutter:整个判断整个应用生命周期的通用类