flutter/飞镖 : StatefulWidget - access class variable inside Widget

标签 flutter static

我为 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
      ),
    );
  }
}

在此先感谢您的帮助!

最佳答案

注意: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();
}

然后,在 State 内部,您可以将其用作 widget.someString:

class _MyClassState extends State<MyClass> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('${widget.someString} is accessed here?!')),
    );
  }
}

2。如果 someString 会改变

应该在状态中定义。

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'),
        ),
      ),
    );
  }
}

enter image description here

关于 flutter/飞镖 : StatefulWidget - access class variable inside Widget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66217240/

相关文章:

node.js - 静态 Web 应用程序的服务器

java - java中的常量含义

static - TypeScript:访问类的静态方法

android - 每个类在 C 代码 (NDK) 中为自己创建静态字段

flutter - 如何为动画中的主题切换添加动画?

flutter - RangeError(索引):无效值:有效值范围为空:接触时 flutter 为0

flutter - 无法在macOS Catalina 10.15.4上安装dart

javascript - 在 javascript 中使用原型(prototype)模式实现静态、私有(private)成员

json - Dart 的解析问题 - [无构建值 ^ 可序列化 ^ ]

dart - 如何从 Flutter 检查设备操作系统版本?