Flutter 中自定义组件其实就是一个类, 这个类需要继承 StatelessWidget 或者 StatefulWidget

StatelessWidget 是无状态组件,状态不可变的 widget

StatefulWidget 是有状态组件,持有的状态可能在 widget生命周期改变。

组件定义

  1. import 'package:flutter/material.dart';
  2. void main() {
  3. runApp(MyApp());
  4. }
  5. class MyApp extends StatelessWidget {
  6. @override
  7. Widget build(BuildContext context) {
  8. // TODO: implement build
  9. return Center(
  10. child: Text(
  11. 'Hello Flutter',
  12. textDirection: TextDirection.ltr, // 坑, 必须明确告诉 Flutter 文本的方向,否则会报错 No Directionality widget found
  13. style: TextStyle(
  14. fontSize: 30.0,
  15. color: Colors.yellow,
  16. ),
  17. ),
  18. );
  19. }
  20. }

Center 部件:

  • 只能有一个chlid,但是可以用container包含好多子child,继承自Align。
  • 用于将其子项与其自身对齐,并根据子级的大小自行调整大小。
  • 如果它的尺寸受到约束且[widthFactor]和[heightFactor]为空,则此窗口小部件将尽可能大。 如果维度不受约束且相应的大小因子为null,则窗口小部件将匹配其在该维度中的子项大小(其实就是子view的宽高就是center容器的宽高)。 如果尺寸因子为非null,则此center容器的相应尺寸将是子view的尺寸和尺寸因子的乘积。

Text部件:

  • 设置文本的部件
  • textDirection 要设置, 否则会报错 No Directionality widget found , 除非你使用了 MaterialApp
  • 这个部件没有点击事件, 需要 使用GestureDetector 部件才能实现文本点击事件。
  1. import 'package:flutter/material.dart';
  2. void main() {
  3. runApp(MyApp());
  4. }
  5. class MyApp extends StatelessWidget {
  6. @override
  7. Widget build(BuildContext context) {
  8. // TODO: implement build
  9. return Center(
  10. child: GestureDetector(
  11. onTap: () {
  12. print("点击了按钮");
  13. },
  14. child: Text(
  15. 'Hello Flutter',
  16. textDirection: TextDirection.ltr, // 坑, 必须明确告诉 Flutter 文本的方向,否则会报错 No Directionality widget found
  17. style: TextStyle(
  18. fontSize: 30.0,
  19. color: Colors.yellow,
  20. ),
  21. ),
  22. )
  23. );
  24. }
  25. }

Colors 部件:

  • 设置颜色的, 也可以使用 color: Color.fromRGBO(244, 233, 121, 0.5),

导航栏

  1. import 'package:flutter/material.dart';
  2. void main() {
  3. runApp(MyApp());
  4. }
  5. class MyApp extends StatelessWidget {
  6. @override
  7. Widget build(BuildContext context) {
  8. // TODO: implement build
  9. return MaterialApp(
  10. home: Scaffold(
  11. appBar: AppBar(
  12. title: Text(
  13. 'Flutter Demo'
  14. ),
  15. ),
  16. body: HomeWidget(),
  17. ),
  18. theme: ThemeData(
  19. primarySwatch: Colors.yellow,
  20. ),
  21. );
  22. }
  23. }
  24. class HomeWidget extends StatelessWidget {
  25. @override
  26. Widget build(BuildContext context) {
  27. return Center(
  28. child: GestureDetector(
  29. onTap: () {
  30. print("点击了按钮");
  31. },
  32. child: Text(
  33. 'Hello Flutter',
  34. textDirection: TextDirection.ltr, // 坑, 必须明确告诉 Flutter 文本的方向,否则会报错 No Directionality widget found
  35. style: TextStyle(
  36. fontSize: 30.0,
  37. // color: Colors.yellow,
  38. color: Color.fromRGBO(244, 233, 121, 0.5),
  39. ),
  40. ),
  41. )
  42. );
  43. }
  44. }

MaterialApp 部件:

  • 用于整体布局。
  • 参数22个参数 , 常用的有home ,routes , initialRoute等。

Scaffold部件:

  • appBar 用于设置导航栏
  • body 用于设置界面的内容部分