如何从其他类更改有状态窗口小部件类中的值?

时间:2020-04-10 21:59:55

标签: flutter dart

我有一个有状态的小部件LetterButton()

@override
  Widget build(BuildContext context) {
    return RaisedButton(
      child: Text(widget.caption),
      onPressed: onChanged,
      color: colors[currentIndex],
      padding: EdgeInsets.fromLTRB(10, 10, 10, 10),
    );
  }

在我的main.dart文件中,我声明了一个LetterButtons数组

  List<LetterButton> buttonArray;

我在initState()期间通过方法初始化并填充

void makeButtons() {
    for (var letter in alphabet) {
      buttonArray.add(
        LetterButton(letter),
      );
    }
  }

然后,列表中的按钮将显示在用户界面中

Wrap(
     children: buttonArray,
   )

如何更改currentIndex(在 int)还是通过main.dart将所有按钮更改为相同颜色?

注意:我几天前问a similar question,但答案有点超出我目前的知识,我在SO上对类似Q的回答也是如此。我对回调有一点了解,并且对提供程序包做了一些试验,但是在线提供了各种各样的答案和信息,我什至不知道自己不知道能够回答我的问题的地方: -)

2 个答案:

答案 0 :(得分:0)

创建具有状态作为公共访问权限的有状态小部件,以便您可以在包外部进行访问并为构造函数提供密钥。这样您就可以引用键并获取可以更改值的状态。请参见以下示例

class LetterButton extends StatefulWidget {
  LetterButton({GlobalKey key}) : super(key: key);

  @override
  LetterButtonState createState() => LetterButtonState();
}

class LetterButtonState extends State<LetterButton> {
  int value = 0;

  //this public method is to update int value
  setValue(int value) {
    setState(() {
      this.value = value;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Text(value.toString()),
    );
  }
}



//In Main.dart
GlobalKey<LetterButtonState> _buttonStateKey = GlobalKey();

//while creating widget
LetterButton(key:_buttonStateKey)

//in onTapCallback you can call to update value
_buttonStateKey.currentState?.setValue(10);

答案 1 :(得分:0)

只需按参数将创建的函数发送到新类,并且新类应与Function l配合使用,那么您可以从新类中调用该函数。