Flutter 中自定义组件其实就是一个类, 这个类需要继承 StatelessWidget 或者 StatefulWidget。
StatelessWidget 是无状态组件,状态不可变的 widget。
StatefulWidget 是有状态组件,持有的状态可能在 widget生命周期改变。
组件定义
import 'package:flutter/material.dart';void main() {runApp(MyApp());}class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {// TODO: implement buildreturn Center(child: Text('Hello Flutter',textDirection: TextDirection.ltr, // 坑, 必须明确告诉 Flutter 文本的方向,否则会报错 No Directionality widget foundstyle: 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 {@overrideWidget build(BuildContext context) {// TODO: implement buildreturn Center(child: GestureDetector(onTap: () {print("点击了按钮");},child: Text('Hello Flutter',textDirection: TextDirection.ltr, // 坑, 必须明确告诉 Flutter 文本的方向,否则会报错 No Directionality widget foundstyle: 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 {@overrideWidget build(BuildContext context) {// TODO: implement buildreturn MaterialApp(home: Scaffold(appBar: AppBar(title: Text('Flutter Demo'),),body: HomeWidget(),),theme: ThemeData(primarySwatch: Colors.yellow,),);}}class HomeWidget extends StatelessWidget {@overrideWidget build(BuildContext context) {return Center(child: GestureDetector(onTap: () {print("点击了按钮");},child: Text('Hello Flutter',textDirection: TextDirection.ltr, // 坑, 必须明确告诉 Flutter 文本的方向,否则会报错 No Directionality widget foundstyle: TextStyle(fontSize: 30.0,// color: Colors.yellow,color: Color.fromRGBO(244, 233, 121, 0.5),),),));}}
MaterialApp 部件:
- 用于整体布局。
- 参数22个参数 , 常用的有home ,routes , initialRoute等。
Scaffold部件:
- appBar 用于设置导航栏
- body 用于设置界面的内容部分
