Flutter 中的 Material 组件库提供了一系列用于构建漂亮的 Material Design 风格用户界面的组件。下面是一些常用的 Material 组件及其相关属性的介绍:
-
AppBar(应用栏):
title: 应用栏的标题。actions: 应用栏的操作按钮。backgroundColor: 背景颜色。elevation: 阴影的高度。bottom: 应用栏底部的控件。
import 'package:flutter/material.dart';void main() {runApp(MyApp());}class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(home: Scaffold(appBar: AppBar(title: Text('My App'),actions: <Widget>[IconButton(icon: Icon(Icons.search),onPressed: () {// 执行搜索操作},),IconButton(icon: Icon(Icons.settings),onPressed: () {// 打开设置页面},),],),body: Center(child: Text('Hello, World!'),),),);}} -
Button(按钮):
onPressed: 按钮被点击时触发的回调函数。child: 按钮上显示的内容。color: 按钮的颜色。textColor: 按钮文字的颜色。
ElevatedButton(onPressed: () {// 按钮点击事件},child: Text('Click Me'), ) -
TextField(文本输入框):
controller: 控制器,用于控制输入框的文本。decoration: 输入框的装饰,包括提示文本、边框等。onChanged: 文本变化时的回调函数。keyboardType: 键盘类型。
TextField(decoration: InputDecoration(hintText: 'Enter your name',),onChanged: (value) {// 文本变化时的操作}, ) -
Card(卡片):
child: 卡片中的内容组件。elevation: 阴影的高度。shape: 卡片的形状。
Card(elevation: 4,child: ListTile(leading: Icon(Icons.album),title: Text('Title'),subtitle: Text('Subtitle'),onTap: () {// 点击卡片的操作},), ) -
Drawer(抽屉菜单):
child: 抽屉中的内容组件。elevation: 阴影的高度。
Drawer(child: ListView(padding: EdgeInsets.zero,children: <Widget>[DrawerHeader(child: Text('Drawer Header'),decoration: BoxDecoration(color: Colors.blue,),),ListTile(title: Text('Item 1'),onTap: () {// 第一个菜单项的操作},),ListTile(title: Text('Item 2'),onTap: () {// 第二个菜单项的操作},),],), ) -
BottomNavigationBar(底部导航栏):
items: 导航栏的条目。currentIndex: 当前选中的条目索引。onTap: 点击条目时触发的回调函数。
int _selectedIndex = 0; Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('BottomNavigationBar Demo'),),body: Center(child: Text('Index $_selectedIndex'),),bottomNavigationBar: BottomNavigationBar(currentIndex: _selectedIndex,onTap: (index) {setState(() {_selectedIndex = index;});},items: [BottomNavigationBarItem(icon: Icon(Icons.home),label: 'Home',),BottomNavigationBarItem(icon: Icon(Icons.search),label: 'Search',),BottomNavigationBarItem(icon: Icon(Icons.person),label: 'Profile',),],),); } -
AlertDialog(警告对话框):
title: 对话框的标题。content: 对话框的内容。actions: 对话框的操作按钮。
ElevatedButton(onPressed: () {showDialog(context: context,builder: (context) => AlertDialog(title: Text('Alert'),content: Text('This is an alert dialog.'),actions: <Widget>[TextButton(child: Text('OK'),onPressed: () {Navigator.pop(context);},),],),);},child: Text('Show Alert'), ) -
ListView(列表视图):
children: 列表中的子组件列表。itemBuilder: 用于动态构建列表项的函数。scrollDirection: 滚动方向。separatorBuilder: 列表项之间的分隔符构建器。
ListView.builder(itemCount: 10,itemBuilder: (context, index) {return ListTile(title: Text('Item $index'),onTap: () {// 点击列表项的操作},);}, ) -
PopupMenuButton(弹出菜单按钮):
itemBuilder: 弹出菜单项的构建器。onSelected: 菜单项被选中时的回调函数。
PopupMenuButton<String>(itemBuilder: (context) => [PopupMenuItem(value: 'item1',child: Text('Item 1'),),PopupMenuItem(value: 'item2',child: Text('Item 2'),),],onSelected: (value) {// 选择菜单项的操作}, ) -
SnackBar(消息提示条):
content: 提示条中显示的内容。action: 可选操作按钮。duration: 显示时间。
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Hello, Snackbar!'),action: SnackBarAction(label: 'Undo',onPressed: () {// 撤销操作},),), ) -
Slider(滑块):
value: 滑块的当前值。onChanged: 值变化时的回调函数。min和max: 滑块的最小值和最大值。
Slider(value: 0.5,onChanged: (newValue) {// 滑动滑块的操作},min: 0,max: 1, ) -
Dialog(对话框):
child: 对话框的内容组件。backgroundColor: 对话框的背景颜色。elevation: 对话框的阴影高度。
showDialog(context: context,builder: (context) => AlertDialog(title: Text('Alert'),content: Text('This is an alert dialog.'),actions: <Widget>[TextButton(child: Text('OK'),onPressed: () {Navigator.pop(context);},),],), ) -
Switch(开关):
value: 开关的当前值。onChanged: 值变化时的回调函数。activeColor: 开启状态时的颜色。
Switch(value: true,onChanged: (newValue) {// 开关状态变化的操作}, ) -
TabBar(选项卡栏):
tabs: 选项卡的列表。controller: 用于控制选项卡的控制器。indicatorColor: 选项卡指示器的颜色。
DefaultTabController(length: 2,child: Scaffold(appBar: AppBar(bottom: TabBar(tabs: [Tab(text: 'Tab 1'),Tab(text: 'Tab 2'),],),),body: TabBarView(children: [// 第一个选项卡的内容Container(),// 第二个选项卡的内容Container(),],),), )