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

2019-08-07  本文已影响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++;
    });
  }
}

上一篇 下一篇

猜你喜欢

热点阅读