本文详细整理了 Flutter 中 50+ 常用控件,涵盖文本、布局、按钮、列表、动画等核心组件。每个控件均附有 属性说明 和 实战代码示例,帮助你快速掌握 Flutter UI 开发的精髓。无论你是初学者还是进阶开发者,本文都能为你提供实用的参考和指导,助你轻松构建美观、高效的 Flutter 应用!
1. Text
用于显示文本内容。
属性:
text
: 显示的文本内容。style
: 文本样式(字体大小、颜色、粗细等)。
示例:
Text('Hello, Flutter!',style: TextStyle(fontSize: 24,fontWeight: FontWeight.bold,color: Colors.blue,),
)
2. Container
用于布局和装饰,可以设置宽度、高度、边距、背景色等。
属性:
width
和height
: 容器的宽度和高度。margin
和padding
: 外边距和内边距。decoration
: 装饰(背景色、边框、圆角等)。
示例:
Container(width: 200,height: 100,margin: EdgeInsets.all(10),padding: EdgeInsets.all(20),decoration: BoxDecoration(color: Colors.amber,borderRadius: BorderRadius.circular(10),),child: Text('Container'),
)
3. Row 和 Column
用于水平(Row)和垂直(Column)排列子控件。
属性:
mainAxisAlignment
: 主轴对齐方式(如MainAxisAlignment.spaceEvenly
)。crossAxisAlignment
: 交叉轴对齐方式(如CrossAxisAlignment.start
)。
示例:
Row(mainAxisAlignment: MainAxisAlignment.spaceEvenly,children: [Text('Item 1'),Text('Item 2'),Text('Item 3'),],
)Column(crossAxisAlignment: CrossAxisAlignment.start,children: [Text('Item 1'),Text('Item 2'),Text('Item 3'),],
)
4. ListView
用于显示可滚动的列表。
属性:
children
: 列表项。scrollDirection
: 滚动方向(默认垂直)。
示例:
ListView(children: [ListTile(title: Text('Item 1'),),ListTile(title: Text('Item 2'),),ListTile(title: Text('Item 3'),),],
)
5. GridView
用于显示网格布局。
属性:
crossAxisCount
: 每行的列数。children
: 网格项。
示例:
GridView.count(crossAxisCount: 2,children: List.generate(10, (index) {return Center(child: Text('Item $index'),);}),
)
6. Button
用于触发操作,如 ElevatedButton
、TextButton
、IconButton
等。
属性:
onPressed
: 点击事件回调。child
: 按钮内容。
示例:
ElevatedButton(onPressed: () {print('Button Pressed');},child: Text('Click Me'),
)IconButton(icon: Icon(Icons.thumb_up),onPressed: () {print('Icon Button Pressed');},
)
7. TextField
用于接收用户输入。
属性:
decoration
: 输入框装饰(如标签、边框)。onChanged
: 输入内容变化时的回调。
示例:
TextField(decoration: InputDecoration(labelText: 'Enter your name',border: OutlineInputBorder(),),onChanged: (text) {print('User input: $text');},
)
8. Image
用于显示图片。
属性:
src
: 图片路径(网络或本地)。width
和height
: 图片尺寸。fit
: 图片填充方式(如BoxFit.cover
)。
示例:
Image.network('https://example.com/image.jpg',width: 200,height: 200,fit: BoxFit.cover,
)
9. AppBar
用于显示应用栏。
属性:
title
: 标题。actions
: 右侧操作按钮。
示例:
Scaffold(appBar: AppBar(title: Text('My App'),actions: [IconButton(icon: Icon(Icons.search),onPressed: () {print('Search');},),],),body: Center(child: Text('Hello, Flutter!'),),
)
10. BottomNavigationBar
用于底部导航栏。
属性:
items
: 导航项。currentIndex
: 当前选中的索引。onTap
: 点击事件回调。
示例:
Scaffold(bottomNavigationBar: BottomNavigationBar(items: const [BottomNavigationBarItem(icon: Icon(Icons.home),label: 'Home',),BottomNavigationBarItem(icon: Icon(Icons.business),label: 'Business',),BottomNavigationBarItem(icon: Icon(Icons.school),label: 'School',),],currentIndex: 0,onTap: (index) {print('Selected index: $index');},),body: Center(child: Text('Hello, Flutter!'),),
)
11. SnackBar
用于显示轻量级的提示信息。
属性:
content
: 提示内容。duration
: 显示时长。
示例:
Scaffold(body: Center(child: ElevatedButton(onPressed: () {ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('This is a SnackBar!'),),);},child: Text('Show SnackBar'),),),
)
12. AlertDialog
用于显示对话框。
属性:
title
: 对话框标题。content
: 对话框内容。actions
: 操作按钮。
示例:
showDialog(context: context,builder: (BuildContext context) {return AlertDialog(title: Text('Alert'),content: Text('This is an alert dialog.'),actions: [TextButton(onPressed: () {Navigator.of(context).pop();},child: Text('OK'),),],);},
);
13. Stack
用于将多个控件叠加在一起。
属性:
children
: 子控件。
示例:
Stack(children: [Container(width: 200,height: 200,color: Colors.red,),Positioned(top: 50,left: 50,child: Container(width: 100,height: 100,color: Colors.blue,),),],
)
14. Expanded
用于在 Row
或 Column
中扩展子控件。
属性:
flex
: 扩展比例。
示例:
Row(children: [Expanded(flex: 2,child: Container(color: Colors.red,height: 100,),),Expanded(flex: 1,child: Container(color: Colors.blue,height: 100,),),],
)
15. FutureBuilder
用于处理异步数据并构建 UI。
属性:
future
: 异步任务。builder
: 根据任务状态构建 UI。
示例:
FutureBuilder<String>(future: fetchData(),builder: (context, snapshot) {if (snapshot.connectionState == ConnectionState.waiting) {return CircularProgressIndicator();} else if (snapshot.hasError) {return Text('Error: ${snapshot.error}');} else {return Text('Data: ${snapshot.data}');}},
)
16. StreamBuilder
用于处理流数据并构建 UI。
属性:
stream
: 数据流。builder
: 根据流数据构建 UI。
示例:
StreamBuilder<int>(stream: streamCounter(),builder: (context, snapshot) {if (snapshot.hasData) {return Text('Count: ${snapshot.data}');} else {return Text('No data');}},
)
17. GestureDetector
用于处理手势事件。
属性:
onTap
: 点击事件回调。child
: 子控件。
示例:
GestureDetector(onTap: () {print('Tapped');},child: Container(width: 100,height: 100,color: Colors.green,child: Center(child: Text('Tap Me'),),),
)
18. Hero
用于实现页面之间的共享元素过渡动画。
属性:
tag
: 共享元素的唯一标识。child
: 共享元素的内容。
示例:
Hero(tag: 'hero-tag',child: Image.network('https://example.com/image.jpg',width: 100,height: 100,),
)
19. AnimatedContainer
用于创建带有动画效果的容器。
属性:
duration
: 动画时长。width
和height
: 容器的宽度和高度。color
: 背景色。
示例:
AnimatedContainer(duration: Duration(seconds: 1),width: _width,height: _height,color: _color,child: Center(child: Text('Animated Container'),),
)
20. CustomPaint
用于自定义绘制。
属性:
painter
: 自定义绘制逻辑。
示例:
CustomPaint(size: Size(200, 200),painter: MyCustomPainter(),
)
21. ClipRRect
用于裁剪控件为圆角矩形。
属性:
borderRadius
: 圆角半径。child
: 子控件。
示例:
ClipRRect(borderRadius: BorderRadius.circular(20),child: Image.network('https://example.com/image.jpg',width: 200,height: 200,fit: BoxFit.cover,),
)
22. Transform
用于对控件进行变换(旋转、缩放、平移等)。
属性:
angle
: 旋转角度。child
: 子控件。
示例:
Transform.rotate(angle: 45 * (3.141592653589793 / 180),child: Container(width: 100,height: 100,color: Colors.blue,),
)
23. Flexible
用于在 Row
或 Column
中灵活分配空间。
属性:
flex
: 扩展比例。child
: 子控件。
示例:
Row(children: [Flexible(flex: 1,child: Container(color: Colors.red,height: 100,),),Flexible(flex: 2,child: Container(color: Colors.blue,height: 100,),),],
)
24. Spacer
用于在 Row
或 Column
中创建空白空间。
属性:
flex
: 空白空间的比例。
示例:
Row(children: [Text('Left'),Spacer(),Text('Right'),],
)
25. Divider
用于添加分割线。
属性:
height
: 分割线高度。color
: 分割线颜色。
示例:
Column(children: [Text('Item 1'),Divider(),Text('Item 2'),],
)
26. CircularProgressIndicator
用于显示加载指示器。
属性:
valueColor
: 进度条颜色。
示例:
CircularProgressIndicator(valueColor: AlwaysStoppedAnimation<Color>(Colors.blue),
)
27. LinearProgressIndicator
用于显示线性进度条。
属性:
value
: 进度值(0 到 1 之间)。valueColor
: 进度条颜色。
示例:
LinearProgressIndicator(value: 0.5,valueColor: AlwaysStoppedAnimation<Color>(Colors.green),
)
28. Checkbox
用于选择或取消选择选项。
属性:
value
: 是否选中。onChanged
: 状态变化回调。
示例:
Checkbox(value: _isChecked,onChanged: (value) {setState(() {_isChecked = value!;});},
)
29. Radio
用于单选选项。
属性:
value
: 单选值。groupValue
: 当前选中的值。onChanged
: 状态变化回调。
示例:
Radio(value: 1,groupValue: _selectedValue,onChanged: (value) {setState(() {_selectedValue = value!;});},
)
30. Switch
用于切换开关状态。
属性:
value
: 开关状态。onChanged
: 状态变化回调。
示例:
Switch(value: _isSwitched,onChanged: (value) {setState(() {_isSwitched = value;});},
)
31. Slider
用于选择范围内的值。
属性:
value
: 当前值。min
和max
: 最小值和最大值。onChanged
: 值变化回调。
示例:
Slider(value: _sliderValue,min: 0,max: 100,onChanged: (value) {setState(() {_sliderValue = value;});},
)
32. DatePicker
用于选择日期。
属性:
initialDate
: 初始���期。firstDate
和lastDate
: 可选日期范围。
示例:
showDatePicker(context: context,initialDate: DateTime.now(),firstDate: DateTime(2000),lastDate: DateTime(2100),
).then((selectedDate) {if (selectedDate != null) {print('Selected Date: $selectedDate');}
});
33. TimePicker
用于选择时间。
属性:
initialTime
: 初始时间。
示例:
showTimePicker(context: context,initialTime: TimeOfDay.now(),
).then((selectedTime) {if (selectedTime != null) {print('Selected Time: $selectedTime');}
});
34. Drawer
用于显示侧边栏。
属性:
child
: 侧边栏内容。
示例:
Scaffold(drawer: Drawer(child: ListView(children: [DrawerHeader(child: Text('Drawer Header'),decoration: BoxDecoration(color: Colors.blue,),),ListTile(title: Text('Item 1'),onTap: () {print('Item 1 tapped');},),ListTile(title: Text('Item 2'),onTap: () {print('Item 2 tapped');},),],),),body: Center(child: Text('Hello, Flutter!'),),
)
35. TabBar
用于显示标签栏。
属性:
tabs
: 标签项。controller
: 标签控制器。
示例:
DefaultTabController(length: 3,child: Scaffold(appBar: AppBar(bottom: TabBar(tabs: [Tab(icon: Icon(Icons.home)),Tab(icon: Icon(Icons.business)),Tab(icon: Icon(Icons.school)),],),),body: TabBarView(children: [Center(child: Text('Home')),Center(child: Text('Business')),Center(child: Text('School')),],),),
)
36. Stepper
用于显示步骤指示器。
属性:
currentStep
: 当前步骤。steps
: 步骤列表。
示例:
Stepper(currentStep: _currentStep,onStepContinue: () {setState(() {if (_currentStep < 2) {_currentStep += 1;}});},onStepCancel: () {setState(() {if (_currentStep > 0) {_currentStep -= 1;}});},steps: [Step(title: Text('Step 1'),content: Text('Content for Step 1'),),Step(title: Text('Step 2'),content: Text('Content for Step 2'),),Step(title: Text('Step 3'),content: Text('Content for Step 3'),),],
)
37. Chip
用于显示标签或选择项。
属性:
label
: 标签内容。onDeleted
: 删除回调。
示例:
Chip(label: Text('Chip'),onDeleted: () {print('Chip deleted');},
)
38. Tooltip
用于显示提示信息。
属性:
message
: 提示信息内容。child
: 子控件。
示例:
Tooltip(message: 'This is a tooltip',child: Text('Hover over me'),
)
39. RichText
用于显示富文本。
属性:
text
: 富文本内容(使用TextSpan
定义)。
示例:
RichText(text: TextSpan(text: 'Hello ',style: TextStyle(color: Colors.black),children: <TextSpan>[TextSpan(text: 'Flutter',style: TextStyle(color: Colors.blue,fontWeight: FontWeight.bold,),),],),
)
40. Wrap
用于自动换行的布局。
属性:
spacing
: 子控件之间的间距。runSpacing
: 行之间的间距。children
: 子控件。
示例:
Wrap(spacing: 8.0,runSpacing: 4.0,children: List.generate(10, (index) {return Chip(label: Text('Item $index'),);}),
)
41. FadeInImage
用于显示带有淡入效果的图片。
属性:
placeholder
: 占位图。image
: 目标图片。fit
: 图片填充方式。
示例:
FadeInImage.assetNetwork(placeholder: 'assets/placeholder.png',image: 'https://example.com/image.jpg',width: 200,height: 200,fit: BoxFit.cover,
)
42. PageView
用于显示可滑动的页面。
属性:
children
: 页面内容。
示例:
PageView(children: [Center(child: Text('Page 1')),Center(child: Text('Page 2')),Center(child: Text('Page 3')),],
)
43. RefreshIndicator
用于下拉刷新。
属性:
onRefresh
: 刷新回调。child
: 子控件。
示例:
RefreshIndicator(onRefresh: () async {await Future.delayed(Duration(seconds: 2));},child: ListView(children: [ListTile(title: Text('Item 1'),),ListTile(title: Text('Item 2'),),ListTile(title: Text('Item 3'),),],),
)
44. ClipOval
用于裁剪控件为圆形。
属性:
child
: 子控件。
示例:
ClipOval(child: Image.network('https://example.com/image.jpg',width: 100,height: 100,fit: BoxFit.cover,),
)
45. ClipPath
用于自定义裁剪路径。
属性:
clipper
: 自定义裁剪逻辑。child
: 子控件。
示例:
ClipPath(clipper: MyCustomClipper(),child: Container(width: 200,height: 200,color: Colors.blue,),
)
46. BackdropFilter
用于应用背景滤镜。
属性:
filter
: 滤镜效果(如模糊)。child
: 子控件。
示例:
BackdropFilter(filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5),child: Container(color: Colors.black.withOpacity(0.5),),
)
47. ShaderMask
用于应用着色器遮罩。
属性:
shaderCallback
: 着色器逻辑。child
: 子控件。
示例:
ShaderMask(shaderCallback: (Rect bounds) {return LinearGradient(colors: [Colors.red, Colors.blue],).createShader(bounds);},child: Text('Shader Mask',style: TextStyle(fontSize: 24, color: Colors.white),),
)
48. AnimatedOpacity
用于创建带有动画效果的透明度变化。
属性:
opacity
: 透明度值(0 到 1 之间)。duration
: 动画时长。child
: 子控件。
示例:
AnimatedOpacity(opacity: _opacity,duration: Duration(seconds: 1),child: Container(width: 200,height: 200,color: Colors.blue,),
)
49. AnimatedCrossFade
用于在两个控件之间创建交叉淡入淡出动画。
属性:
duration
: 动画时长。firstChild
和secondChild
: 两个子控件。crossFadeState
: 当前显示的控件。
示例:
AnimatedCrossFade(duration: Duration(seconds: 1),firstChild: Container(width: 200,height: 200,color: Colors.blue,),secondChild: Container(width: 200,height: 200,color: Colors.red,),crossFadeState: _showFirst ? CrossFadeState.showFirst : CrossFadeState.showSecond,
)
50. AnimatedBuilder
用于创建自定义动画。
属性:
animation
: 动画控制器。builder
: 构建动画逻辑。child
: 子控件。
示例:
AnimatedBuilder(animation: _animationController,builder: (context, child) {return Transform.rotate(angle: _animationController.value * 2 * 3.141592653589793,child: child,);},child: Container(width: 100,height: 100,color: Colors.blue,),
)
总结
以上是 Flutter 中 50 个常用控件的详细说明和示例代码。通过灵活组合这些控件,你可以构建出功能丰富、界面美观的 Flutter 应用。希望这些内容对你有帮助!如果有其他问题,欢迎随时提问!