Flutter flatter/Dart:StatefulWidget-小部件内部的访问类变量
我为StatefulWidget声明了一个类变量——在下面的代码中,它是Flutter flatter/Dart:StatefulWidget-小部件内部的访问类变量,flutter,static,Flutter,Static,我为StatefulWidget声明了一个类变量——在下面的代码中,它是someString。 是否可以在build(…)-方法中使用此变量,而不将其声明为静态变量 class MyClass extends StatefulWidget { String someString; MyClass() { this.someString = "foo"; } @override _MyClassState createState() => _M
someString
。
是否可以在build(…)
-方法中使用此变量,而不将其声明为静态变量
class MyClass extends StatefulWidget {
String someString;
MyClass() {
this.someString = "foo";
}
@override
_MyClassState createState() => _MyClassState();
}
class _MyClassState extends State<MyClass> {
_MyClassState();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("someString - how to access it here?!"),
// title: Text(someString), is not possible, obviously
),
);
}
}
class MyClass扩展StatefulWidget{
字符串;字符串;
MyClass(){
this.someString=“foo”;
}
@凌驾
_MyClassState createState()=>\u MyClassState();
}
类MyClassState扩展了状态{
_MyClassState();
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“someString-如何在此处访问它?!”),
//标题:文本(someString),显然是不可能的
),
);
}
}
提前感谢您的帮助 注意:
MyClass
应该是不可变的
1.如果someString
永远不会改变
将其保存在MyClass中,但将其定义为final
class MyClass extends StatefulWidget {
final String someString;
const MyClass({Key key, this.someString = 'foo'}) : super(key: key);
@override
_MyClassState createState() => _MyClassState();
}
然后,在状态内部,您可以将其用作小部件。someString
:
class _MyClassState extends State<MyClass> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('${widget.someString} is accessed here?!')),
);
}
}
您可以像下面这样直接访问它
文本(widget.someString)代码>谢谢,蒂埃里,这非常有帮助!如果某个字符串将更改-如何通过构造函数将其传递到状态?它是在MyClass
小部件中更改还是仅从小部件树中的祖先更改?在MyClass
小部件中。MyClass(初始值:'Azerty')
class MyClass extends StatefulWidget {
final String initialValue;
const MyClass({Key key, this.initialValue = 'foo'}) : super(key: key);
@override
_MyClassState createState() => _MyClassState();
}
class _MyClassState extends State<MyClass> {
String someString;
@override
void initState() {
someString = widget.initialValue;
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('$someString is accessed here?!')),
body: Center(
child: OutlinedButton(
onPressed: () => setState(() => someString = 'NEW Value'),
child: Text('Update value'),
),
),
);
}
}