From 91810ebd9b04cf471782bb6d6f4af02dca8c8087 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Pinto?= Date: Wed, 24 Dec 2025 01:20:16 +0000 Subject: [PATCH 1/6] added DI to calendarProvider --- .../providers/riverpod/calendar_provider.dart | 7 +- .../providers/calendar_provider_test.dart | 72 +++++++++++++++++++ 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 packages/uni_app/test/unit/providers/calendar_provider_test.dart diff --git a/packages/uni_app/lib/model/providers/riverpod/calendar_provider.dart b/packages/uni_app/lib/model/providers/riverpod/calendar_provider.dart index ce461771b..e24165756 100644 --- a/packages/uni_app/lib/model/providers/riverpod/calendar_provider.dart +++ b/packages/uni_app/lib/model/providers/riverpod/calendar_provider.dart @@ -10,12 +10,17 @@ final calendarProvider = ); class CalendarNotifier extends CachedAsyncNotifier { + CalendarNotifier({CalendarFetcherJson? fetcher}) : _fetcher = fetcher; + + final CalendarFetcherJson? _fetcher; + + CalendarFetcherJson get fetcher => _fetcher ?? CalendarFetcherJson(); + @override Duration? get cacheDuration => const Duration(days: 30); @override Future loadFromStorage() async { - final fetcher = CalendarFetcherJson(); final ptEvents = await fetcher.getCalendar('pt'); final enEvents = await fetcher.getCalendar('en'); diff --git a/packages/uni_app/test/unit/providers/calendar_provider_test.dart b/packages/uni_app/test/unit/providers/calendar_provider_test.dart new file mode 100644 index 000000000..cdb7c2dfc --- /dev/null +++ b/packages/uni_app/test/unit/providers/calendar_provider_test.dart @@ -0,0 +1,72 @@ +import 'dart:convert'; + +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:uni/controller/fetchers/calendar_fetcher_json.dart'; +import 'package:uni/controller/local_storage/preferences_controller.dart'; +import 'package:uni/model/entities/app_locale.dart'; +import 'package:uni/model/entities/calendar_event.dart'; +import 'package:uni/model/providers/riverpod/calendar_provider.dart'; + +class FakeCalendarFetcher extends CalendarFetcherJson{ + Map> mockGroups = { + 'pt': [], + 'en': [], + }; + + @override + Future> getCalendar(String locale) async { + return mockGroups[locale] ?? []; + } +} + +void main(){ + late ProviderContainer container; + late FakeCalendarFetcher fakeFetcher; + + setUp(() async { + SharedPreferences.setMockInitialValues({}); + PreferencesController.prefs = await SharedPreferences.getInstance(); + + fakeFetcher = FakeCalendarFetcher(); + + container = ProviderContainer( + overrides: [ + calendarProvider.overrideWith( + () => CalendarNotifier(fetcher: fakeFetcher), + ), + ], + ); + addTearDown(() => container.dispose()); + }); + + test('Must load correct english JSON successfully', () async { + const fakeJSON = ''' + [ + { + "name": "Start of classes, others", + "start_date": "2025-09-15", + "end_date": "2025-09-15" + } + ] + '''; + + final dataList = json.decode(fakeJSON) as List; + + final eventMap = dataList.first as Map; + final event = CalendarEvent.fromJson(eventMap); + + fakeFetcher.mockGroups['en'] = [event]; + + final data = await container.read(calendarProvider.future); + + expect(data?.getEvents(AppLocale.en).length, 1); + expect(data?.getEvents(AppLocale.pt), isEmpty); + expect(data?.getEvents(AppLocale.en).first.name, 'Start of classes, others'); + }); + +} + + + From 524655110a7af2a7d3b062ddf9af09253f37c25d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Pinto?= Date: Fri, 26 Dec 2025 19:03:31 +0000 Subject: [PATCH 2/6] added some new tests --- .../providers/calendar_provider_test.dart | 69 ++++++++++++++----- 1 file changed, 51 insertions(+), 18 deletions(-) diff --git a/packages/uni_app/test/unit/providers/calendar_provider_test.dart b/packages/uni_app/test/unit/providers/calendar_provider_test.dart index cdb7c2dfc..11184e356 100644 --- a/packages/uni_app/test/unit/providers/calendar_provider_test.dart +++ b/packages/uni_app/test/unit/providers/calendar_provider_test.dart @@ -10,6 +10,8 @@ import 'package:uni/model/entities/calendar_event.dart'; import 'package:uni/model/providers/riverpod/calendar_provider.dart'; class FakeCalendarFetcher extends CalendarFetcherJson{ + bool shouldThrowError = false; + Map> mockGroups = { 'pt': [], 'en': [], @@ -17,6 +19,9 @@ class FakeCalendarFetcher extends CalendarFetcherJson{ @override Future> getCalendar(String locale) async { + if(shouldThrowError){ + throw Exception('Error loading calendar'); + } return mockGroups[locale] ?? []; } } @@ -41,32 +46,60 @@ void main(){ addTearDown(() => container.dispose()); }); - test('Must load correct english JSON successfully', () async { - const fakeJSON = ''' - [ - { - "name": "Start of classes, others", - "start_date": "2025-09-15", - "end_date": "2025-09-15" - } - ] - '''; - - final dataList = json.decode(fakeJSON) as List; - - final eventMap = dataList.first as Map; - final event = CalendarEvent.fromJson(eventMap); + group('CalendarNotifier Tests', () { + + test('Must load English event successfully', () async { + final event = CalendarEvent( + name: 'Start of classes, others', + startDate: DateTime.parse('2025-09-15'), + endDate: DateTime.parse('2025-09-15'), + ); fakeFetcher.mockGroups['en'] = [event]; final data = await container.read(calendarProvider.future); - - expect(data?.getEvents(AppLocale.en).length, 1); + expect(data?.getEvents(AppLocale.en).first.name, equals('Start of classes, others')); expect(data?.getEvents(AppLocale.pt), isEmpty); - expect(data?.getEvents(AppLocale.en).first.name, 'Start of classes, others'); }); + test('Must load Portuguese event successfully', () async { + final event = CalendarEvent( + name: 'Início de aulas, outros', + startDate: DateTime.parse('2025-09-15'), + endDate: DateTime.parse('2025-09-15'), + ); + + fakeFetcher.mockGroups['pt'] = [event]; + + final data = await container.read(calendarProvider.future); + expect(data?.getEvents(AppLocale.pt).first.name, equals('Início de aulas, outros')); + expect(data?.getEvents(AppLocale.en), isEmpty); + }); +}); + + test('Must return empty lists when no events are provided', () async { + fakeFetcher.mockGroups['en'] = []; + fakeFetcher.mockGroups['pt'] = []; + + final data = await container.read(calendarProvider.future); + + expect(data?.getEvents(AppLocale.en), isEmpty); + expect(data?.getEvents(AppLocale.pt), isEmpty); + expect(data?.getEvents(AppLocale.en).length, 0); + expect(data?.getEvents(AppLocale.pt).length, 0); + +}); + test('Must handle fetcher error gracefully', () { + fakeFetcher.shouldThrowError = true; + + expect( + container.read(calendarProvider.future), + throwsA(isA()) + ); + +}); } + From 839b86e4c3cca86252b55dc316e55555816eec11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Pinto?= Date: Sat, 27 Dec 2025 16:03:10 +0000 Subject: [PATCH 3/6] new tests added and some improvements to cached_async_not --- .../providers/calendar_provider_test.dart | 98 ++++++++++++++++--- 1 file changed, 86 insertions(+), 12 deletions(-) diff --git a/packages/uni_app/test/unit/providers/calendar_provider_test.dart b/packages/uni_app/test/unit/providers/calendar_provider_test.dart index 11184e356..ab9b2fc92 100644 --- a/packages/uni_app/test/unit/providers/calendar_provider_test.dart +++ b/packages/uni_app/test/unit/providers/calendar_provider_test.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:logger/logger.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:uni/controller/fetchers/calendar_fetcher_json.dart'; import 'package:uni/controller/local_storage/preferences_controller.dart'; @@ -10,7 +11,7 @@ import 'package:uni/model/entities/calendar_event.dart'; import 'package:uni/model/providers/riverpod/calendar_provider.dart'; class FakeCalendarFetcher extends CalendarFetcherJson{ - bool shouldThrowError = false; + bool ThrowError = false; Map> mockGroups = { 'pt': [], @@ -19,9 +20,10 @@ class FakeCalendarFetcher extends CalendarFetcherJson{ @override Future> getCalendar(String locale) async { - if(shouldThrowError){ - throw Exception('Error loading calendar'); + if(ThrowError){ + throw Exception('Fetcher failed'); } + return mockGroups[locale] ?? []; } } @@ -89,17 +91,89 @@ void main(){ expect(data?.getEvents(AppLocale.pt).length, 0); }); - test('Must handle fetcher error gracefully', () { - fakeFetcher.shouldThrowError = true; - - expect( - container.read(calendarProvider.future), - throwsA(isA()) - ); - + test('Must handle fetcher error gracefully', () async { + fakeFetcher.ThrowError = true; + + await container.read(calendarProvider.future).catchError((_) => null); + + final state = container.read(calendarProvider); + + expect(state.hasError, isTrue); + expect(state.error.toString(), contains('Fetcher failed')); }); -} + test('Must reload from remote if cache is expired', () async { + final oldDate = DateTime.now().subtract(const Duration(days: 31)); + await PreferencesController.setLastDataClassUpdateTime('CalendarNotifier', oldDate,); + + fakeFetcher.mockGroups['en'] = [CalendarEvent( + name: 'Início de aulas, outros', + startDate: DateTime.parse('2025-09-15'), + endDate: DateTime.parse('2025-09-15'), + )]; + + final data = await container.read(calendarProvider.future); + + await Future.delayed(Duration.zero); + final dataPostLoading = PreferencesController.getLastDataClassUpdateTime('CalendarNotifier'); + + expect(dataPostLoading!.isAfter(oldDate), isTrue); + expect(data?.getEvents(AppLocale.en).first.name, equals('Início de aulas, outros')); + }); + test('Data must update when the language changes', () async { + final eventPT = CalendarEvent( + name: 'Início de aulas, outros', + startDate: DateTime.parse('2025-09-15'), + endDate: DateTime.parse('2025-09-15'), + ); + + final eventEN = CalendarEvent( + name: 'Start of classes, others', + startDate: DateTime.parse('2025-09-15'), + endDate: DateTime.parse('2025-09-15'), + ); + fakeFetcher.mockGroups['pt'] = [eventPT]; + fakeFetcher.mockGroups['en'] = [eventEN]; + + final dataPt = await container.read(calendarProvider.future); + + expect(dataPt?.getEvents(AppLocale.pt).first.name, equals('Início de aulas, outros')); + + container.invalidate(calendarProvider); + + final dataEn = await container.read(calendarProvider.future); + + expect(dataEn?.getEvents(AppLocale.en).first.name, equals('Start of classes, others')); + + }); + + test('Should not update timestamp when reading the same value on valid cache', () async { + final now = DateTime.now(); + + await PreferencesController.setLastDataClassUpdateTime('CalendarNotifier', now); + + final eventPT = CalendarEvent( + name: 'Início de aulas, outros', + startDate: DateTime.parse('2025-09-15'), + endDate: DateTime.parse('2025-09-15'), + ); + + fakeFetcher.mockGroups['pt'] = [eventPT]; + + await container.read(calendarProvider.future); + + final time1 = PreferencesController.getLastDataClassUpdateTime('CalendarNotifier'); + + await Future.delayed(Duration.zero); + + await container.read(calendarProvider.future); + final time2 = PreferencesController.getLastDataClassUpdateTime('CalendarNotifier'); + + await Future.delayed(Duration.zero); + + expect(time1, equals(time2)); + }); +} From 57bcf7515369e84141d604bc97581f650fb54d25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Pinto?= Date: Sat, 27 Dec 2025 17:21:28 +0000 Subject: [PATCH 4/6] changes in cached_async_not --- .../riverpod/cached_async_notifier.dart | 19 +++++++++++++++++-- .../providers/calendar_provider_test.dart | 9 +++------ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/packages/uni_app/lib/model/providers/riverpod/cached_async_notifier.dart b/packages/uni_app/lib/model/providers/riverpod/cached_async_notifier.dart index 23c86d5ac..9dd49774a 100644 --- a/packages/uni_app/lib/model/providers/riverpod/cached_async_notifier.dart +++ b/packages/uni_app/lib/model/providers/riverpod/cached_async_notifier.dart @@ -34,6 +34,10 @@ abstract class CachedAsyncNotifier extends AsyncNotifier { } void _updateState(T? newState, {bool updateTimestamp = true}) { + if (!ref.mounted) { + return; + } + if (newState == null) { state = const AsyncData(null); return; @@ -50,6 +54,10 @@ abstract class CachedAsyncNotifier extends AsyncNotifier { } void _updateError(Object error, [StackTrace? stackTrace]) { + if(!ref.mounted) { + return; + } + state = AsyncError(error, stackTrace ?? StackTrace.current); Logger().e( 'Error in $runtimeType: $error', @@ -64,12 +72,14 @@ abstract class CachedAsyncNotifier extends AsyncNotifier { }) async { try { final result = await operation(); - if (result != null) { + if (result != null && ref.mounted) { _updateState(result, updateTimestamp: updateTimestamp); } return result; } catch (err, st) { - _updateError(err, st); + if(ref.mounted){ + _updateError(err, st); + } rethrow; } } @@ -125,6 +135,11 @@ abstract class CachedAsyncNotifier extends AsyncNotifier { try { state = const AsyncLoading(); final result = await loadFromRemote(); + + if(!ref.mounted) { + return result; + } + if (result != null) { _updateState(result); Logger().d('✅ Refreshed $runtimeType from remote!'); diff --git a/packages/uni_app/test/unit/providers/calendar_provider_test.dart b/packages/uni_app/test/unit/providers/calendar_provider_test.dart index ab9b2fc92..7d10b0735 100644 --- a/packages/uni_app/test/unit/providers/calendar_provider_test.dart +++ b/packages/uni_app/test/unit/providers/calendar_provider_test.dart @@ -1,8 +1,5 @@ -import 'dart:convert'; - import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:logger/logger.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:uni/controller/fetchers/calendar_fetcher_json.dart'; import 'package:uni/controller/local_storage/preferences_controller.dart'; @@ -11,7 +8,7 @@ import 'package:uni/model/entities/calendar_event.dart'; import 'package:uni/model/providers/riverpod/calendar_provider.dart'; class FakeCalendarFetcher extends CalendarFetcherJson{ - bool ThrowError = false; + bool throwError = false; Map> mockGroups = { 'pt': [], @@ -20,7 +17,7 @@ class FakeCalendarFetcher extends CalendarFetcherJson{ @override Future> getCalendar(String locale) async { - if(ThrowError){ + if(throwError){ throw Exception('Fetcher failed'); } @@ -92,7 +89,7 @@ void main(){ }); test('Must handle fetcher error gracefully', () async { - fakeFetcher.ThrowError = true; + fakeFetcher.throwError = true; await container.read(calendarProvider.future).catchError((_) => null); From 8b4508f5096b2ca5ed2fbd559e783b68ce63e129 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Pinto?= Date: Sat, 27 Dec 2025 17:31:19 +0000 Subject: [PATCH 5/6] linter formating --- .../providers/calendar_provider_test.dart | 178 ++++++++++-------- 1 file changed, 102 insertions(+), 76 deletions(-) diff --git a/packages/uni_app/test/unit/providers/calendar_provider_test.dart b/packages/uni_app/test/unit/providers/calendar_provider_test.dart index 7d10b0735..0f53ef138 100644 --- a/packages/uni_app/test/unit/providers/calendar_provider_test.dart +++ b/packages/uni_app/test/unit/providers/calendar_provider_test.dart @@ -7,17 +7,14 @@ import 'package:uni/model/entities/app_locale.dart'; import 'package:uni/model/entities/calendar_event.dart'; import 'package:uni/model/providers/riverpod/calendar_provider.dart'; -class FakeCalendarFetcher extends CalendarFetcherJson{ +class FakeCalendarFetcher extends CalendarFetcherJson { bool throwError = false; - Map> mockGroups = { - 'pt': [], - 'en': [], - }; + Map> mockGroups = {'pt': [], 'en': []}; @override Future> getCalendar(String locale) async { - if(throwError){ + if (throwError) { throw Exception('Fetcher failed'); } @@ -25,7 +22,7 @@ class FakeCalendarFetcher extends CalendarFetcherJson{ } } -void main(){ +void main() { late ProviderContainer container; late FakeCalendarFetcher fakeFetcher; @@ -46,50 +43,54 @@ void main(){ }); group('CalendarNotifier Tests', () { - - test('Must load English event successfully', () async { - final event = CalendarEvent( - name: 'Start of classes, others', - startDate: DateTime.parse('2025-09-15'), - endDate: DateTime.parse('2025-09-15'), - ); - - fakeFetcher.mockGroups['en'] = [event]; - - final data = await container.read(calendarProvider.future); - expect(data?.getEvents(AppLocale.en).first.name, equals('Start of classes, others')); - expect(data?.getEvents(AppLocale.pt), isEmpty); + test('Must load English event successfully', () async { + final event = CalendarEvent( + name: 'Start of classes, others', + startDate: DateTime.parse('2025-09-15'), + endDate: DateTime.parse('2025-09-15'), + ); + + fakeFetcher.mockGroups['en'] = [event]; + + final data = await container.read(calendarProvider.future); + expect( + data?.getEvents(AppLocale.en).first.name, + equals('Start of classes, others'), + ); + expect(data?.getEvents(AppLocale.pt), isEmpty); + }); + + test('Must load Portuguese event successfully', () async { + final event = CalendarEvent( + name: 'Início de aulas, outros', + startDate: DateTime.parse('2025-09-15'), + endDate: DateTime.parse('2025-09-15'), + ); + + fakeFetcher.mockGroups['pt'] = [event]; + + final data = await container.read(calendarProvider.future); + expect( + data?.getEvents(AppLocale.pt).first.name, + equals('Início de aulas, outros'), + ); + expect(data?.getEvents(AppLocale.en), isEmpty); + }); }); - test('Must load Portuguese event successfully', () async { - final event = CalendarEvent( - name: 'Início de aulas, outros', - startDate: DateTime.parse('2025-09-15'), - endDate: DateTime.parse('2025-09-15'), - ); - - fakeFetcher.mockGroups['pt'] = [event]; + test('Must return empty lists when no events are provided', () async { + fakeFetcher.mockGroups['en'] = []; + fakeFetcher.mockGroups['pt'] = []; final data = await container.read(calendarProvider.future); - expect(data?.getEvents(AppLocale.pt).first.name, equals('Início de aulas, outros')); + expect(data?.getEvents(AppLocale.en), isEmpty); + expect(data?.getEvents(AppLocale.pt), isEmpty); + expect(data?.getEvents(AppLocale.en).length, 0); + expect(data?.getEvents(AppLocale.pt).length, 0); }); -}); - - test('Must return empty lists when no events are provided', () async { - fakeFetcher.mockGroups['en'] = []; - fakeFetcher.mockGroups['pt'] = []; - - final data = await container.read(calendarProvider.future); - - expect(data?.getEvents(AppLocale.en), isEmpty); - expect(data?.getEvents(AppLocale.pt), isEmpty); - expect(data?.getEvents(AppLocale.en).length, 0); - expect(data?.getEvents(AppLocale.pt).length, 0); - -}); test('Must handle fetcher error gracefully', () async { - fakeFetcher.throwError = true; + fakeFetcher.throwError = true; await container.read(calendarProvider.future).catchError((_) => null); @@ -97,26 +98,36 @@ void main(){ expect(state.hasError, isTrue); expect(state.error.toString(), contains('Fetcher failed')); -}); + }); test('Must reload from remote if cache is expired', () async { final oldDate = DateTime.now().subtract(const Duration(days: 31)); - await PreferencesController.setLastDataClassUpdateTime('CalendarNotifier', oldDate,); + await PreferencesController.setLastDataClassUpdateTime( + 'CalendarNotifier', + oldDate, + ); - fakeFetcher.mockGroups['en'] = [CalendarEvent( - name: 'Início de aulas, outros', - startDate: DateTime.parse('2025-09-15'), - endDate: DateTime.parse('2025-09-15'), - )]; + fakeFetcher.mockGroups['en'] = [ + CalendarEvent( + name: 'Início de aulas, outros', + startDate: DateTime.parse('2025-09-15'), + endDate: DateTime.parse('2025-09-15'), + ), + ]; final data = await container.read(calendarProvider.future); await Future.delayed(Duration.zero); - final dataPostLoading = PreferencesController.getLastDataClassUpdateTime('CalendarNotifier'); - + final dataPostLoading = PreferencesController.getLastDataClassUpdateTime( + 'CalendarNotifier', + ); + expect(dataPostLoading!.isAfter(oldDate), isTrue); - expect(data?.getEvents(AppLocale.en).first.name, equals('Início de aulas, outros')); + expect( + data?.getEvents(AppLocale.en).first.name, + equals('Início de aulas, outros'), + ); }); test('Data must update when the language changes', () async { @@ -137,40 +148,55 @@ void main(){ final dataPt = await container.read(calendarProvider.future); - expect(dataPt?.getEvents(AppLocale.pt).first.name, equals('Início de aulas, outros')); - + expect( + dataPt?.getEvents(AppLocale.pt).first.name, + equals('Início de aulas, outros'), + ); + container.invalidate(calendarProvider); final dataEn = await container.read(calendarProvider.future); - expect(dataEn?.getEvents(AppLocale.en).first.name, equals('Start of classes, others')); - + expect( + dataEn?.getEvents(AppLocale.en).first.name, + equals('Start of classes, others'), + ); }); - test('Should not update timestamp when reading the same value on valid cache', () async { - final now = DateTime.now(); + test( + 'Should not update timestamp when reading the same value on valid cache', + () async { + final now = DateTime.now(); - await PreferencesController.setLastDataClassUpdateTime('CalendarNotifier', now); + await PreferencesController.setLastDataClassUpdateTime( + 'CalendarNotifier', + now, + ); - final eventPT = CalendarEvent( - name: 'Início de aulas, outros', - startDate: DateTime.parse('2025-09-15'), - endDate: DateTime.parse('2025-09-15'), - ); + final eventPT = CalendarEvent( + name: 'Início de aulas, outros', + startDate: DateTime.parse('2025-09-15'), + endDate: DateTime.parse('2025-09-15'), + ); - fakeFetcher.mockGroups['pt'] = [eventPT]; + fakeFetcher.mockGroups['pt'] = [eventPT]; - await container.read(calendarProvider.future); + await container.read(calendarProvider.future); - final time1 = PreferencesController.getLastDataClassUpdateTime('CalendarNotifier'); + final time1 = PreferencesController.getLastDataClassUpdateTime( + 'CalendarNotifier', + ); - await Future.delayed(Duration.zero); + await Future.delayed(Duration.zero); - await container.read(calendarProvider.future); - final time2 = PreferencesController.getLastDataClassUpdateTime('CalendarNotifier'); + await container.read(calendarProvider.future); + final time2 = PreferencesController.getLastDataClassUpdateTime( + 'CalendarNotifier', + ); - await Future.delayed(Duration.zero); - - expect(time1, equals(time2)); - }); + await Future.delayed(Duration.zero); + + expect(time1, equals(time2)); + }, + ); } From 50cc7be731cc953048afd9c997fc82eac7788fa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Pinto?= Date: Sat, 27 Dec 2025 17:33:30 +0000 Subject: [PATCH 6/6] linter --- .../lib/model/providers/riverpod/cached_async_notifier.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/uni_app/lib/model/providers/riverpod/cached_async_notifier.dart b/packages/uni_app/lib/model/providers/riverpod/cached_async_notifier.dart index 9dd49774a..233b2120f 100644 --- a/packages/uni_app/lib/model/providers/riverpod/cached_async_notifier.dart +++ b/packages/uni_app/lib/model/providers/riverpod/cached_async_notifier.dart @@ -54,7 +54,7 @@ abstract class CachedAsyncNotifier extends AsyncNotifier { } void _updateError(Object error, [StackTrace? stackTrace]) { - if(!ref.mounted) { + if (!ref.mounted) { return; } @@ -77,7 +77,7 @@ abstract class CachedAsyncNotifier extends AsyncNotifier { } return result; } catch (err, st) { - if(ref.mounted){ + if (ref.mounted) { _updateError(err, st); } rethrow; @@ -136,7 +136,7 @@ abstract class CachedAsyncNotifier extends AsyncNotifier { state = const AsyncLoading(); final result = await loadFromRemote(); - if(!ref.mounted) { + if (!ref.mounted) { return result; }