@@ -33,34 +33,73 @@ class HomeScreen extends StatefulWidget {
33
33
}
34
34
35
35
class _HomeScreenState extends State <HomeScreen >
36
- with TickerProviderStateMixin , AutomaticKeepAliveClientMixin {
36
+ with
37
+ TickerProviderStateMixin ,
38
+ AutomaticKeepAliveClientMixin ,
39
+ WidgetsBindingObserver {
37
40
late final TabController _tabController;
38
- AnimationBadgeProvider animationProvider = AnimationBadgeProvider ();
39
41
late SpeedDialProvider speedDialProvider;
40
- BadgeMessageProvider badgeData = BadgeMessageProvider ();
41
- ImageUtils imageUtils = ImageUtils ();
42
- InlineImageProvider inlineImageProvider =
42
+ final AnimationBadgeProvider animationProvider = AnimationBadgeProvider ();
43
+ final BadgeMessageProvider badgeData = BadgeMessageProvider ();
44
+ final ImageUtils imageUtils = ImageUtils ();
45
+ final InlineImageProvider inlineImageProvider =
43
46
GetIt .instance <InlineImageProvider >();
44
- bool isPrefixIconClicked = false ;
45
- int textfieldLength = 0 ;
46
- String previousText = '' ;
47
47
final TextEditingController inlineimagecontroller =
48
48
GetIt .instance.get <InlineImageProvider >().getController ();
49
+
50
+ bool isPrefixIconClicked = false ;
49
51
bool isDialInteracting = false ;
50
- String errorVal = "" ;
52
+ String previousText = '' ;
53
+ String _cachedText = '' ;
51
54
52
55
@override
53
56
void initState () {
57
+ WidgetsBinding .instance.addObserver (this );
54
58
inlineimagecontroller.addListener (handleTextChange);
55
59
_setPortraitOrientation ();
56
60
WidgetsBinding .instance.addPostFrameCallback ((_) {
57
61
inlineImageProvider.setContext (context);
58
62
});
59
63
_startImageCaching ();
60
64
speedDialProvider = SpeedDialProvider (animationProvider);
65
+ _tabController = TabController (length: 3 , vsync: this );
61
66
super .initState ();
67
+ }
62
68
63
- _tabController = TabController (length: 3 , vsync: this );
69
+ @override
70
+ void dispose () {
71
+ WidgetsBinding .instance.removeObserver (this );
72
+ inlineimagecontroller.removeListener (handleTextChange);
73
+ inlineimagecontroller.removeListener (_controllerListner);
74
+ animationProvider.stopAnimation ();
75
+ _tabController.dispose ();
76
+ super .dispose ();
77
+ }
78
+
79
+ @override
80
+ void didChangeAppLifecycleState (AppLifecycleState state) {
81
+ if (state == AppLifecycleState .paused) {
82
+ _cachedText = inlineimagecontroller.text;
83
+ animationProvider.stopAnimation ();
84
+ } else if (state == AppLifecycleState .resumed) {
85
+ if (inlineimagecontroller.text.trim ().isEmpty &&
86
+ _cachedText.trim ().isNotEmpty) {
87
+ inlineimagecontroller.text = _cachedText;
88
+ }
89
+ animationProvider.badgeAnimation (
90
+ inlineimagecontroller.text,
91
+ Converters (),
92
+ animationProvider.isEffectActive (InvertLEDEffect ()),
93
+ );
94
+ }
95
+ }
96
+
97
+ void _controllerListner () {
98
+ animationProvider.badgeAnimation (
99
+ inlineImageProvider.getController ().text,
100
+ Converters (),
101
+ animationProvider.isEffectActive (InvertLEDEffect ()),
102
+ );
64
103
}
65
104
66
105
void handleTextChange () {
@@ -69,7 +108,6 @@ class _HomeScreenState extends State<HomeScreen>
69
108
70
109
if (previousText.length > currentText.length) {
71
110
final deletionIndex = selection.baseOffset;
72
-
73
111
final regex = RegExp (r'<<\d+>>' );
74
112
final matches = regex.allMatches (previousText);
75
113
@@ -94,20 +132,6 @@ class _HomeScreenState extends State<HomeScreen>
94
132
}
95
133
}
96
134
97
- void _controllerListner () {
98
- animationProvider.badgeAnimation (inlineImageProvider.getController ().text,
99
- Converters (), animationProvider.isEffectActive (InvertLEDEffect ()));
100
- }
101
-
102
- @override
103
- void dispose () {
104
- inlineimagecontroller.removeListener (handleTextChange);
105
- animationProvider.stopAnimation ();
106
- inlineImageProvider.getController ().removeListener (_controllerListner);
107
- _tabController.dispose ();
108
- super .dispose ();
109
- }
110
-
111
135
void _setPortraitOrientation () {
112
136
SystemChrome .setPreferredOrientations ([
113
137
DeviceOrientation .portraitUp,
@@ -127,17 +151,15 @@ class _HomeScreenState extends State<HomeScreen>
127
151
@override
128
152
Widget build (BuildContext context) {
129
153
super .build (context);
130
- InlineImageProvider inlineImageProvider =
131
- Provider .of <InlineImageProvider >(context);
132
154
133
155
return MultiProvider (
134
156
providers: [
135
157
ChangeNotifierProvider <AnimationBadgeProvider >(
136
- create: (context ) => animationProvider,
158
+ create: (_ ) => animationProvider,
137
159
),
138
160
ChangeNotifierProvider <SpeedDialProvider >(
139
- create: (context ) {
140
- inlineImageProvider. getController () .addListener (_controllerListner);
161
+ create: (_ ) {
162
+ inlineimagecontroller .addListener (_controllerListner);
141
163
return speedDialProvider;
142
164
},
143
165
),
@@ -280,18 +302,18 @@ class _HomeScreenState extends State<HomeScreen>
280
302
child: GestureDetector (
281
303
onTap: () {
282
304
badgeData.checkAndTransfer (
283
- inlineimagecontroller.text,
284
- animationProvider.isEffectActive (FlashEffect ()),
285
- animationProvider
286
- . isEffectActive ( MarqueeEffect ()),
287
- animationProvider
288
- . isEffectActive ( InvertLEDEffect () ),
289
- speedDialProvider. getOuterValue (),
290
- modeValueMap[
291
- animationProvider. getAnimationIndex ()] ,
292
- null ,
293
- false ,
294
- context); //added context
305
+ inlineimagecontroller.text,
306
+ animationProvider.isEffectActive (FlashEffect ()),
307
+ animationProvider. isEffectActive ( MarqueeEffect ()),
308
+ animationProvider
309
+ . isEffectActive ( InvertLEDEffect ()),
310
+ speedDialProvider. getOuterValue ( ),
311
+ modeValueMap[
312
+ animationProvider. getAnimationIndex ()],
313
+ null ,
314
+ false ,
315
+ context, // <== This is needed and now passed
316
+ );
295
317
},
296
318
child: Container (
297
319
padding: EdgeInsets .symmetric (
0 commit comments