@@ -127,7 +127,7 @@ class HomePageAppBar extends StatelessWidget implements PreferredSizeWidget {
127127 key: controller.refreshKey,
128128 icon: ! controller.isRefreshing.value
129129 ? Icon (Icons .refresh, color: TaskWarriorColors .white)
130- : Icon ( Icons .autorenew, color : TaskWarriorColors .white ),
130+ : const _SpinningIcon ( ),
131131 onPressed: controller.isRefreshing.value
132132 ? null
133133 : () async {
@@ -151,8 +151,23 @@ class HomePageAppBar extends StatelessWidget implements PreferredSizeWidget {
151151 }
152152 debugPrint ("Refreshing Replica tasks" );
153153 controller.isRefreshing.value = true ;
154- await controller.refreshReplicaTasks ();
155- controller.isRefreshing.value = false ;
154+ try {
155+ await controller.refreshReplicaTasks ();
156+ _showResultSnackBar (
157+ context, 'Sync Completed' , false );
158+ } catch (e) {
159+ debugPrint ('Error refreshing replica tasks: $e ' );
160+ _showResultSnackBar (
161+ context,
162+ SentenceManager (
163+ currentLanguage:
164+ controller.selectedLanguage.value)
165+ .sentences
166+ .homePageTaskWarriorNotConfigured,
167+ true );
168+ } finally {
169+ controller.isRefreshing.value = false ;
170+ }
156171 return ;
157172 }
158173
@@ -177,13 +192,7 @@ class HomePageAppBar extends StatelessWidget implements PreferredSizeWidget {
177192 .hideCurrentSnackBar ();
178193
179194 _showResultSnackBar (
180- context,
181- SentenceManager (
182- currentLanguage:
183- controller.selectedLanguage.value)
184- .sentences
185- .homePageFetchingTasks,
186- false );
195+ context, 'Sync Completed' , false );
187196 } catch (e) {
188197 debugPrint ('Error refreshing tasks: $e ' );
189198 ScaffoldMessenger .of (context)
@@ -216,6 +225,8 @@ class HomePageAppBar extends StatelessWidget implements PreferredSizeWidget {
216225 await controller.synchronize (context, true );
217226 ScaffoldMessenger .of (context)
218227 .hideCurrentSnackBar ();
228+ _showResultSnackBar (
229+ context, 'Sync Completed' , false );
219230 } catch (e) {
220231 ScaffoldMessenger .of (context)
221232 .hideCurrentSnackBar ();
@@ -280,3 +291,38 @@ class HomePageAppBar extends StatelessWidget implements PreferredSizeWidget {
280291 @override
281292 Size get preferredSize => AppBar ().preferredSize;
282293}
294+
295+ class _SpinningIcon extends StatefulWidget {
296+ const _SpinningIcon ();
297+
298+ @override
299+ State <_SpinningIcon > createState () => _SpinningIconState ();
300+ }
301+
302+ class _SpinningIconState extends State <_SpinningIcon >
303+ with SingleTickerProviderStateMixin {
304+ late final AnimationController _controller;
305+
306+ @override
307+ void initState () {
308+ super .initState ();
309+ _controller = AnimationController (
310+ duration: const Duration (seconds: 1 ),
311+ vsync: this ,
312+ )..repeat ();
313+ }
314+
315+ @override
316+ void dispose () {
317+ _controller.dispose ();
318+ super .dispose ();
319+ }
320+
321+ @override
322+ Widget build (BuildContext context) {
323+ return RotationTransition (
324+ turns: _controller,
325+ child: Icon (Icons .refresh, color: TaskWarriorColors .white),
326+ );
327+ }
328+ }
0 commit comments