Flutter 中自定义组件其实就是一个类, 这个类需要继承 StatelessWidget
或者 StatefulWidget
。
StatelessWidget
是无状态组件,状态不可变的 widget
。
StatefulWidget
是有状态组件,持有的状态可能在 widget
生命周期改变。
组件定义
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return Center(
child: Text(
'Hello Flutter',
textDirection: TextDirection.ltr, // 坑, 必须明确告诉 Flutter 文本的方向,否则会报错 No Directionality widget found
style: TextStyle(
fontSize: 30.0,
color: Colors.yellow,
),
),
);
}
}
Center
部件:
- 只能有一个chlid,但是可以用container包含好多子child,继承自Align。
- 用于将其子项与其自身对齐,并根据子级的大小自行调整大小。
- 如果它的尺寸受到约束且[widthFactor]和[heightFactor]为空,则此窗口小部件将尽可能大。 如果维度不受约束且相应的大小因子为null,则窗口小部件将匹配其在该维度中的子项大小(其实就是子view的宽高就是center容器的宽高)。 如果尺寸因子为非null,则此center容器的相应尺寸将是子view的尺寸和尺寸因子的乘积。
Text
部件:
- 设置文本的部件
- textDirection 要设置, 否则会报错 No Directionality widget found , 除非你使用了
MaterialApp
- 这个部件没有点击事件, 需要 使用
GestureDetector
部件才能实现文本点击事件。
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return Center(
child: GestureDetector(
onTap: () {
print("点击了按钮");
},
child: Text(
'Hello Flutter',
textDirection: TextDirection.ltr, // 坑, 必须明确告诉 Flutter 文本的方向,否则会报错 No Directionality widget found
style: TextStyle(
fontSize: 30.0,
color: Colors.yellow,
),
),
)
);
}
}
Colors
部件:
- 设置颜色的, 也可以使用
color: Color.fromRGBO(244, 233, 121, 0.5),
导航栏
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text(
'Flutter Demo'
),
),
body: HomeWidget(),
),
theme: ThemeData(
primarySwatch: Colors.yellow,
),
);
}
}
class HomeWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Center(
child: GestureDetector(
onTap: () {
print("点击了按钮");
},
child: Text(
'Hello Flutter',
textDirection: TextDirection.ltr, // 坑, 必须明确告诉 Flutter 文本的方向,否则会报错 No Directionality widget found
style: TextStyle(
fontSize: 30.0,
// color: Colors.yellow,
color: Color.fromRGBO(244, 233, 121, 0.5),
),
),
)
);
}
}
MaterialApp
部件:
- 用于整体布局。
- 参数22个参数 , 常用的有home ,routes , initialRoute等。
Scaffold
部件:
- appBar 用于设置导航栏
- body 用于设置界面的内容部分