Flutter-在初始化程序中使用类成员在哪里合适



我正在编写一个有状态的flutter小部件。这个小部件采用3个url作为构造函数属性。

class AvatarWithOverlay extends StatefulWidget {
final githubURL;
final linkedinURL;
final twitterURL;
AvatarWithOverlay({this.githubURL, this.linkedinURL, this.twitterURL});
@override
_AvatarWithOverlayState createState() => _AvatarWithOverlayState();
}

在这种状态下,我试图利用这些值来构建启动url的按钮。

class _AvatarWithOverlayState extends State<AvatarWithOverlay>
with SingleTickerProviderStateMixin {
_AvatarWithOverlayState();
AnimationController controller;
List<Widget> buttons;
final multipliers = [Offset(.5, 1.0), Offset(1.0, .6), Offset(1.0, 0)];
var animating = false;
@override
void initState() {
super.initState();
controller = AnimationController(
vsync: this, duration: Duration(milliseconds: 1000));
buttons = [
buildButton(widget.githubURL),
buildButton(widget.linkedinURL),
buildButton(widget.twitterURL)
];
}

以上代码有效。

然而,如果我将按钮阵列定义移动到"0"之外;initState";,我收到一个编辑错误。

class _AvatarWithOverlayState extends State<AvatarWithOverlay>
with SingleTickerProviderStateMixin {
_AvatarWithOverlayState();
AnimationController controller;
var buttons = [
buildButton(widget.githubURL),
buildButton(widget.linkedinURL),
buildButton(widget.twitterURL)
];

上面的代码产生错误:;implicit_this_referenced_in_initializer">

";initState";错误不存在?

在Dart中,您不能访问初始化器中的实例成员,即不允许将代码直接放入类定义中。当您将按钮数组定义放在"initState"之外时,您正试图这样做。在Dart中,创建对象时,变量分两步设置。在初始化步骤中同时在类中定义所有变量。接下来运行构造函数代码。这就是为什么在声明另一个变量时不能指向类定义中的其他变量的原因,因为其他变量尚未存在。而当您在"initState"函数中定义按钮列表时,所有变量现在都已定义并存在。

最新更新