-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtemplate_method_test.dart
78 lines (66 loc) · 1.49 KB
/
template_method_test.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import 'package:meta/meta.dart';
enum LifecycleEvent {
mouseClick,
keyPress,
stop,
}
abstract class AppLifecycle {
@nonVirtual
void run(List<LifecycleEvent> events) {
init();
for (final event in events) {
final shouldStop = !processLifecycleEventsWhileTrue(event);
if (shouldStop) {
break;
}
}
dispose();
}
@mustCallSuper
void init() {
// empty default implementation
}
bool processLifecycleEventsWhileTrue(LifecycleEvent lifecycleEvent);
@mustCallSuper
void dispose() {
// empty default implementation
}
}
class InstantlyClosingApp extends AppLifecycle {
@override
bool processLifecycleEventsWhileTrue(LifecycleEvent lifecycleEvent) {
return false;
}
}
class ProperApp extends AppLifecycle {
@override
void init() {
super.init();
print('Initializing proper app');
}
@override
bool processLifecycleEventsWhileTrue(LifecycleEvent lifecycleEvent) {
print('Processing lifecycle event $lifecycleEvent');
if (lifecycleEvent == LifecycleEvent.stop) {
return false;
} else {
return true;
}
}
@override
void dispose() {
print('Disposing proper app');
super.dispose();
}
}
void main() {
const events = [
LifecycleEvent.keyPress,
LifecycleEvent.stop,
LifecycleEvent.mouseClick,
];
final AppLifecycle instantlyClosingApp = InstantlyClosingApp();
instantlyClosingApp.run(events);
final AppLifecycle properApp = ProperApp();
properApp.run(events);
}