【问题标题】:How do I access a method of the state objects for a list of stateful widgets? (Flutter)如何访问有状态小部件列表的状态对象的方法? (扑)
【发布时间】:2020-04-26 00:51:58
【问题描述】:
class Astate extends State<A>
{
   List b=new List<B>();
   @override
   Widget build(BuildContext context){

       b.add(B());  
      //how do I access theMethod() for the state object for b[0]?

    }
}

class B extends StatefulWidget
{
      @override
      Bstate createState() => Bstate();
}

class Bstate extends State<B>
{
    theMethod()
     { 
        //some content
     }

  @override
  Widget build(BuildContext context) {
   }

}

有没有办法使用 b[0] 从它的相应状态对象访问 theMethod() ? 如果没有,有没有其他方法可以达到同样的效果?

【问题讨论】:

    标签: android inheritance flutter dart statefulwidget


    【解决方案1】:

    您可以使用带有 Widget 状态的 GlobalKey 来访问子 Widget 的方法:

    class Main extends StatefulWidget {
      @override
      _MainState createState() => _MainState();
    }
    
    class _MainState extends State<Main> {
      GlobalKey<_HomeState> _key = GlobalKey();
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('StackOverflow'),
          ),
          body: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Home(key: _key),
              RaisedButton(
                onPressed: () => _key.currentState.changeText('new text'),
                child: Text('Change text'),
              )
            ],
          )
        );
      }
    }
    
    class Home extends StatefulWidget {
      Home({Key key}) : super(key: key);
    
      @override
      _HomeState createState() => _HomeState();
    }
    
    class _HomeState extends State<Home> {
      String text = 'initial text';
      @override
      Widget build(BuildContext context) {
        return Center(
          child: Text(text)
        );
      }
    
      void changeText(String newText){
        setState(() {
          text = newText;
        });
      }
    }
    

    【讨论】:

    • 但是如果有一个 Home 小部件列表(比如List home=new List&lt;Home&gt;(),我将如何分别访问 home[0] 和 home[1] 的 changeText?我必须创建一个键列表吗?
    • 如果您有多个小部件,则需要声明多个 GlobalKeys 并将它们传递给每个小部件。我认为让父母访问孩子的方法并不常见,尽管可能像我上面那样。
    猜你喜欢
    • 2019-01-14
    • 2019-10-14
    • 2021-05-19
    • 2021-12-24
    • 1970-01-01
    • 2021-02-16
    • 2019-09-21
    • 2018-03-14
    • 1970-01-01
    相关资源
    最近更新 更多