剪貼板APP
Code
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() {
runApp(const ClipboardApp());
}
此行導入了Flutter框架中的一些核心庫,以及一些用於處理系統服務的庫,如剪貼板和共享首選項。
class ClipboardApp extends StatefulWidget {
const ClipboardApp({Key? key}) : super(key: key);
@override
_ClipboardAppState createState() => _ClipboardAppState();
}
這是一個繼承自StatefulWidget的自定義小部件ClipboardApp,用於創建應用程序的主要小部件。
class _ClipboardAppState extends State<ClipboardApp> {
List<String> clipboardContents = [];
@override
void initState() {
super.initState();
initClipboard();
}
Future<void> initClipboard() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
clipboardContents = prefs.getStringList('clipboardContents') ?? [];
setState(() {});
}
_ClipboardAppState是ClipboardApp的狀態類。在這個類中,我們初始化了一個空的字符串列表clipboardContents,並重寫了initState方法,在小部件初始化時調用initClipboard方法。initClipboard方法從SharedPreferences中獲取之前存儲的剪貼板內容並更新狀態。
Future<void> copyToClipboard() async {
ClipboardData? clipboardData = await Clipboard.getData('text/plain');
if (clipboardData != null) {
SharedPreferences prefs = await SharedPreferences.getInstance();
clipboardContents.add(clipboardData.text!);
prefs.setStringList('clipboardContents', clipboardContents);
setState(() {});
}
}
copyToClipboard方法用於將剪貼板中的內容添加到列表中並保存到SharedPreferences中。它使用了async/await機制來處理異步操作。
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Center(
child: ListView.builder(
padding: const EdgeInsets.all(8),
itemCount: clipboardContents.length,
itemBuilder: (BuildContext context, int index) {
return ListTile(
leading: IconButton(
icon: Icon(Icons.copy),
onPressed: () async {
await Clipboard.setData(
ClipboardData(text: clipboardContents[index]));
},
),
title: Text(
'${clipboardContents[index]}',
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
trailing: IconButton(
icon: Icon(Icons.delete),
onPressed: () async {
SharedPreferences prefs =
await SharedPreferences.getInstance();
clipboardContents.removeAt(index);
prefs.setStringList('clipboardContents', clipboardContents);
setState(() {});
},
),
);
},
),
),
floatingActionButton: FloatingActionButton(
onPressed: copyToClipboard,
child: Icon(Icons.add),
),
),
);
}
}
build方法構建了應用程序的UI。它返回一個MaterialApp,其中包含一個Scaffold,其主體是一個居中的ListView.builder,用於顯示剪貼板內容列表。每個列表項都包含兩個圖標按鈕:一個用於復制到剪貼板,另一個用於刪除該內容。floatingActionButton用於觸發copyToClipboard方法,該方法將剪貼板中的內容添加到列表中。setState用於更新UI以反映數據更改。
Last update :
13 novembre 2024
Created : 13 novembre 2024
Created : 13 novembre 2024