这段代码实现了一个Flutter应用的首页,其中包含一个文本显示和多个按钮,用于切换文本颜色。文本颜色通过_textColor状态变量进行管理,并在点击按钮时切换。容器带有蓝色背景。增加了选择按钮点击,字体颜色变化
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Windows Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Color _textColor = Colors.black; // 初始文本颜色
void _changeTextColor(String? colorName) {
if (colorName != null) {
setState(() {
switch (colorName) {
case 'Red':
_textColor = Colors.red;
break;
case 'Green':
_textColor = Colors.green;
break;
case 'Blue':
_textColor = Colors.blue;
break;
default:
_textColor = Colors.black;
break;
}
});
}
}
String get _currentColorName {
switch (_textColor) {
case Colors.red:
return 'Red';
case Colors.green:
return 'Green';
case Colors.blue:
return 'Blue';
default:
return 'Black';
}
}
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Windows Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Hello, Flutter on Windows!',
style: TextStyle(
color: _textColor,
fontSize: 24,
),
),
SizedBox(height: 20), // 添加一些文本和按钮之间的空间
ElevatedButton(
onPressed: () => _changeTextColor('Red'),
child: Text('Red Elevated Button'),
),
SizedBox(height: 10),
TextButton(
onPressed: () => _changeTextColor('Green'),
child: Text('Green Text Button'),
),
SizedBox(height: 10),
OutlinedButton(
onPressed: () => _changeTextColor('Blue'),
child: Text('Blue Outlined Button'),
),
SizedBox(height: 10),
IconButton(
onPressed: () => _changeTextColor('Black'),
icon: Icon(Icons.change_circle),
),
SizedBox(height: 10),
FloatingActionButton(
onPressed: () => _changeTextColor('Red'),
child: Icon(Icons.add),
),
SizedBox(height: 10),
DropdownButton<String>(
value: _currentColorName,
items:
<String>['Red', 'Green', 'Blue', 'Black'].map((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
onChanged: _changeTextColor,
),
SizedBox(height: 10),
PopupMenuButton<String>(
onSelected: _changeTextColor,
itemBuilder: (BuildContext context) {
return <PopupMenuEntry<String>>[
PopupMenuItem<String>(
value: 'Red',
child: Text('Red'),
),
PopupMenuItem<String>(
value: 'Green',
child: Text('Green'),
),
PopupMenuItem<String>(
value: 'Blue',
child: Text('Blue'),
),
PopupMenuItem<String>(
value: 'Black',
child: Text('Black'),
),
];
},
),
],
),
),
);
}
}
以下是对这段代码的分析:
一、整体结构
这段代码是一个使用 Flutter 框架构建的应用程序,主要在 Windows 平台上展示了一个界面,包含可切换颜色的文本和多种不同类型的按钮(ElevatedButton、TextButton、OutlinedButton、IconButton、FloatingActionButton)以及下拉菜单(DropdownButton)和弹出菜单(PopupMenuButton)。
二、代码详细分析
导入部分
import ‘package:flutter/material.dart’;:导入了 Flutter 的 Material 设计库,以便使用其中的各种 UI 组件。
main函数
void main() { runApp(MyApp()); }:应用程序的入口点,调用runApp函数启动应用,并传入MyApp实例。
MyApp类
继承自StatelessWidget,表示这是一个无状态的组件。
build方法中返回一个MaterialApp,设置了应用的标题为 ‘Flutter Windows Example’,主题颜色为蓝色,并指定了应用的首页为MyHomePage。
MyHomePage类
继承自StatefulWidget,表示这是一个有状态的组件。
createState方法返回一个_MyHomePageState实例,用于管理该组件的状态。
_MyHomePageState类
定义了一个状态变量_textColor,初始值为Colors.black,用于存储文本的颜色。
_changeTextColor方法:当被调用时,通过setState方法切换文本的颜色在黑色和红色之间。
build方法:
返回一个Scaffold,构建了应用的基本布局结构。
appBar是一个应用栏,显示应用的标题。
body是一个居中的Column布局:
包含一个Text组件,显示 “Hello, Flutter on Windows!”,文本颜色由_textColor决定,字体大小为 24。
多个SizedBox用于在不同的 UI 元素之间添加垂直间距。
ElevatedButton、TextButton、OutlinedButton、IconButton和FloatingActionButton都设置了点击回 调为_changeTextColor,用于切换文本颜色。
DropdownButton展示了一个下拉菜单,包含 “Red”、“Green”、“Blue” 三个选项,但目前没 有处理选项改变的逻辑。
PopupMenuButton展示了一个弹出菜单,包含 “Red”、“Green”、“Blue” 三个选项,同样没 有处理选项选择的逻辑。
三、功能总结
这个应用程序在 Windows 平台上创建了一个界面,用户可以通过点击不同的按钮来切换文本的颜色,同时还展示了下拉菜单和弹出菜单的使用方式,尽管目前这两个菜单的选项选择没有实际的功能实现。整体布局清晰,通过多种按钮和菜单类型展示了 Flutter 中丰富的交互元素。