Skip to content

Widget(组件)

组件概述

在 Flutter 中,一切的显示都是 Widget 。Widget 是一切的基础。Widget 和 Widget 之间通过 child: 进 行嵌套。一个 Flutter 组件,包含了组件的模板、样式和交互等内容,外部只要按照组件设定的属性、函 数及事件处理等进行调用即可,完全不用考虑组件的内部实现逻辑。你需要做的就是在 Widget 中堆积 你的布局。

  • Center:定义居中部件
dart
Center(
	child: // 部件
);
  • Text:定义文本部件
dart
Text(
	'hello',
	textDirection: TextDirection.ltr,
)

若不写textDirection会报错

  • 自定义组件。为了增强代码的可读性,我们可以将部分代码分离出去。写成独立的 Widget。我们自定义的 Widget 需要继承 Flutter 提供的组件。这里有两种常用的组件
    • StatelessWidget。是无状态组件,状态不可变的 Widget
    • StatefulWidget。是有状态组件,持有的状态,可能在 Widget 生命周期改变。通俗的讲:如果我们想改变页面 中的数据的话,这个时候就需要用到 StatefulWidget

自定义组件中,有一个关键的 build 方法。我们需要将独立的代码,放到 build 方法中。上述 HelloWorld ,经过分离后的代码如下:

dart
import 'package:flutter/material.dart';
void main() {
	runApp(Hello());
}
// 或简写为
// void main() => runApp(Hello());
// 创建一个继承自无状态部件的自定义部件
class Hello extends StatelessWidget {
    Widget build (BuildContext context) { // 实现一个build函数, 构建自身
        return Center( //返回一个部件
            child: Text(
                'Hello World!'
                textDirection: TextDirection.ltr,
            )
        );
    }
}

MaterialApp

参数对照表

字段类型
navigatorKey(导航主键)GlobalKey
home(起始页)Widget
routes(路由列表)Map
initialRoute(初始路由名称)String
onGenerateRoute(生成路由)RouteFactory
onUnknownRoute(未知路由)RouteFactory
navigatorObservers(导航观察器)List
builder(构造器)TransitionBuilder
title(应用标题)String
onGenerateTitle(生成应用标题)GenerateAppTitle
color(颜色)Color
theme(主题配置)ThemeData
locale(本地化)Locale
localizationsDelegates(本地化委托代理)Iterable<LocalizationsDelegate>
localeResolutionCallback(本地化分辨回调)LocaleResolutionCallback
supportedLocales(应用支持区域)Iterable
debugShowMaterialGrid(是否显示 Material 网格)bool
showPerformanceOverlay(显示性能监控叠层)bool
checkerboardRasterCacheImages(棋盘格光栅缓存图像)bool
checkerboardOffscreenLayers(棋盘格层)bool
showSemanticsDebugger(显示语义调试器)bool
debugShowCheckedModeBanner(是否显示 DEBUG 横幅)bool

Scaffold

Scaffold 是 Flutter 应用的脚手架。用来搭建 Flutter 项目的基本布局结构

image-20220723005004150

  • appBar 显示在界面顶部的一个 AppBar,也就是 Android 中的 ActionBar 、Toolbar
  • body 当前界面的主体 Widget
  • floatingActionButton: 纸墨设计中所定义的 FAB,界面的主要功能按钮
  • persistentFooterButtons: 固定在下方显示的按钮,比如对话框下方的确定、取消按钮
  • drawer: 侧边栏控件
  • backgroundColor: 内容的背景颜色,默认使用的是 ThemeData.scaffoldBackgroundColor 的值
  • bottomNavigationBar: 显示在页面底部的导航栏
  • resizeToAvoidBottomPadding 类似于 Android 中的 android:windowSoftInputMode=”adjustResize”,控制界面内容 body 是否 重新布局来避免底部被覆盖了,比如当键盘显示的时候,重新布局避免被键盘盖住内容。默认值为 true

其他组件

Cupertino

material.dart 提供了 Android 风格的组件;而 Cupertino 提供了 iOS 风格的组件。

Cupertino 详情:https://flutter.dev/docs/development/ui/widgets/cupertino

SafeArea

SafeArea 主要用来解决刘海屏的问题。

Released under the MIT License.