Skip to content

Commit 8671918

Browse files
authored
Merge pull request #57 from ilopX/add-manipulator-state
Add "State" Pattern as Shape Manipulator example.
2 parents 391ed51 + 8f95300 commit 8671918

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+1905
-22
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## 0.24.0
2+
- Add state pattern: State Manipulator.
3+
14
## 0.23.14
25
- Replace web renderer html to canvakit (deploy_flutter_demo.dart).
36

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ It contains **Dart** examples for all classic **GoF** design patterns.
1717
- [ ] **Mediator**
1818
- [x] **Memento** - [[Conceptual](https://github.com/RefactoringGuru/design-patterns-dart/tree/main/patterns/memento/conceptual)] [[Memento Editor](https://github.com/RefactoringGuru/design-patterns-dart/tree/main/patterns/memento/memento_editor)]
1919
- [x] **Observer** - [[Open-Close Editor Events](https://github.com/RefactoringGuru/design-patterns-dart/tree/main/patterns/observer/open_close_editor_events)] [[AppObserver](https://github.com/RefactoringGuru/design-patterns-dart/tree/main/patterns/observer/app_observer)] [[Subscriber Flutter Widget](https://github.com/RefactoringGuru/design-patterns-dart/tree/main/patterns/observer/subscriber_flutter_widget)]
20-
- [ ] **State**
20+
- [x] **State** - [[State Manipulator](https://github.com/RefactoringGuru/design-patterns-dart/tree/main/patterns/state/manipulator_state)]
2121
- [ ] **Template Method**
2222
- [X] **Visitor** [[Shape XML Exporter](https://github.com/RefactoringGuru/design-patterns-dart/tree/main/patterns/visitor/shapes_exporter)]
2323
- [X] **Strategy** [[Reservation Cargo Spaces](https://github.com/RefactoringGuru/design-patterns-dart/tree/main/patterns/strategy/reservation_cargo_spaces)]
@@ -32,8 +32,8 @@ It contains **Dart** examples for all classic **GoF** design patterns.
3232

3333
## Requirements
3434

35-
The examples were written in **Dart 2.15**.
36-
Some complex examples require **Flutter 2.12**.
35+
The examples were written in **Dart 2.17**.
36+
Some complex examples require **Flutter 3.0.0**.
3737

3838
## Contributor's Guide
3939

analysis_options.yaml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,9 @@ include: package:lints/recommended.yaml
1515

1616
# Uncomment the following section to specify additional rules.
1717

18-
# linter:
19-
# rules:
20-
# - camel_case_types
21-
18+
linter:
19+
rules:
20+
library_private_types_in_public_api: false
2221
# analyzer:
2322
# exclude:
2423
# - path/to/excluded/files/**

bin/deploy_flutter_demos.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ void main() async {
2020
clear();
2121
}
2222

23-
late final tmpDir = Directory.systemTemp.createTempSync();
24-
late final projectDir = thisPath(r'..\');
25-
late final webBuildDir = Directory(projectDir.uri.toFilePath() + r'build\web');
23+
final tmpDir = Directory.systemTemp.createTempSync();
24+
final projectDir = thisPath(r'..\');
25+
final webBuildDir = Directory(projectDir.uri.toFilePath() + r'build\web');
2626
late final String originUrl;
2727

2828
Future<void> init() async {

bin/main.dart

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import '../patterns/abstract_factory/tool_panel_factory/main.dart';
33
import '../patterns/observer/subscriber_flutter_widget/main.dart';
44
import '../patterns/adapter/flutter_adapter/main.dart';
55
import '../patterns/memento/memento_editor/main.dart';
6+
import '../patterns/state/manipulator_state/main.dart';
67

78
void main() {
89
runApp(MyApp());
@@ -13,13 +14,20 @@ class MyApp extends StatelessWidget {
1314
Widget build(BuildContext context) {
1415
return MaterialApp(
1516
title: 'Refactoring Guru: Flutter launcher',
16-
theme: ThemeData(primarySwatch: Colors.pink),
17-
initialRoute: '/abstract_factory/tool_panel_factory',
17+
theme: ThemeData(
18+
primarySwatch: Colors.pink,
19+
iconTheme: IconThemeData(
20+
size: 32,
21+
color: Colors.white,
22+
),
23+
),
24+
initialRoute: '/state/manipulator_state',
1825
routes: {
1926
'/observer/subscriber_flutter_widget': (_) => SubscriberFlutterApp(),
2027
'/adapter/flutter_adapter': (_) => FlutterAdapterApp(),
2128
'/memento/flutter_memento_editor': (_) => FlutterMementoEditorApp(),
2229
'/abstract_factory/tool_panel_factory': (_) => ToolPanelFactoryApp(),
30+
'/state/manipulator_state': (_) => ManipulatorStateApp(),
2331
},
2432
);
2533
}

patterns/abstract_factory/tool_panel_factory/widgets/independent/panel.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
22

33
class Panel extends StatelessWidget {
44
static const thicknessWidth = 64.0;
5-
static const thicknessHeight = 48.0;
5+
final double thicknessHeight;
66

77
final Axis direction;
88
final Widget child;
@@ -11,6 +11,7 @@ class Panel extends StatelessWidget {
1111
Key? key,
1212
required this.direction,
1313
required this.child,
14+
this.thicknessHeight = 48.0,
1415
}) : super(key: key);
1516

1617
@override

patterns/abstract_factory/tool_panel_factory/widgets/independent/tool_button.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class ToolButton extends StatelessWidget {
1010
const ToolButton({
1111
Key? key,
1212
required this.onTap,
13-
required this.active,
13+
this.active = false,
1414
required this.icon,
1515
}) : super(key: key);
1616

patterns/abstract_factory/tool_panel_factory/widgets/property_widgets/primitive/filed_label.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class FieldLabel extends StatelessWidget {
1515
return Row(
1616
children: [
1717
SizedBox(width: 10),
18-
Text(text + ':'),
18+
Text('$text:'),
1919
SizedBox(width: 10),
2020
child,
2121
SizedBox(width: 20),

patterns/builder/cars/main.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,5 @@ void main() {
3434
// RU: Директор может знать больше одного рецепта строительства
3535
director.constructSportsCar(manualBuilder);
3636
final carManual = manualBuilder.getResult();
37-
print("Car manual built:\n" + carManual.print());
37+
print("Car manual built:\n${carManual.print()}");
3838
}

patterns/command/text_editor/main.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,5 @@ void log({
3232
}) {
3333
final addOrUndo = isUndo ? 'Undo_' : '[➕] ';
3434
final description = '$addOrUndo$command';
35-
print(description.padRight(72, '_') + '"$editorText"');
35+
print('${description.padRight(72, '_')}"$editorText"');
3636
}

0 commit comments

Comments
 (0)