美文网首页
flutter中如何获取子类Widget并调用它的方法

flutter中如何获取子类Widget并调用它的方法

作者: 萤火虫离别的礼物 | 来源:发表于2019-08-07 15:46 被阅读0次

    在flutter中开发中,会发现当子类Widget是StatefulWidget类型的时候,想要获取它的State并调用State中的方法,感觉无从下手。不像是在iOS中,可以直接调用一个类的公开的方法,flutter可以通过key来实现。每个Widget都是唯一标识的。此唯一标识对应于可选的Key参数。如果省略,Flutter将为您生成一个。key主要分为四种:GlobalKey,LocalKey,UniqueKey或ObjectKey,GlobalKey确保key是在整个应用程序唯一的,这次我们就要使用它来实现。
    我们需要给子Widget定义一个唯一的GlobalKey,然后根据这个key获取到这个Widget,进行相关的操作,下面是相关的代码:

    import 'package:flutter/material.dart';
    
    class FirstView extends StatefulWidget {
      @override
      _FirstViewState createState() => _FirstViewState();
    }
    
    class _FirstViewState extends State<FirstView> {
      //这里就是关键的代码,定义一个key
      GlobalKey<_ChildViewState> _childViewKey = new GlobalKey<_ChildViewState>();
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text("First"),
          ),
          body: Container(
             //将key值传进去 
             child: ChildView(key: _childViewKey)
          ),
          floatingActionButton: FloatingActionButton(
            onPressed: (){
             //调用方法
              _childViewKey.currentState.add();
            },
          ),
        );
      }
    }
    
    class ChildView extends StatefulWidget {
      ChildView({Key key}) : super(key: key);
    
      @override
      _ChildViewState createState() => _ChildViewState();
    }
    
    class _ChildViewState extends State<ChildView> {
      int _counter = 0;
      @override
      Widget build(BuildContext context) {
        return Container(
          child: Text("数量是: $_counter"),
        );
      }
    
      add() {
        setState(() {
          _counter++;
        });
      }
    }
    
    

    相关文章

      网友评论

          本文标题:flutter中如何获取子类Widget并调用它的方法

          本文链接:https://www.haomeiwen.com/subject/wsoodctx.html