Flutter中的Key

2020-06-18  本文已影响0人  E术家

Key本身是一个抽象类

LocalKey

static bool canUpdate(Widget oldWidget, Widget newWidget) {
    return oldWidget.runtimeType == newWidget.runtimeType
        && oldWidget.key == newWidget.key;
  }

用作diff算法的核心所在!用作Element和Widget进行比较!

GlobalKey

class GlobalKeyDemo extends StatelessWidget {
  final GlobalKey<_ChildPageState> _globalKey = GlobalKey();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('GlobalKeyDemoo'),
      ),
      body: ChildPage(
        key: _globalKey,
      ),
      floatingActionButton: FloatingActionButton(
          child: Icon(Icons.add),
          onPressed: () {
            //在StatelessWidget中改变StatefulWidget里的内容并刷新UI
            _globalKey.currentState._count++;
            _globalKey.currentState.data =
                'old' + _globalKey.currentState._count.toString();
            _globalKey.currentState.setState(() {});
          }),
    );
  }
}

class ChildPage extends StatefulWidget {
  ChildPage({Key key}) : super(key: key);
  @override
  _ChildPageState createState() => _ChildPageState();
}

class _ChildPageState extends State<ChildPage> {
  int _count = 0;
  String data = 'hello';

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        children: <Widget>[
          Text(_count.toString()),
          Text(data),
        ],
      ),
    );
  }
}
上一篇 下一篇

猜你喜欢

热点阅读