Flutter便签管理插件sticky_notes的使用
Flutter便签管理插件sticky_notes的使用
功能
sticky_notes
是一个Flutter插件,它允许你创建可以在其父容器边界内移动的便签。通过长按便签可以显示一个菜单,提供编辑、更改颜色和删除选项。单击便签会使便签变大,并启用对其子组件的缩放和平移功能。
开始使用
要开始使用 sticky_notes
插件,请按照以下步骤操作:
- 添加依赖:在
pubspec.yaml
文件中添加sticky_notes
作为依赖项。 - 创建 StickyNote 对象:将
StickyNote
对象放置在Stack
小部件中。Stack
的边界就是便签的活动范围。
使用示例
以下是一个完整的示例代码,展示了如何使用 sticky_notes
插件创建多个可拖动的便签,并实现编辑、删除和颜色更改功能。
import 'package:flutter/material.dart';
import 'package:sticky_notes/sticky_notes.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
home: StickyNotesTest(),
);
}
}
class StickyNotesTest extends StatefulWidget {
const StickyNotesTest({super.key});
[@override](/user/override)
State<StickyNotesTest> createState() => _StickyNotesTestState();
}
class _StickyNotesTestState extends State<StickyNotesTest> {
late TextEditingController notesTextController;
String note1 = 'Test Note 1';
List<StickyNote> stickyNotes = [];
List<GlobalKey<StatefulWidget>> notesKeys = [
GlobalKey(),
GlobalKey(),
GlobalKey()
];
void setStickyNotes() {
stickyNotes = [
StickyNote(
key: notesKeys[0],
id: 1,
width: 100,
height: 100,
// 长按时显示的颜色选项
colorsEdit: const [
Colors.green,
Colors.yellow,
Colors.orange,
Colors.cyan
],
// 处理编辑按钮事件,编辑文本
onEdit: () async {
notesTextController.text = note1;
await showDialog(
context: context,
builder: ((context) {
return AlertDialog(
title: const Text('Your note'),
icon: const Icon(Icons.note),
content: TextField(
controller: notesTextController,
),
);
}));
setState(() {
note1 = notesTextController.text;
setStickyNotes();
});
},
// 处理删除按钮事件,从列表中删除便签
onDelete: () {
setState(() {
onDeleteNote(1);
});
},
child: Center(
child: Text(
note1,
style: const TextStyle(
fontSize: 12,
color: Colors.black,
),
textAlign: TextAlign.center,
),
),
),
StickyNote(
key: notesKeys[1],
id: 2,
width: 100,
height: 100,
colorsEdit: const [
Colors.green,
Colors.yellow,
Colors.orange,
Colors.cyan
],
onDelete: () {
setState(() {
onDeleteNote(2);
});
},
child: const FlutterLogo(
size: 40,
),
),
StickyNote(
key: notesKeys[2],
id: 3,
width: 100,
height: 100,
colorsEdit: const [
Colors.green,
Colors.yellow,
Colors.orange,
Colors.cyan
],
onDelete: () {
setState(() {
onDeleteNote(3);
});
},
child: Image.network(
'https://upload.wikimedia.org/wikipedia/commons/0/05/Cat.png',
fit: BoxFit.fill,
),
),
];
}
[@override](/user/override)
void initState() {
notesTextController = TextEditingController();
// 初始化便签列表,包含文本、图标和图片示例
setStickyNotes();
super.initState();
}
[@override](/user/override)
void dispose() {
notesTextController.dispose();
super.dispose();
}
void onDeleteNote(int id) {
setState(() {
stickyNotes.removeWhere((element) => element.id == id);
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Container(
color: Colors.green,
height: 500,
width: 300,
child: Stack(
children: stickyNotes,
),
),
),
);
}
}
更多关于Flutter便签管理插件sticky_notes的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter便签管理插件sticky_notes的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用sticky_notes
插件的示例代码。假设你已经在pubspec.yaml
文件中添加了sticky_notes
依赖,并且已经运行了flutter pub get
来安装它。
pubspec.yaml
首先,确保你的pubspec.yaml
文件中包含sticky_notes
依赖:
dependencies:
flutter:
sdk: flutter
sticky_notes: ^最新版本号 # 替换为实际发布的最新版本号
main.dart
接下来,在main.dart
文件中,你可以按照以下方式使用sticky_notes
插件来创建一个简单的便签管理应用。
import 'package:flutter/material.dart';
import 'package:sticky_notes/sticky_notes.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Sticky Notes Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: StickyNotesDemo(),
);
}
}
class StickyNotesDemo extends StatefulWidget {
@override
_StickyNotesDemoState createState() => _StickyNotesDemoState();
}
class _StickyNotesDemoState extends State<StickyNotesDemo> {
final StickyNotesController _stickyNotesController = StickyNotesController();
@override
void initState() {
super.initState();
// 监听便签变化
_stickyNotesController.addListener(() {
setState(() {});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Sticky Notes Demo'),
),
body: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
Expanded(
child: ListView.builder(
itemCount: _stickyNotesController.notes.length,
itemBuilder: (context, index) {
final note = _stickyNotesController.notes[index];
return ListTile(
title: Text(note.title),
subtitle: Text(note.content),
trailing: IconButton(
icon: Icon(Icons.delete),
onPressed: () {
_stickyNotesController.deleteNote(note.id);
},
),
);
},
),
),
TextField(
decoration: InputDecoration(
labelText: 'New Note Title',
),
onSubmitted: (title) {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text('Enter Note Content'),
content: TextField(
maxLines: 10,
decoration: InputDecoration(
labelText: 'Note Content',
),
onSubmitted: (content) {
Navigator.of(context).pop();
_stickyNotesController.addNote(StickyNote(
id: UUID().v4(), // 假设你有一个生成UUID的方法
title: title,
content: content,
));
},
),
actions: [
TextButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text('Cancel'),
),
TextButton(
onPressed: () {
// 这里自动提交content,因为TextField已经监听onSubmitted
Navigator.of(context).pop();
},
child: Text('Save'),
),
],
);
},
);
},
),
],
),
),
);
}
}
// 假设的UUID生成器,你需要一个实际的UUID库
class UUID {
static String v4() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replaceAll(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
}
class StickyNote {
final String id;
final String title;
final String content;
StickyNote({required this.id, required this.title, required this.content});
}
说明
- 依赖安装:确保在
pubspec.yaml
中添加了sticky_notes
依赖。 - 初始化控制器:在
_StickyNotesDemoState
中初始化StickyNotesController
。 - 监听变化:使用
addListener
来监听便签的变化,并调用setState
来更新UI。 - UI构建:使用
ListView.builder
来展示便签列表,并提供删除功能。 - 添加便签:通过对话框来输入便签的标题和内容,并调用
addNote
方法添加到控制器中。
注意:sticky_notes
插件的具体API和类可能有所不同,上面的代码是一个假设的示例,你可能需要根据实际的sticky_notes
插件文档进行调整。特别是UUID的生成,你可能需要引入一个实际的UUID库,例如uuid_dart
。