获取 state/variable 个其他有状态小部件

Fetch state/variable of other Stateful widgets

我想获取其他Stateful Widget的变量

比如我有SmartTagMySliderMyHomePage

三个widget

MyHomePageSmartTagMySlider

(此代码不正确只是大图像)

class _SmartTagState extends State<_SmartTagState>{
    var tagState;

class _MySliderState extends State<_MySliderState>{
    var sliderState;

class MyHomePage extends StatefulWidget {}
class _MyHomePageState extends State<MyHomePage> {
    return Row(
        children:[
        MySlider(),
        SmartTag()
        floatingActionButton: FloatingActionButton(
            onPressed: (){
                print(MySlider.sliderState)//  I want to get the variable fron another widget.
                print(SmartTag.tagState)//  I want to get the variable fron another widget.
            },
            tooltip: 'Increment',
            child: const Icon(Icons.add),
        ), 
    ]
    )
}

我想做的是,在按下按钮时获取其他小部件变量。

所以,我有一些问题。

  1. 有没有办法从 _MyHomePageState 获取其他小部件(SmartTagMySlider)变量?
  2. _MyHomePageState 应该从头开始有所有变量? (但是当代码又长又完整时,它就没有用了)

感谢任何帮助。

将要拉取的变量定义为静态变量并像这样使用它们

class _SmartTagState extends State<_SmartTagState>{
    static tagState;

class _MySliderState extends State<_MySliderState>{
    static sliderState;

class MyHomePage extends StatefulWidget {}
class _MyHomePageState extends State<MyHomePage> {
    return Row(
        children:[
        MySlider(),
        SmartTag()
        floatingActionButton: FloatingActionButton(
            onPressed: (){
                print(MySlider.sliderState)//  I want to get the variable fron another widget.
                print(SmartTag.tagState)//  I want to get the variable fron another widget.
            },
            tooltip: 'Increment',
            child: const Icon(Icons.add),
        ), 
    ]
    )
}

您可以将回调函数传递给您的子小部件,并在 MyHomePage:

中更新该小部件的相应变量
class MyHomePage extends StatefulWidget {
  const MyHomePage({ Key? key }) : super(key: key);

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  var tagValue = ...
  var sliderValue = ...
  @override
  Widget build(BuildContext context) {
    return Row(
        children:[
        MySlider(
          onChange: (value){
            setState(() {
              sliderValue = value;
            });
          }
        ),
        SmartTag(
          onChange: (value){
            setState(() {
              tagValue = value;
            });
          }
        )
        floatingActionButton: FloatingActionButton(
            onPressed: (){
                print(MySlider.sliderState)//  I want to get the variable fron another widget.
                print(SmartTag.tagState)//  I want to get the variable fron another widget.
            },
            tooltip: 'Increment',
            child: const Icon(Icons.add),
        ), 
    ]
    );
  }
}

您的子窗口小部件将是这样的:

class SmartTag extends StatefulWidget {
  const SmartTag({ Key? key ,required this.onChange}) : super(key: key);
  final Function(dynamic value) onChange;
  @override
  State<SmartTag> createState() => _SmartTagState();
}

class _SmartTagState extends State<SmartTag> {
  @override
  Widget build(BuildContext context) {
    return Container(
      
    );
  }
}