25 InheritedWidget数据共享的使用
1.源代码
import 'package:flutter/material.dart';
void main () => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
int count = 0;
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("数据共享InheritedWidget"),),
body: Center(
child: ShareDataInheritedWidget(
data: count,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Padding(
padding: const EdgeInsets.all(20.0),
child: ShareDataTextWidget(),
),
Padding(
padding: const EdgeInsets.all(20.0),
child: ShareDataRedTextWidget(),
),
RaisedButton(
child: Text("增加"),
onPressed: () => setState(() => ++count),
)
],
),
),
)
)
);
}
}
class ShareDataInheritedWidget extends InheritedWidget {
final int data;
ShareDataInheritedWidget({
@required this.data,
Widget child
}) :super(child: child);
static ShareDataInheritedWidget of(BuildContext context) {
return context.inheritFromWidgetOfExactType(ShareDataInheritedWidget);
}
@override
bool updateShouldNotify(ShareDataInheritedWidget old) {
return old.data != data;
}
}
class ShareDataTextWidget extends StatefulWidget {
@override
_ShareDataTextWidgetState createState() => new _ShareDataTextWidgetState();
}
class _ShareDataTextWidgetState extends State<ShareDataTextWidget> {
@override
Widget build(BuildContext context) {
return Text(ShareDataInheritedWidget.of(context).data.toString());
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
print("didChangeDependencies() 被调用");
}
}
class ShareDataRedTextWidget extends StatefulWidget {
@override
_ShareDataRedTextWidgetState createState() => new _ShareDataRedTextWidgetState();
}
class _ShareDataRedTextWidgetState extends State<ShareDataRedTextWidget> {
@override
Widget build(BuildContext context) {
return Text(ShareDataInheritedWidget.of(context).data.toString(),style: TextStyle(color: Colors.red),);
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
print("didChangeDependencies() 被调用");
}
}
2.解释源代码
import 'package:flutter/material.dart';
void main () => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
int count = 0;
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("数据共享InheritedWidget"),),
body: Center(
child: ShareDataInheritedWidget(
data: count,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Padding(
padding: const EdgeInsets.all(20.0),
child: ShareDataTextWidget(),
),
Padding(
padding: const EdgeInsets.all(20.0),
child: ShareDataRedTextWidget(),
),
RaisedButton(
child: Text("增加"),
onPressed: () => setState(() => ++count),
)
],
),
),
)
)
);
}
}
class ShareDataInheritedWidget extends InheritedWidget {
final int data;
ShareDataInheritedWidget({
@required this.data,
Widget child
}) :super(child: child);
static ShareDataInheritedWidget of(BuildContext context) {
return context.inheritFromWidgetOfExactType(ShareDataInheritedWidget);
}
@override
bool updateShouldNotify(ShareDataInheritedWidget old) {
return old.data != data;
}
}
class ShareDataTextWidget extends StatefulWidget {
@override
_ShareDataTextWidgetState createState() => new _ShareDataTextWidgetState();
}
class _ShareDataTextWidgetState extends State<ShareDataTextWidget> {
@override
Widget build(BuildContext context) {
return Text(ShareDataInheritedWidget.of(context).data.toString());
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
print("didChangeDependencies() 被调用");
}
}
class ShareDataRedTextWidget extends StatefulWidget {
@override
_ShareDataRedTextWidgetState createState() => new _ShareDataRedTextWidgetState();
}
class _ShareDataRedTextWidgetState extends State<ShareDataRedTextWidget> {
@override
Widget build(BuildContext context) {
return Text(ShareDataInheritedWidget.of(context).data.toString(),style: TextStyle(color: Colors.red),);
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
print("didChangeDependencies() 被调用");
}
}
3.效果图
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ade40e7c45f865a0cc2aa14d64f5381b.png)