撤銷
適用於 Flutter 和 Dart 的撤銷/重做
- 星標
- 63
- 分支
- 14
- 最近推送(UTC)
- 2026年1月16日
- 專案狀態
- 已封存
原始 README
以下為英文專案原文快照,最新內容請造訪 GitHub。
undo
An undo redo library for Dart/Flutter. Forked from here and updated for Flutter. Demo can be viewed here.
[!WARNING] This project has moved here: https://github.com/rodydavis/packages.dart
Usage
Create an ChangeStack to store changes
import 'package:undo/undo.dart';
var changes = ChangeStack();
Add new undo, redo commands using ChangeStack.add(). When a change is added, it calls the change's execute() method. Use Change() for simple inline changes.
var count = 0;
changes.add(
Change(count, () => count++, (val) => count = val);
name: "Increase"
);
Use Change() when changing a field on an object. This will store the field's old value so it can be reverted.
var person = new Person()
..firstName = "John"
..lastName = "Doe";
changes.add(
Change(
person.firstName,
() => person.firstName = "Jane",
(oldValue) = person.firstName = oldValue
)
)
Undo a change with undo().
print(person.firstName); // Jane
changes.undo();
print(person.firstName); // John
Redo the change with redo().
changes.redo();
print(person.firstName); // Jane
Simple Stack Example
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
SimpleStack _controller;
@override
void initState() {
_controller = SimpleStack<int>(
0,
onUpdate: (val) {
if (mounted)
setState(() {
print('New Value -> $val');
});
},
);
super.initState();
}
@override
Widget build(BuildContext context) {
final count = _controller.state;
return Scaffold(
appBar: AppBar(
title: Text('Undo/Redo Example'),
),
body: Center(
child: Text('Count: $count'),
),
bottomNavigationBar: BottomAppBar(
child: Row(
children: <Widget>[
IconButton(
icon: Icon(Icons.arrow_back),
onPressed: !_controller.canUndo
? null
: () {
if (mounted)
setState(() {
_controller.undo();
});
},
),
IconButton(
icon: Icon(Icons.arrow_forward),
onPressed: !_controller.canRedo
? null
: () {
if (mounted)
setState(() {
_controller.redo();
});
},
),
],
),
),
floatingActionButtonLocation: FloatingActionButtonLocation.endDocked,
floatingActionButton: FloatingActionButton(
heroTag: ValueKey('add_button'),
child: Icon(Icons.add),
onPressed: () {
_controller.modify(count + 1);
},
),
);
}
}
語言C++DartCMakeSwiftCHTMLKotlinObjective-C
使用的依賴
依賴清單 1 項
- test開發依賴
^1.24.9
如何選擇適合專案的儲存庫?
先依使用情境篩選,再比較專案活躍情況,最後到原始儲存庫確認使用要求。
- 透過儲存庫名稱、作者或描述搜尋,再依技術分類縮小範圍。
- 綜合星標、分支與最近推送比較專案;星標反映社群關注,不保證品質。
- 使用前在 GitHub 確認 README、授權條款與 Issues。
來源與維護
“A repository is the most basic element of GitHub.”
GitHub Docs — About repositories ↗