更新局部Widget,避免全局刷新 ,总结自己遇到和需要的情况整理如下,原理不做解释,只记录用法
1、GlobalKey
通过传递GlobalKey 获取Widget的State, 调用 setState(VoidCallback fn) 刷新Widget
注意:使用GlobalKey开销较大,如果有其他可选方案,应尽量避免使用它。另外同一个GlobalKey在整个widget树中必须是唯一的,不能重复 。
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
void main() {
runApp(new MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: '动态更新叶子节点的Widget',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: '动态更新叶子节点的Widget'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
//设置key,绑定待刷新控件.
GlobalKey textKey = GlobalKey();
@override
Widget build(BuildContext context) {
print('Enter _MyHomePageState.build()');
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
TextWidget(textKey),
],
),
),
floatingActionButton: FloatingActionButton(