11
11
12
12
FLUTTER_ASSERT_NOT_ARC
13
13
14
+ @interface FlutterRestorationPlugin ()
15
+ @property (nonatomic , copy ) FlutterResult pendingRequest;
16
+ @end
17
+
14
18
@implementation FlutterRestorationPlugin {
15
19
BOOL _waitForData;
16
20
BOOL _restorationEnabled;
17
- FlutterResult _pendingRequest;
18
21
}
19
22
20
23
- (instancetype )init {
@@ -40,68 +43,64 @@ - (instancetype)initWithChannel:(FlutterMethodChannel*)channel
40
43
41
44
- (void )handleMethodCall : (FlutterMethodCall*)call result : (FlutterResult)result {
42
45
if ([[call method ] isEqualToString: @" put" ]) {
46
+ NSAssert (self.pendingRequest == nil , @" Cannot put data while a get request is pending." );
43
47
FlutterStandardTypedData* data = [call arguments ];
44
- _restorationData = [data data ];
48
+ self. restorationData = [data data ];
45
49
result (nil );
46
50
} else if ([[call method ] isEqualToString: @" get" ]) {
47
51
if (!_restorationEnabled || !_waitForData) {
48
52
result ([self dataForFramework ]);
49
53
return ;
50
54
}
51
- _pendingRequest = [result retain ];
55
+ NSAssert (self.pendingRequest == nil , @" There can only be one pending request." );
56
+ self.pendingRequest = result;
52
57
} else {
53
58
result (FlutterMethodNotImplemented);
54
59
}
55
60
}
56
61
57
62
- (void )setRestorationData : (NSData *)data {
58
- _restorationData = data;
63
+ if (data != _restorationData) {
64
+ [_restorationData release ];
65
+ _restorationData = [data retain ];
66
+ }
59
67
_waitForData = NO ;
60
- if (_pendingRequest != nil ) {
61
- _pendingRequest ([self dataForFramework ]);
62
- [_pendingRequest release ];
63
- _pendingRequest = nil ;
68
+ if (self.pendingRequest != nil ) {
69
+ self.pendingRequest ([self dataForFramework ]);
70
+ self.pendingRequest = nil ;
64
71
}
65
72
}
66
73
67
74
- (void )markRestorationComplete {
68
75
_waitForData = NO ;
69
- if (_pendingRequest != nil ) {
76
+ if (self. pendingRequest != nil ) {
70
77
NSAssert (_restorationEnabled, @" No request can be pending when restoration is disabled." );
71
- _pendingRequest ([self dataForFramework ]);
72
- [_pendingRequest release ];
73
- _pendingRequest = nil ;
78
+ self.pendingRequest ([self dataForFramework ]);
79
+ self.pendingRequest = nil ;
74
80
}
75
81
}
76
82
77
83
- (void )reset {
78
- _restorationData = nil ;
79
- if (_pendingRequest != nil ) {
80
- [_pendingRequest release ];
81
- }
82
- _pendingRequest = nil ;
84
+ self.pendingRequest = nil ;
85
+ self.restorationData = nil ;
83
86
}
84
87
85
88
- (NSDictionary *)dataForFramework {
86
89
if (!_restorationEnabled) {
87
90
return @{@" enabled" : @NO };
88
91
}
89
- if (_restorationData == nil ) {
92
+ if (self. restorationData == nil ) {
90
93
return @{@" enabled" : @YES };
91
94
}
92
95
return @{
93
96
@" enabled" : @YES ,
94
- @" data" : [FlutterStandardTypedData typedDataWithBytes: _restorationData ]
97
+ @" data" : [FlutterStandardTypedData typedDataWithBytes: self .restorationData ]
95
98
};
96
99
}
97
100
98
101
- (void )dealloc {
99
- if (_restorationData != nil ) {
100
- [_restorationData release ];
101
- }
102
- if (_pendingRequest != nil ) {
103
- [_pendingRequest release ];
104
- }
102
+ [_restorationData release ];
103
+ [_pendingRequest release ];
105
104
[super dealloc ];
106
105
}
107
106
0 commit comments