StatefulWidget flutter 中的这个 widget 属性是什么

问题描述 投票:0回答:3

我有时会看到类似的东西:

widget.title
widget.(anything)
颤动;就像 AppBar Widget 的
Text widget child
中的示例一样:

class MyApp extends StatefulWidget{
    // some declarations here
    @override
    _MyApp createState() => _MyApp();
}

class _MyApp extends State<MyApp>{
   // some declaration here
    @override
    Widget build(BuildContext context){

        return MaterialApp(
            home: Scaffold(
               appBar: AppBar(child: Text(widget.title),),
            ),
        );
    }
}

这实际上是什么

widget.title


我的意思是,
widget
 引用是什么?它是什么?

android inheritance flutter frameworks
3个回答
1
投票

MyApp

类扩展了StatefulWidget,这意味着该小部件存储可变状态。当 MyApp 小部件首次插入树中时,框架调用 
createState()
 函数来创建 
_MyAppState
 的新实例,以与树中的该位置关联。 (请注意,State 的子类通常以前导下划线命名,以表明它们是私有实现细节。)当此小部件的父级重建时,父级会创建 
MyApp
 的新实例,但框架会重用该 
_MyAppState
 实例,即已经在树中了,而不是再次调用 createState。

要访问当前

MyApp

 的属性,
_MyAppState
 可以使用其 
widget property
。如果父级重建并创建新的 
MyApp
,则 
_MyAppState
 将使用新的小部件值进行重建。如果您希望在小部件属性更改时收到通知,请覆盖 
didUpdateWidget()
 函数,该函数作为 oldWidget 传递,以便您将旧小部件与当前小部件进行比较。

现在按照文档:

小部件属性

该属性在调用之前由框架初始化 初始化状态。如果父级将树中的此位置更新为新的 具有与当前相同的runtimeType和Widget.key的小部件 配置时,框架将更新此属性以引用 新的小部件,然后调用 didUpdateWidget,传递旧的 配置作为参数。

参考链接


1
投票
长答案短

您已经延长了

State

课程。

State
 类有一个名为 
readonly
widget
属性。这就是你所指的。


0
投票
当您检查 State 类引用时,您会发现:

abstract class State<T extends StatefulWidget> with Diagnosticable { get widget => _widget!; T? _widget; }
在此上下文中,

T表示 State 类的类型参数,它是您的自定义小部件类。因此,状态类中的小部件属性是自定义小部件类的实例

让我们考虑 BiggerText 小部件的示例:

class BiggerText extends StatefulWidget { final String text; const BiggerText({Key? key, required this.text}) : super(key: key); @override State<BiggerText> createState() => _BiggerTextState(); } class _BiggerTextState extends State<BiggerText> { double _textSize = 16.0; @override Widget build(BuildContext context) { return Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text(**widget.text**, style: TextStyle(fontSize: _textSize)), ], ); } }
基于上面的例子

State<BiggerText> createState() => _BiggerTextState();
将返回 _BiggerTextState 类的实例
其中实例使用 BiggerText 类作为类型参数扩展了 State 类

当你再次看到State类时

abstract class State<**T** extends StatefulWidget> with Diagnosticable { get widget => _widget!; Q? _*widget*; }
T(State类的类型参数)代表BiggerText类。因此,

widget是BiggerText类的对象或实例,允许_BiggerTextState通过状态类中的widget属性访问BiggerText小部件的属性,状态类是BiggerText类本身的实例。

© www.soinside.com 2019 - 2024. All rights reserved.