代码重构
1.分析原理:继承StatelessWidget或StatefulWidget创建自己的Widget减少嵌套。
StatelessWidget:没有状态改变的Widget,通常这种Widget仅仅是做一些展示工作而已;
StatefulWidget:需要保存状态,并且可能出现状态改变的Widget。(但是StatefulWidget不能定义状态,需要创建一个单独的类用来维护状态)
2.结果代码:(以下的代码针对无状态的代码)
import 'package:flutter/material.dart';
main()=>runApp(MyApp());
class MyApp extends StatelessWidget{
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: HYHomePage()
);
}
}
class HYHomePage extends StatelessWidget{
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('第一个flutter程序'),
),
body: HYContentBody()
);
}
}
class HYContentBody extends StatelessWidget{
@override
Widget build(BuildContext context) {
return Center(
child:Text(
'hello world',
style: TextStyle(
fontSize: 36,
color: Colors.red
)
)
);
}
}
3.有状态改变的demo(复选框选择使得状态改变)
import 'package:flutter/material.dart';
main()=>runApp(MyApp());
class MyApp extends StatelessWidget{
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: HYHomePage()
);
}
}
class HYHomePage extends StatelessWidget{
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('第一个flutter程序'),
),
body: HYContentBody()
);
}
}
class HYContentBody extends StatefulWidget{
@override
State<StatefulWidget> createState() {
return HYContentBodyState();
}
}
class HYContentBodyState extends State<HYContentBody> {
var flag = true;
@override
Widget build(BuildContext context) {
return Center(
child: Row(
mainAxisAlignment:MainAxisAlignment.center,
children: <Widget>[
Checkbox(
value: flag,
onChanged: (value) {
setState(() {
flag = value;
});
}
),
Text('同意协议',style: TextStyle(fontSize: 20),),
],
),
);
}
}