Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter flatter/Dart:StatefulWidget-小部件内部的访问类变量_Flutter_Static - Fatal编程技术网

Flutter flatter/Dart: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

我为StatefulWidget声明了一个类变量——在下面的代码中,它是
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'),
        ),
      ),
    );
  }
}