返回
Flutter制作的Todo-List,打造你的生活管理利器
见解分享
2023-09-16 11:40:41
本文将展示如何使用Flutter构建一个完善且用户友好的待办事项列表应用。该应用具有以下特性:
- 直观的用户界面,可轻松添加、编辑和管理任务
- 漂亮的主题切换,提供多样化的视觉体验
- 自定义主题颜色,打造个性化待办事项列表
打造这款Flutter Todo-List应用,需要一定的开发经验。但我将一步步引导你完成整个过程,确保你能够理解并实现它的所有功能。
1. 创建Flutter项目
首先,使用Flutter CLI创建一个新的Flutter项目:
flutter create todo_list
2. 设置UI
在lib/main.dart
文件中,定义应用的主视图。它将包含一个ListView
,用于显示任务列表,以及一个浮动操作按钮,用于添加新任务。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Todo List',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<String> tasks = [];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Todo List'),
),
body: ListView.builder(
itemCount: tasks.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(tasks[index]),
);
},
),
floatingActionButton: FloatingActionButton(
onPressed: () {
setState(() {
tasks.add('New Task');
});
},
child: Icon(Icons.add),
),
);
}
}
3. 添加主题切换
在lib/main.dart
文件中,添加一个ThemeSwitcher
类来处理主题切换。
import 'package:flutter/material.dart';
class ThemeSwitcher extends StatelessWidget {
final List<ThemeData> themes;
final int currentIndex;
final Function(int) onChanged;
const ThemeSwitcher({
Key? key,
required this.themes,
required this.currentIndex,
required this.onChanged,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
for (int i = 0; i < themes.length; i++)
GestureDetector(
onTap: () => onChanged(i),
child: Container(
width: 40,
height: 40,
margin: EdgeInsets.all(4),
decoration: BoxDecoration(
color: themes[i].primaryColor,
shape: BoxShape.circle,
border: Border.all(
color: currentIndex == i ? Colors.white : Colors.transparent,
width: 2,
),
),
),
),
],
);
}
}
然后,在MyHomePage
中使用ThemeSwitcher
:
import 'package:flutter/material.dart';
import 'theme_switcher.dart';
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
// ...其他代码
// 主题颜色列表
List<ThemeData> themes = [
ThemeData(primarySwatch: Colors.blue),
ThemeData(primarySwatch: Colors.green),
ThemeData(primarySwatch: Colors.pink),
ThemeData(primarySwatch: Colors.purple),
ThemeData(primarySwatch: Colors.orange),
ThemeData(primarySwatch: Colors.teal),
];
int currentIndex = 0;
// ...其他代码
@override
Widget build(BuildContext context) {
return Scaffold(
// ...其他代码
// 主题切换器
bottomNavigationBar: ThemeSwitcher(
themes: themes,
currentIndex: currentIndex,
onChanged: (index) => setState(() {
currentIndex = index;
// 更新主题
ThemeData theme = themes[index];
context.theme.copyWith(
primaryColor: theme.primaryColor,
accentColor: theme.accentColor,
);
}),
),
);
}
}
4. 添加自定义主题颜色
在MyHomePage
中,添加一个CustomThemeColor
小部件,允许用户选择自定义主题颜色。
import 'package:flutter/material.dart';
class CustomThemeColor extends StatelessWidget {
final Function(Color) onChanged;
const CustomThemeColor({
Key? key,
required this.onChanged,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Custom Color:'),
SizedBox(width: 10),
ColorPicker(
pickerColor: Theme.of(context).primaryColor,
onColorChanged: (color) => onChanged(color),
),
],
);
}
}
然后,在MyHomePage
中使用CustomThemeColor
:
import 'package:flutter/material.dart';
import 'custom_theme_color.dart';
class MyHomePage extends StatefulWidget {
// ...其他代码
}
class _MyHomePageState extends State<MyHomePage> {
// ...其他代码
@override
Widget build(BuildContext context) {
return Scaffold(
// ...其他代码
// 自定义主题颜色选择器
bottomNavigationBar: CustomThemeColor(
onChanged: (color) {
setState(() {
// 更新主题
ThemeData theme = Theme.of(context).copyWith(
primaryColor: color,
accentColor: color,
);
context.theme.copyWith(
primaryColor: theme.primaryColor,
accentColor: theme.accentColor,
);
});
},
),
);
}
}
5. 总结
按照这些步骤,你将能够构建一个功能完善、视觉美观的Flutter Todo-List应用。通过添加主题切换和自定义主题颜色功能,你可以打造一个既实用又个性化的待办事项管理工具。
希望本教程能对你有所帮助。如果你有任何疑问,请随时留言。