- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不知道在哪里调用 super.initSate()
在 flutter ?在某些代码示例中,它在开头调用,而在其他代码示例中则在结尾调用。有区别吗?
我试图用谷歌搜索,但没有找到关于这个函数调用位置的任何解释。
哪一个是正确的?
void initState() {
super.initState();
//DO OTHER STUFF
}
或者
void initState() {
//DO OTHER STUFF
super.initState();
}
最佳答案
对 mixin
来说确实很重要s(也正因为如此对你来说)
这是一个 范式 在 Flutter 框架中重写 State
中的生命周期方法时调用 super 方法.这就是为什么即使 deactivate
有一个 mustCallSuper
annotation .
此外,一些 mixin
s 期望您在函数的特定点调用这些生命周期方法的 super 方法。
这意味着您应该遵循文档并调用 super.dispose
最后您的dispose
方法因为 mixin
上 State
在框架中期望是这样的。
例如: TickerProviderStateMixin
和 SingleTickerProviderStateMixin
assert super.dispose
在末尾:
All Tickers must [..] be disposed before calling super.dispose().
AutomaticKeepAliveMixin
执行
initState
中的逻辑和
dispose
.
initState
with super.initState
和
end your dispose
with super.dispose
如果您想轻松安全,请添加
mixin
给你的
State
.
State
中覆盖的任何方法),因为框架会期望您调用文档中描述的 super 方法。
@override
void initState() {
super.initState();
// DO YOUR STUFF
}
@override
void dispose() {
// DO YOUR STUFF
super.dispose();
}
但是,对于
State
来说并不重要。 ,我将在下面解释,甚至对于 mixins,它只对从我能找到的东西判断的断言很重要——所以它不会影响你的生产应用程序。
State
没关系
super.initState
的唯一操作和
super.dispose
收下
State
类本身是
断言并且因为
assert
-statements 仅在 Debug模式下进行评估,一旦构建您的应用程序(即在生产模式下)就完全没有关系。
super.initState
和
super.dispose
做
State
,这是当你没有额外的 mixin 时将执行的所有代码。
initState
让我们看看
super.initState
中究竟执行了什么代码第一个(
source):
@protected
@mustCallSuper
void initState() {
assert(_debugLifecycleState == _StateLifecycle.created);
}
如您所见,只有一个生命周期断言,其目的是确保您的小部件正常工作。所以只要调用
super.initState
某处在你自己的
initState
,您将看到
AssertionError
如果您的小部件未按预期工作。您是否采取了一些事先行动并不重要,因为
assert
只是为了报告您的代码中的某些内容是错误的,即使您调用
super.initState
,您也会看到在你方法的最后。
dispose
dispose
方法类似(
source):
@protected
@mustCallSuper
void dispose() {
assert(_debugLifecycleState == _StateLifecycle.ready);
assert(() {
_debugLifecycleState = _StateLifecycle.defunct;
return true;
}());
}
如您所见,它还只包含处理
的断言。调试 生命周期检查。第二个
assert
这是一个很好的技巧,因为它确保
_debugLifecycleState
仅在 Debug模式下更改(因为
assert
-语句仅在 Debug模式下执行)。
super.dispose
在你自己的方法中的某个地方,如果没有 mixins 添加额外的功能,你不会失去任何值(value)。
关于flutter - 我应该在最后还是开始时调用 super.initState?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58400001/
在文档中是这样写的,但我无法理解。 Called when this object is inserted into the tree. The framework will call this me
我正在 initstate 中通过 RestAPI 创建一个企业列表。我需要使用 sharedpreference 值作为其参数之一,但是当我尝试加载数据时,sharepreference 值初始为空
看看这段代码 - 用于获取数据并显示在列表中的小部件: class _MyEventsFragmentState extends State { var events; @override
在我的应用程序中,我有一个抽屉导航,正文根据抽屉中按下的磁贴进行更新。每个类的主体都是相同的,它是一个有状态的小部件并返回一个 ListView 。对于此类的每个实例(以及每个图 block ),我需
我正在使用 initState 并遇到 Navigator 问题: I/flutter ( 5726): The following assertion was thrown building Bui
一直在学习处理flutter中的async函数。我定义了一个 async 函数,并在两个地方调用了它 1。来自 build 函数。 2.来自 initState。 当从 build 函数调用时,函数被
我想在 initState 中创建一个 TextController,然后像处理好 child 一样处理它。但出于某种原因, Controller 在 intiState 之外不可用: class _
我在 initState() 中调用异步函数,但系统实际上等待异步函数的结果。谁能告诉我为什么? 这是我的代码: import 'package:flutter/material.dart'; voi
这个问题在这里已经有了答案: Is there a way to load async data on InitState method? (14 个回答) 2个月前关闭。 Flutter - 有没有
我正在创建 TextEditingController ,并初始化它,我可以做 class _HomePageState extends State { var _controller = Tex
在多次调用的选项卡 initstate() 之间切换。 我的标签栏 A、B、C 和 D 中有 4 个标签。 情况 (1) 如果我像从选项卡 A 切换到选项卡 B 那样切换选项卡,则它工作正常。 情况
我不知道在哪里调用 super.initSate()在 flutter ?在某些代码示例中,它在开头调用,而在其他代码示例中则在结尾调用。有区别吗? 我试图用谷歌搜索,但没有找到关于这个函数调用位置的
我有以下方法: getCalendarEventList() async { print('here we go agsain'); await Firestore.instanc
我是 Flutter 的新手,遇到了一个问题。 我的应用中有一个 Feed 模型,如下所示: import 'package:uuid/uuid.dart'; class Feed { // St
在 StatefulWidget 中制作 AnimationController final 的最佳方法是什么,以下代码会出错。 final AnimationController _controll
我正在 initState(){} 中初始化一个变量: @override void initState() { getDataFromFirestore(); super.ini
我正在开发这个应用程序,您可以在其中导航到带有状态小部件的屏幕,该小部件具有在 initState() 中运行的一堆复杂函数。 由于这些功能,触发导航功能后导航到此屏幕需要将近两秒钟,即非常慢 我的代
我正在使用 Flutter 创建一个应用程序。我想从 firebase 获取数据并显示 GridView 。数据从 firebase 正确获取。 initState() 中的数据获取 但它并没有更新另
initState() 在我路由到的第一个 Widget 上被调用了两次。 我已经删除了 initState() 方法中的所有方法调用和正在完成的工作,以排除它以某种方式调用自身的任何可能性。它所做的
每次我离开一个小部件然后返回到它时,我都会收到对该小部件的 initState 方法的“n+1”次调用。 我的设置与此类似。我从小部件 A 开始,当识别到对卡片的点击时,我们执行 Navigator.
我是一名优秀的程序员,十分优秀!