void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Material App',
home: Scaffold(
appBar: AppBar(
title: Text('Material App Bar'),
),
body: _InheriteWidgetDemo(),
),
);
}
}
class _InheriteWidgetDemo extends StatefulWidget {
_InheriteWidgetDemo({Key? key}) : super(key: key);
@override
State<_InheriteWidgetDemo> createState() => __InheriteWidgetDemoState();
}
class __InheriteWidgetDemoState extends State<_InheriteWidgetDemo> {
int _count = 0;
@override
Widget build(BuildContext context) {
return CountData(
countData: _count,
childWidget: Container(
child: Center(
child: Column(
children: [
SizedBox(
height: 100,
),
Center(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Center(child: Container(child: Text1())),
),
),
ElevatedButton(
onPressed: () {
_count++;
setState(() {});
},
child: Text("点击数字增加"))
],
),
),
));
}
}
class Text1 extends StatelessWidget {
const Text1({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Text2();
}
}
class Text2 extends StatelessWidget {
const Text2({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Text3();
}
}
class Text3 extends StatefulWidget {
const Text3({Key? key}) : super(key: key);
@override
State<Text3> createState() => _Text3State();
}
class _Text3State extends State<Text3> {
@override
void didChangeDependencies() {
// TODO: implement didChangeDependencies
super.didChangeDependencies();
print('_Text3State didChangeDependencies');
}
@override
Widget build(BuildContext context) {
return Container(
child: Text(CountData.of(context)!.countData.toString()),
);
}
}
class CountData extends InheritedWidget {
final int countData;
const CountData({required this.countData, required Widget childWidget})
: super(child: childWidget);
static CountData? of(BuildContext context) {
return context.dependOnInheritedWidgetOfExactType<CountData>();
}
@override
bool updateShouldNotify(covariant CountData oldWidget) {
print(oldWidget.countData);
print(countData);
return oldWidget.countData == countData;
}
}
网友评论