From 2c86e3f0ed052e2632d7bde66fa3cd9097bad783 Mon Sep 17 00:00:00 2001 From: Camille Brulotte <47289926+Udito3@users.noreply.github.com> Date: Fri, 31 Mar 2023 09:35:28 -0400 Subject: [PATCH 01/20] WIP --- lib/core/managers/news_repository.dart | 163 ++++++++++++++++ lib/core/models/news.dart | 43 +++++ lib/core/viewmodels/news_viewmodel.dart | 80 ++++++++ lib/locator.dart | 3 + lib/ui/views/dashboard_view.dart | 105 ++++++++++- pubspec.lock | 237 ++++++++++++------------ pubspec.yaml | 1 + 7 files changed, 508 insertions(+), 124 deletions(-) create mode 100644 lib/core/managers/news_repository.dart create mode 100644 lib/core/models/news.dart create mode 100644 lib/core/viewmodels/news_viewmodel.dart diff --git a/lib/core/managers/news_repository.dart b/lib/core/managers/news_repository.dart new file mode 100644 index 000000000..a62bffc95 --- /dev/null +++ b/lib/core/managers/news_repository.dart @@ -0,0 +1,163 @@ +// FLUTTER / DART / THIRD-PARTIES +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:logger/logger.dart'; + +// SERVICES +import 'package:notredame/core/services/analytics_service.dart'; +import 'package:notredame/core/services/networking_service.dart'; +import 'package:notredame/core/managers/cache_manager.dart'; + +// MODELS +import 'package:notredame/core/models/News.dart'; + +// UTILS +import 'package:notredame/core/utils/cache_exception.dart'; + +// OTHER +import 'package:notredame/locator.dart'; + +/// Repository to access all the news +class NewsRepository { + static const String tag = "NewsRepository"; + + @visibleForTesting + static const String newsCacheKey = "newsCache"; + + final Logger _logger = locator(); + + /// Will be used to report event and error. + final AnalyticsService _analyticsService = locator(); + + /// Cache manager to access and update the cache. + final CacheManager _cacheManager = locator(); + + /// Used to verify if the user has connectivity + final NetworkingService _networkingService = locator(); + + /// List of the news with 3 test news. + List _news = [ + News( + id: 1, + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec tempus arcu sed quam tincidunt, non venenatis orci mollis.", + description: "Test 1 description", + date: DateTime.now(), + image: "https://picsum.photos/400/200", + tags: ["tag1", "tag2"], + important: true,), + News( + id: 2, + title: "Test 2", + description: "Test 2 description", + date: DateTime.now(), + image: "https://picsum.photos/400/200", + tags: ["tag1", "tag2"], + important: false,), + News( + id: 3, + title: "Test 3", + description: "Test 3 description", + date: DateTime.now(), + image: "https://picsum.photos/400/200", + tags: ["tag1", "tag2"], + important: true,), + ]; + + List get news => _news; + + /// Get and update the list of news. + /// After fetching the news from the [?] the [CacheManager] + /// is updated with the latest version of the news. + Future> getNews( + {bool fromCacheOnly = false}) async { + // Force fromCacheOnly mode when user has no connectivity + if (!(await _networkingService.hasConnectivity())) { + // ignore: parameter_assignments + fromCacheOnly = true; + } + + // Load the news from the cache if the list doesn't exist + if (_news == null) { + await getNewsFromCache(); + } + + if (fromCacheOnly) { + return _news; + } + + final List fetchedNews = fetchNewsFromAPI(); + + // Update the list of news to avoid duplicate news + for (final News news in fetchedNews) { + if (!_news.contains(news)) { + _news.add(news); + } + } + + try { + // Update cache + _cacheManager.update( + newsCacheKey, jsonEncode(_news)); + } on CacheException catch (_) { + // Do nothing, the caching will retry later and the error has been logged by the [CacheManager] + _logger.e( + "$tag - getNews: exception raised will trying to update the cache."); + } + + return _news; + } + + Future getNewsFromCache() async { + _news = []; + try { + final List responseCache = + jsonDecode(await _cacheManager.get(newsCacheKey)) + as List; + + // Build list of news loaded from the cache. + _news = responseCache.map((e) => + News.fromJson(e as Map)).toList(); + + _logger.d( + "$tag - getNewsFromCache: ${_news.length} news loaded from cache"); + } on CacheException catch (_) { + _logger.e( + "$tag - getNewsFromCache: exception raised will trying to load news from cache."); + } + } + + // TODO : Fetch news from the API + List fetchNewsFromAPI() { + final List fetchedNews = []; + + fetchedNews.add(News( + id: 1, + title: "Nouvelle fonctionnalité", + description: + "Vous pouvez désormais consulter les nouvelles de votre école directement dans l'application. Pour cela, cliquez sur le menu en haut à gauche et sélectionnez \"Nouvelles\".", + image: "https://i.imgur.com/1ZQ2Z0M.png", + tags: ["Nouvelles"], + date: DateTime.now(), + important: true)); + + // Add three more random news + for (int i = 0; i < 3; i++) { + fetchedNews.add(News( + id: i + 2, + title: "Nouvelle fonctionnalité", + description: + "Vous pouvez désormais consulter les nouvelles de votre école directement dans l'application. Pour cela, cliquez sur le menu en haut à gauche et sélectionnez \"Nouvelles\".", + image: "https://i.imgur.com/1ZQ2Z0M.png", + tags: ["Nouvelles"], + date: DateTime.now(), + important: false)); + } + + _logger.d( + "$tag - getNews: fetched ${fetchedNews.length} news."); + + return fetchedNews; + } + +} diff --git a/lib/core/models/news.dart b/lib/core/models/news.dart new file mode 100644 index 000000000..003aa79c3 --- /dev/null +++ b/lib/core/models/news.dart @@ -0,0 +1,43 @@ +// FLUTTER / DART / THIRD-PARTIES +import 'package:flutter/material.dart'; + +class News { + final int id; + final String title; + final String description; + final String image; + // À changer pour une liste de tags + final List tags; + final DateTime date; + final bool important; + + News( + {@required this.id, + @required this.title, + @required this.description, + @required this.image, + @required this.tags, + @required this.date, + @required this.important}); + + /// Used to create [News] instance from a JSON file + factory News.fromJson(Map map) => News( + id: map['id'] as int, + title: map['title'] as String, + description: map['description'] as String, + image: map['image'] as String, + tags: List.from(map['tags'] as List), + date: DateTime.parse(map['date'] as String), + important: map['important'] as bool); + + Map toJson() => { + 'id': id, + 'title': title, + 'description': description, + 'image': image, + 'tags': tags, + 'date': date.toString(), + 'important': important + }; +} + diff --git a/lib/core/viewmodels/news_viewmodel.dart b/lib/core/viewmodels/news_viewmodel.dart new file mode 100644 index 000000000..db19e354c --- /dev/null +++ b/lib/core/viewmodels/news_viewmodel.dart @@ -0,0 +1,80 @@ +// FLUTTER / DART / THIRD-PARTIES +import 'dart:math'; + +import 'package:fluttertoast/fluttertoast.dart'; +import 'package:stacked/stacked.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +// CONSTANTS + +// MANAGER +import 'package:notredame/core/managers/news_repository.dart'; +import 'package:notredame/core/managers/settings_manager.dart'; + +// MODELS +import 'package:notredame/core/models/News.dart'; + +// UTILS + +// OTHER +import 'package:notredame/locator.dart'; + +class NewsViewModel extends FutureViewModel> { + /// Load the events + final NewsRepository _newsRepository = locator(); + + /// Manage de settings + final SettingsManager _settingsManager = locator(); + + /// Localization class of the application. + final AppIntl _appIntl; + + /// News list + List _news = []; + + /// Return the list of all the news. + List get news { + _news = []; + + // Build the list of news + for (final n in _newsRepository.news) { + _news.add(n); + } + + return _news; + } + + /// Get current locale + Locale get locale => _settingsManager.locale; + + NewsViewModel({@required AppIntl intl}) : _appIntl = intl; + + bool isLoadingEvents = false; + + @override + Future> futureToRun() => + // ignore: missing_return + _newsRepository.getNews(fromCacheOnly: true).then((value) { + setBusyForObject(isLoadingEvents, true); + _newsRepository + .getNews() + // ignore: return_type_invalid_for_catch_error + .catchError(onError) + .then((value) { + if (value != null) { + // Reload the list of news + news; + } + }).whenComplete(() { + setBusyForObject(isLoadingEvents, false); + }); + }); + + @override + // ignore: type_annotate_public_apis + void onError(error) { + Fluttertoast.showToast(msg: _appIntl.error); + } + +} diff --git a/lib/locator.dart b/lib/locator.dart index 012a95d7e..504c40773 100644 --- a/lib/locator.dart +++ b/lib/locator.dart @@ -2,6 +2,7 @@ import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:get_it/get_it.dart'; import 'package:logger/logger.dart'; +import 'package:notredame/core/managers/news_repository.dart'; // SERVICES import 'package:notredame/core/services/navigation_service.dart'; @@ -20,6 +21,7 @@ import 'package:notredame/core/services/launch_url_service.dart'; // MANAGERS import 'package:notredame/core/managers/user_repository.dart'; import 'package:notredame/core/managers/course_repository.dart'; +import 'package:notredame/core/managers/news_repository.dart'; import 'package:notredame/core/managers/cache_manager.dart'; import 'package:notredame/core/managers/settings_manager.dart'; @@ -47,6 +49,7 @@ void setupLocator() { // Managers locator.registerLazySingleton(() => UserRepository()); locator.registerLazySingleton(() => CourseRepository()); + locator.registerLazySingleton(() => NewsRepository()); locator.registerLazySingleton(() => CacheManager()); locator.registerLazySingleton(() => SettingsManager()); diff --git a/lib/ui/views/dashboard_view.dart b/lib/ui/views/dashboard_view.dart index b4e8608f2..88dcc164d 100644 --- a/lib/ui/views/dashboard_view.dart +++ b/lib/ui/views/dashboard_view.dart @@ -3,8 +3,10 @@ import 'package:feature_discovery/feature_discovery.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:notredame/core/viewmodels/news_viewmodel.dart'; import 'package:stacked/stacked.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:timeago/timeago.dart' as timeago; // VIEWMODEL import 'package:notredame/core/viewmodels/dashboard_viewmodel.dart'; @@ -18,6 +20,7 @@ import 'package:notredame/ui/widgets/haptics_container.dart'; // MODELS / CONSTANTS import 'package:ets_api_clients/models.dart'; +import 'package:notredame/core/models/News.dart'; import 'package:notredame/locator.dart'; import 'package:notredame/core/constants/preferences_flags.dart'; import 'package:notredame/core/constants/urls.dart'; @@ -86,7 +89,7 @@ class _DashboardViewState extends State onReorder: (oldIndex, newIndex) => onReorder(model, oldIndex, newIndex), padding: const EdgeInsets.fromLTRB(0, 4, 0, 8), - children: _buildCards(model), + children: _buildCards(model, NewsViewModel(intl: AppIntl.of(context))), proxyDecorator: (child, _, __) { return HapticsContainer(child: child); }, @@ -97,7 +100,7 @@ class _DashboardViewState extends State }); } - List _buildCards(DashboardViewModel model) { + List _buildCards(DashboardViewModel model, NewsViewModel newsModel) { final List cards = List.empty(growable: true); for (final PreferencesFlag element in model.cardsToDisplay) { @@ -113,6 +116,10 @@ class _DashboardViewState extends State break; case PreferencesFlag.gradesCard: cards.add(_buildGradesCards(model, element)); + // TEST + for (final News news in newsModel.news) { + cards.add(_buildNewsCard(newsModel, news)); + } break; default: @@ -394,6 +401,100 @@ class _DashboardViewState extends State ]), ); + Widget _buildNewsCard(NewsViewModel model, News news) => + DismissibleCard( + key: UniqueKey(), + onDismissed: (DismissDirection direction) { + // Nothing for test + }, + isBusy: model.busy(model.news), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Align( + alignment: Alignment.centerLeft, + child: Container( + padding: const EdgeInsets.fromLTRB(17, 15, 0, 0), + /*child: GestureDetector( + onTap: () => _navigationService + .pushNamedAndRemoveUntil(RouterPaths.news), + child: Text(AppIntl.of(context).news_title, + style: Theme.of(context).textTheme.headline6), + ),*/ + ), + ), + Container( + padding: const EdgeInsets.fromLTRB(17, 10, 15, 10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (news.image != null) + Stack( + children: [ + Image.network( + news.image, + fit: BoxFit.cover, + ), + Positioned( + top: 20, // adjust the position of the tags as per your requirement + left: 20, + child: Container( + padding: EdgeInsets.all(8), + decoration: BoxDecoration( + color: Colors.blueGrey, + borderRadius: BorderRadius.circular(8), + ), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Tags', + style: TextStyle( + color: Colors.white, + fontWeight: FontWeight.bold, + ), + ), + Text( + 'Tags', + style: TextStyle( + color: Colors.white, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + ), + ), + ], + ), + + const SizedBox(height: 10), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Flexible( + child: Text( + news.title, + style: Theme.of(context).textTheme.headline6, + ), + ), + const SizedBox(width: 10), + Text( + // Format date news date + timeago.format(news.date, + locale: AppIntl.of(context).localeName), + style: Theme.of(context).textTheme.caption, + ), + ], + ), + ], + ), + ), + ], + ), + ); + void dismissCard(DashboardViewModel model, PreferencesFlag flag) { model.hideCard(flag); } diff --git a/pubspec.lock b/pubspec.lock index 55714b499..c96ecfc98 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -14,7 +14,7 @@ packages: name: _flutterfire_internals url: "https://pub.dartlang.org" source: hosted - version: "1.0.12" + version: "1.0.18" analyzer: dependency: transitive description: @@ -28,14 +28,14 @@ packages: name: archive url: "https://pub.dartlang.org" source: hosted - version: "3.2.2" + version: "3.3.6" args: dependency: transitive description: name: args url: "https://pub.dartlang.org" source: hosted - version: "2.3.0" + version: "2.4.0" async: dependency: transitive description: @@ -77,7 +77,7 @@ packages: name: built_value url: "https://pub.dartlang.org" source: hosted - version: "8.1.4" + version: "8.4.4" characters: dependency: transitive description: @@ -85,20 +85,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.2.1" - charcode: - dependency: transitive - description: - name: charcode - url: "https://pub.dartlang.org" - source: hosted - version: "1.3.1" checked_yaml: dependency: transitive description: name: checked_yaml url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.2" cli_util: dependency: transitive description: @@ -119,7 +112,7 @@ packages: name: code_builder url: "https://pub.dartlang.org" source: hosted - version: "4.3.0" + version: "4.4.0" collection: dependency: transitive description: @@ -140,7 +133,7 @@ packages: name: connectivity_plus_linux url: "https://pub.dartlang.org" source: hosted - version: "1.3.0" + version: "1.3.1" connectivity_plus_macos: dependency: transitive description: @@ -154,7 +147,7 @@ packages: name: connectivity_plus_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.2.4" connectivity_plus_web: dependency: transitive description: @@ -175,28 +168,28 @@ packages: name: convert url: "https://pub.dartlang.org" source: hosted - version: "3.0.1" + version: "3.1.1" crypto: dependency: transitive description: name: crypto url: "https://pub.dartlang.org" source: hosted - version: "3.0.1" + version: "3.0.2" dart_style: dependency: transitive description: name: dart_style url: "https://pub.dartlang.org" source: hosted - version: "2.2.4" + version: "2.2.5" dbus: dependency: transitive description: name: dbus url: "https://pub.dartlang.org" source: hosted - version: "0.7.1" + version: "0.7.3" device_info_plus: dependency: "direct main" description: @@ -224,7 +217,7 @@ packages: name: device_info_plus_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.3.0+1" + version: "2.6.1" device_info_plus_web: dependency: transitive description: @@ -296,98 +289,98 @@ packages: name: ffi url: "https://pub.dartlang.org" source: hosted - version: "1.1.2" + version: "1.2.1" file: dependency: transitive description: name: file url: "https://pub.dartlang.org" source: hosted - version: "6.1.2" + version: "6.1.4" firebase_analytics: dependency: "direct main" description: name: firebase_analytics url: "https://pub.dartlang.org" source: hosted - version: "10.1.0" + version: "10.1.6" firebase_analytics_platform_interface: dependency: transitive description: name: firebase_analytics_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "3.3.17" + version: "3.3.23" firebase_analytics_web: dependency: transitive description: name: firebase_analytics_web url: "https://pub.dartlang.org" source: hosted - version: "0.5.1+8" + version: "0.5.1+14" firebase_core: dependency: "direct main" description: name: firebase_core url: "https://pub.dartlang.org" source: hosted - version: "2.4.1" + version: "2.8.0" firebase_core_platform_interface: dependency: transitive description: name: firebase_core_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "4.5.2" + version: "4.5.3" firebase_core_web: dependency: transitive description: name: firebase_core_web url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.2.2" firebase_crashlytics: dependency: "direct main" description: name: firebase_crashlytics url: "https://pub.dartlang.org" source: hosted - version: "3.0.9" + version: "3.0.17" firebase_crashlytics_platform_interface: dependency: transitive description: name: firebase_crashlytics_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "3.3.10" + version: "3.3.17" firebase_remote_config: dependency: "direct main" description: name: firebase_remote_config url: "https://pub.dartlang.org" source: hosted - version: "3.0.9" + version: "3.0.15" firebase_remote_config_platform_interface: dependency: transitive description: name: firebase_remote_config_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "1.1.29" + version: "1.1.35" firebase_remote_config_web: dependency: transitive description: name: firebase_remote_config_web url: "https://pub.dartlang.org" source: hosted - version: "1.1.18" + version: "1.1.24" fixnum: dependency: transitive description: name: fixnum url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.0.1" flutter: dependency: "direct main" description: flutter @@ -446,7 +439,7 @@ packages: name: flutter_plugin_android_lifecycle url: "https://pub.dartlang.org" source: hosted - version: "2.0.5" + version: "2.0.9" flutter_secure_storage: dependency: "direct main" description: @@ -460,7 +453,7 @@ packages: name: flutter_secure_storage_linux url: "https://pub.dartlang.org" source: hosted - version: "1.1.2" + version: "1.1.3" flutter_secure_storage_macos: dependency: transitive description: @@ -526,14 +519,14 @@ packages: name: fluttertoast url: "https://pub.dartlang.org" source: hosted - version: "8.0.9" + version: "8.2.1" font_awesome_flutter: dependency: "direct main" description: name: font_awesome_flutter url: "https://pub.dartlang.org" source: hosted - version: "10.2.1" + version: "10.4.0" get_it: dependency: "direct main" description: @@ -547,49 +540,49 @@ packages: name: github url: "https://pub.dartlang.org" source: hosted - version: "9.1.0" + version: "9.11.0" glob: dependency: transitive description: name: glob url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "2.1.1" google_maps_flutter: dependency: "direct main" description: name: google_maps_flutter url: "https://pub.dartlang.org" source: hosted - version: "2.2.1" + version: "2.2.5" google_maps_flutter_android: dependency: transitive description: name: google_maps_flutter_android url: "https://pub.dartlang.org" source: hosted - version: "2.3.3" + version: "2.4.9" google_maps_flutter_ios: dependency: transitive description: name: google_maps_flutter_ios url: "https://pub.dartlang.org" source: hosted - version: "2.1.12" + version: "2.2.1" google_maps_flutter_platform_interface: dependency: transitive description: name: google_maps_flutter_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.2.4" + version: "2.2.6" graphs: dependency: transitive description: name: graphs url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.2.0" home_widget: dependency: "direct main" description: @@ -603,14 +596,14 @@ packages: name: http url: "https://pub.dartlang.org" source: hosted - version: "0.13.4" + version: "0.13.5" http_parser: dependency: transitive description: name: http_parser url: "https://pub.dartlang.org" source: hosted - version: "4.0.0" + version: "4.0.2" image: dependency: transitive description: @@ -652,7 +645,7 @@ packages: name: json_annotation url: "https://pub.dartlang.org" source: hosted - version: "4.7.0" + version: "4.8.0" lint: dependency: "direct dev" description: @@ -666,14 +659,14 @@ packages: name: logger url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.3.0" logging: dependency: transitive description: name: logging url: "https://pub.dartlang.org" source: hosted - version: "1.0.2" + version: "1.1.1" marquee: dependency: "direct main" description: @@ -729,7 +722,7 @@ packages: name: package_config url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "2.1.0" package_info_plus: dependency: "direct main" description: @@ -764,7 +757,7 @@ packages: name: package_info_plus_web url: "https://pub.dartlang.org" source: hosted - version: "1.0.5" + version: "1.0.6" package_info_plus_windows: dependency: transitive description: @@ -785,63 +778,56 @@ packages: name: path_drawing url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.0.1" path_parsing: dependency: transitive description: name: path_parsing url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.0.1" path_provider: dependency: "direct main" description: name: path_provider url: "https://pub.dartlang.org" source: hosted - version: "2.0.11" + version: "2.0.13" path_provider_android: dependency: transitive description: name: path_provider_android url: "https://pub.dartlang.org" source: hosted - version: "2.0.12" - path_provider_ios: + version: "2.0.24" + path_provider_foundation: dependency: transitive description: - name: path_provider_ios + name: path_provider_foundation url: "https://pub.dartlang.org" source: hosted - version: "2.0.8" + version: "2.2.0" path_provider_linux: dependency: transitive description: name: path_provider_linux url: "https://pub.dartlang.org" source: hosted - version: "2.1.5" - path_provider_macos: - dependency: transitive - description: - name: path_provider_macos - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.5" + version: "2.1.10" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.3" + version: "2.0.6" path_provider_windows: dependency: transitive description: name: path_provider_windows url: "https://pub.dartlang.org" source: hosted - version: "2.0.5" + version: "2.0.7" pedantic: dependency: transitive description: @@ -855,14 +841,14 @@ packages: name: percent_indicator url: "https://pub.dartlang.org" source: hosted - version: "4.2.2" + version: "4.2.3" petitparser: dependency: transitive description: name: petitparser url: "https://pub.dartlang.org" source: hosted - version: "4.4.0" + version: "5.1.0" platform: dependency: transitive description: @@ -876,7 +862,14 @@ packages: name: plugin_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.1.3" + version: "2.1.4" + pointycastle: + dependency: transitive + description: + name: pointycastle + url: "https://pub.dartlang.org" + source: hosted + version: "3.7.0" process: dependency: transitive description: @@ -890,14 +883,14 @@ packages: name: provider url: "https://pub.dartlang.org" source: hosted - version: "6.0.4" + version: "6.0.5" pub_semver: dependency: "direct main" description: name: pub_semver url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.1.3" rive: dependency: "direct main" description: @@ -911,63 +904,56 @@ packages: name: rxdart url: "https://pub.dartlang.org" source: hosted - version: "0.27.3" + version: "0.27.7" shared_preferences: dependency: "direct main" description: name: shared_preferences url: "https://pub.dartlang.org" source: hosted - version: "2.0.15" + version: "2.0.18" shared_preferences_android: dependency: transitive description: name: shared_preferences_android url: "https://pub.dartlang.org" source: hosted - version: "2.0.11" - shared_preferences_ios: + version: "2.0.17" + shared_preferences_foundation: dependency: transitive description: - name: shared_preferences_ios + name: shared_preferences_foundation url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.5" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" - shared_preferences_macos: - dependency: transitive - description: - name: shared_preferences_macos - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.3" + version: "2.1.5" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.1" shared_preferences_web: dependency: transitive description: name: shared_preferences_web url: "https://pub.dartlang.org" source: hosted - version: "2.0.3" + version: "2.0.6" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.5" simple_gesture_detector: dependency: transitive description: @@ -986,7 +972,7 @@ packages: name: source_gen url: "https://pub.dartlang.org" source: hosted - version: "1.2.6" + version: "1.2.7" source_span: dependency: transitive description: @@ -1000,14 +986,14 @@ packages: name: sqflite url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "2.2.6" sqflite_common: dependency: transitive description: name: sqflite_common url: "https://pub.dartlang.org" source: hosted - version: "2.2.0" + version: "2.4.3" stack_trace: dependency: transitive description: @@ -1021,14 +1007,14 @@ packages: name: stacked url: "https://pub.dartlang.org" source: hosted - version: "3.0.1" - stacked_core: + version: "3.2.0" + stacked_shared: dependency: transitive description: - name: stacked_core + name: stacked_shared url: "https://pub.dartlang.org" source: hosted - version: "1.2.4" + version: "1.3.0" stream_channel: dependency: transitive description: @@ -1042,7 +1028,7 @@ packages: name: stream_transform url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.0" string_scanner: dependency: transitive description: @@ -1056,14 +1042,14 @@ packages: name: synchronized url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.0.1" table_calendar: dependency: "direct main" description: name: table_calendar url: "https://pub.dartlang.org" source: hosted - version: "3.0.6" + version: "3.0.8" term_glyph: dependency: transitive description: @@ -1078,83 +1064,90 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.4.12" + timeago: + dependency: "direct main" + description: + name: timeago + url: "https://pub.dartlang.org" + source: hosted + version: "3.3.0" typed_data: dependency: transitive description: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.3.0" + version: "1.3.1" universal_io: dependency: transitive description: name: universal_io url: "https://pub.dartlang.org" source: hosted - version: "2.0.4" + version: "2.2.0" url_launcher: dependency: "direct main" description: name: url_launcher url: "https://pub.dartlang.org" source: hosted - version: "6.1.7" + version: "6.1.10" url_launcher_android: dependency: transitive description: name: url_launcher_android url: "https://pub.dartlang.org" source: hosted - version: "6.0.15" + version: "6.0.25" url_launcher_ios: dependency: transitive description: name: url_launcher_ios url: "https://pub.dartlang.org" source: hosted - version: "6.0.15" + version: "6.1.2" url_launcher_linux: dependency: transitive description: name: url_launcher_linux url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.0.4" url_launcher_macos: dependency: transitive description: name: url_launcher_macos url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.0.4" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.1.2" url_launcher_web: dependency: transitive description: name: url_launcher_web url: "https://pub.dartlang.org" source: hosted - version: "2.0.9" + version: "2.0.16" url_launcher_windows: dependency: transitive description: name: url_launcher_windows url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.0.5" uuid: dependency: transitive description: name: uuid url: "https://pub.dartlang.org" source: hosted - version: "3.0.6" + version: "3.0.7" vector_math: dependency: transitive description: @@ -1168,14 +1161,14 @@ packages: name: version url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.3" watcher: dependency: transitive description: name: watcher url: "https://pub.dartlang.org" source: hosted - version: "1.0.1" + version: "1.0.2" webview_flutter: dependency: "direct main" description: @@ -1189,49 +1182,49 @@ packages: name: webview_flutter_android url: "https://pub.dartlang.org" source: hosted - version: "2.8.3" + version: "2.10.4" webview_flutter_platform_interface: dependency: transitive description: name: webview_flutter_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "1.8.1" + version: "1.9.5" webview_flutter_wkwebview: dependency: transitive description: name: webview_flutter_wkwebview url: "https://pub.dartlang.org" source: hosted - version: "2.7.1" + version: "2.9.5" win32: dependency: transitive description: name: win32 url: "https://pub.dartlang.org" source: hosted - version: "2.4.1" + version: "2.6.1" xdg_directories: dependency: transitive description: name: xdg_directories url: "https://pub.dartlang.org" source: hosted - version: "0.2.0+1" + version: "1.0.0" xml: dependency: transitive description: name: xml url: "https://pub.dartlang.org" source: hosted - version: "5.3.1" + version: "5.4.1" yaml: dependency: transitive description: name: yaml url: "https://pub.dartlang.org" source: hosted - version: "3.1.0" + version: "3.1.1" sdks: dart: ">=2.18.0 <3.0.0" - flutter: ">=3.0.0" + flutter: ">=3.3.0" diff --git a/pubspec.yaml b/pubspec.yaml index 9eba7797a..bcdf6578c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -70,6 +70,7 @@ dependencies: marquee: 2.2.1 auto_size_text: ^3.0.0 easter_egg_trigger: ^1.0.1 + timeago: ^3.3.0 dev_dependencies: flutter_test: From 30fc18d6f87c28e459ac24540a1918655ee368bc Mon Sep 17 00:00:00 2001 From: Antoine Martineau <47289926+Udito3@users.noreply.github.com> Date: Sun, 18 Jun 2023 21:10:06 -0400 Subject: [PATCH 02/20] WIP --- lib/ui/views/dashboard_view.dart | 101 ++++++++++++++----------------- 1 file changed, 47 insertions(+), 54 deletions(-) diff --git a/lib/ui/views/dashboard_view.dart b/lib/ui/views/dashboard_view.dart index 88dcc164d..544773931 100644 --- a/lib/ui/views/dashboard_view.dart +++ b/lib/ui/views/dashboard_view.dart @@ -62,6 +62,8 @@ class _DashboardViewState extends State DashboardViewModel.promptUpdate(context, widget.updateCode); }); DashboardViewModel.launchInAppReview(); + // TODO move this to a better place + timeago.setLocaleMessages('fr', timeago.FrMessages()); } @override @@ -89,7 +91,8 @@ class _DashboardViewState extends State onReorder: (oldIndex, newIndex) => onReorder(model, oldIndex, newIndex), padding: const EdgeInsets.fromLTRB(0, 4, 0, 8), - children: _buildCards(model, NewsViewModel(intl: AppIntl.of(context))), + children: _buildCards( + model, NewsViewModel(intl: AppIntl.of(context))), proxyDecorator: (child, _, __) { return HapticsContainer(child: child); }, @@ -401,8 +404,8 @@ class _DashboardViewState extends State ]), ); - Widget _buildNewsCard(NewsViewModel model, News news) => - DismissibleCard( + Widget _buildNewsCard(NewsViewModel model, News news) => DismissibleCard( + cardColor: news.important ? AppTheme.accent : null, key: UniqueKey(), onDismissed: (DismissDirection direction) { // Nothing for test @@ -412,79 +415,69 @@ class _DashboardViewState extends State crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ - Align( - alignment: Alignment.centerLeft, - child: Container( - padding: const EdgeInsets.fromLTRB(17, 15, 0, 0), - /*child: GestureDetector( - onTap: () => _navigationService - .pushNamedAndRemoveUntil(RouterPaths.news), - child: Text(AppIntl.of(context).news_title, - style: Theme.of(context).textTheme.headline6), - ),*/ - ), - ), Container( - padding: const EdgeInsets.fromLTRB(17, 10, 15, 10), + padding: const EdgeInsets.fromLTRB(8, 8, 8, 8), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ + // Image with tags if (news.image != null) Stack( children: [ - Image.network( - news.image, - fit: BoxFit.cover, + ClipRRect( + borderRadius: BorderRadius.circular(8.0), + child: Image.network( + news.image, + fit: BoxFit.cover, + ), ), Positioned( - top: 20, // adjust the position of the tags as per your requirement - left: 20, - child: Container( - padding: EdgeInsets.all(8), - decoration: BoxDecoration( - color: Colors.blueGrey, - borderRadius: BorderRadius.circular(8), - ), - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - 'Tags', - style: TextStyle( - color: Colors.white, - fontWeight: FontWeight.bold, + top: 8, + left: 8, + child: Wrap( + spacing: 8, + children: List.generate( + news.tags.length, + (index) => Container( + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: Colors.blueGrey, + borderRadius: BorderRadius.circular(8), ), - ), - Text( - 'Tags', - style: TextStyle( - color: Colors.white, - fontWeight: FontWeight.bold, + child: Text( + news.tags[index], + style: const TextStyle( + color: Colors.white, + fontWeight: FontWeight.bold, + ), ), ), - ], - ), - ), - ), + ), + )), ], ), - - const SizedBox(height: 10), + const SizedBox(height: 8), + // Text and time Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, children: [ + // Write title with more margin over and under the title Flexible( - child: Text( - news.title, - style: Theme.of(context).textTheme.headline6, + child: Padding( + padding: EdgeInsets.symmetric(vertical: 8.0), + child: Text( + news.title, + style: Theme.of(context).textTheme.titleMedium, + ), ), ), const SizedBox(width: 10), Text( - // Format date news date - timeago.format(news.date, - locale: AppIntl.of(context).localeName), - style: Theme.of(context).textTheme.caption, + // Format news date + timeago.format(news.date, + locale: AppIntl.of(context).localeName), + style: Theme.of(context).textTheme.bodySmall, ), ], ), From 641c9e3ece9715a15fa484a4f12d4788613fc6c6 Mon Sep 17 00:00:00 2001 From: Antoine Martineau <47289926+Udito3@users.noreply.github.com> Date: Sun, 18 Jun 2023 22:02:39 -0400 Subject: [PATCH 03/20] fr short --- lib/ui/views/dashboard_view.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ui/views/dashboard_view.dart b/lib/ui/views/dashboard_view.dart index 544773931..d2abc8557 100644 --- a/lib/ui/views/dashboard_view.dart +++ b/lib/ui/views/dashboard_view.dart @@ -63,7 +63,7 @@ class _DashboardViewState extends State }); DashboardViewModel.launchInAppReview(); // TODO move this to a better place - timeago.setLocaleMessages('fr', timeago.FrMessages()); + timeago.setLocaleMessages('fr', timeago.FrShortMessages()); } @override From afef0b1dafb2abcc762f24cdaed0b1cff9bcd589 Mon Sep 17 00:00:00 2001 From: Antoine Martineau <47289926+Udito3@users.noreply.github.com> Date: Sun, 16 Jul 2023 18:03:26 -0400 Subject: [PATCH 04/20] Added colors for the tags --- lib/core/managers/news_repository.dart | 117 +++--- lib/core/models/news.dart | 79 ++-- lib/core/utils/utils.dart | 4 + lib/core/viewmodels/news_viewmodel.dart | 2 +- lib/ui/views/dashboard_view.dart | 193 +++++---- pubspec.lock | 534 ++++++++++++++++-------- 6 files changed, 590 insertions(+), 339 deletions(-) diff --git a/lib/core/managers/news_repository.dart b/lib/core/managers/news_repository.dart index a62bffc95..3ce1c6a2e 100644 --- a/lib/core/managers/news_repository.dart +++ b/lib/core/managers/news_repository.dart @@ -10,7 +10,7 @@ import 'package:notredame/core/services/networking_service.dart'; import 'package:notredame/core/managers/cache_manager.dart'; // MODELS -import 'package:notredame/core/models/News.dart'; +import 'package:notredame/core/models/news.dart'; // UTILS import 'package:notredame/core/utils/cache_exception.dart'; @@ -39,29 +39,42 @@ class NewsRepository { /// List of the news with 3 test news. List _news = [ News( - id: 1, - title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec tempus arcu sed quam tincidunt, non venenatis orci mollis.", - description: "Test 1 description", - date: DateTime.now(), - image: "https://picsum.photos/400/200", - tags: ["tag1", "tag2"], - important: true,), + id: 1, + title: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec tempus arcu sed quam tincidunt, non venenatis orci mollis.", + description: "Test 1 description", + date: DateTime.now(), + image: "https://picsum.photos/400/200", + tags: [ + Tag(text: "tag1", color: Colors.blue), + Tag(text: "tag2", color: Colors.green), + ], + important: true, + ), News( - id: 2, - title: "Test 2", - description: "Test 2 description", - date: DateTime.now(), - image: "https://picsum.photos/400/200", - tags: ["tag1", "tag2"], - important: false,), + id: 2, + title: "Test 2", + description: "Test 2 description", + date: DateTime.now(), + image: "https://picsum.photos/400/200", + tags: [ + Tag(text: "tag1", color: Colors.blue), + Tag(text: "tag2", color: Colors.green), + ], + important: false, + ), News( - id: 3, - title: "Test 3", - description: "Test 3 description", - date: DateTime.now(), - image: "https://picsum.photos/400/200", - tags: ["tag1", "tag2"], - important: true,), + id: 3, + title: "Test 3", + description: "Test 3 description", + date: DateTime.now(), + image: "https://picsum.photos/400/200", + tags: [ + Tag(text: "tag1", color: Colors.blue), + Tag(text: "tag2", color: Colors.green), + ], + important: true, + ), ]; List get news => _news; @@ -69,8 +82,7 @@ class NewsRepository { /// Get and update the list of news. /// After fetching the news from the [?] the [CacheManager] /// is updated with the latest version of the news. - Future> getNews( - {bool fromCacheOnly = false}) async { + Future> getNews({bool fromCacheOnly = false}) async { // Force fromCacheOnly mode when user has no connectivity if (!(await _networkingService.hasConnectivity())) { // ignore: parameter_assignments @@ -97,8 +109,7 @@ class NewsRepository { try { // Update cache - _cacheManager.update( - newsCacheKey, jsonEncode(_news)); + _cacheManager.update(newsCacheKey, jsonEncode(_news)); } on CacheException catch (_) { // Do nothing, the caching will retry later and the error has been logged by the [CacheManager] _logger.e( @@ -112,15 +123,15 @@ class NewsRepository { _news = []; try { final List responseCache = - jsonDecode(await _cacheManager.get(newsCacheKey)) - as List; + jsonDecode(await _cacheManager.get(newsCacheKey)) as List; // Build list of news loaded from the cache. - _news = responseCache.map((e) => - News.fromJson(e as Map)).toList(); + _news = responseCache + .map((e) => News.fromJson(e as Map)) + .toList(); - _logger.d( - "$tag - getNewsFromCache: ${_news.length} news loaded from cache"); + _logger + .d("$tag - getNewsFromCache: ${_news.length} news loaded from cache"); } on CacheException catch (_) { _logger.e( "$tag - getNewsFromCache: exception raised will trying to load news from cache."); @@ -132,32 +143,36 @@ class NewsRepository { final List fetchedNews = []; fetchedNews.add(News( - id: 1, + id: 1, + title: "Nouvelle fonctionnalité", + description: + "Vous pouvez désormais consulter les nouvelles de votre école directement dans l'application. Pour cela, cliquez sur le menu en haut à gauche et sélectionnez \"Nouvelles\".", + image: "https://i.imgur.com/1ZQ2Z0M.png", + tags: [ + Tag(text: "Nouvelles", color: Colors.blue), + ], + date: DateTime.now(), + important: true, + )); + +// Add three more random news + for (int i = 0; i < 3; i++) { + fetchedNews.add(News( + id: i + 2, title: "Nouvelle fonctionnalité", description: - "Vous pouvez désormais consulter les nouvelles de votre école directement dans l'application. Pour cela, cliquez sur le menu en haut à gauche et sélectionnez \"Nouvelles\".", + "Vous pouvez désormais consulter les nouvelles de votre école directement dans l'application. Pour cela, cliquez sur le menu en haut à gauche et sélectionnez \"Nouvelles\".", image: "https://i.imgur.com/1ZQ2Z0M.png", - tags: ["Nouvelles"], + tags: [ + Tag(text: "Nouvelles", color: Colors.blue), + ], date: DateTime.now(), - important: true)); - - // Add three more random news - for (int i = 0; i < 3; i++) { - fetchedNews.add(News( - id: i + 2, - title: "Nouvelle fonctionnalité", - description: - "Vous pouvez désormais consulter les nouvelles de votre école directement dans l'application. Pour cela, cliquez sur le menu en haut à gauche et sélectionnez \"Nouvelles\".", - image: "https://i.imgur.com/1ZQ2Z0M.png", - tags: ["Nouvelles"], - date: DateTime.now(), - important: false)); + important: false, + )); } - _logger.d( - "$tag - getNews: fetched ${fetchedNews.length} news."); + _logger.d("$tag - getNews: fetched ${fetchedNews.length} news."); return fetchedNews; } - } diff --git a/lib/core/models/news.dart b/lib/core/models/news.dart index 003aa79c3..b700a509e 100644 --- a/lib/core/models/news.dart +++ b/lib/core/models/news.dart @@ -1,4 +1,3 @@ -// FLUTTER / DART / THIRD-PARTIES import 'package:flutter/material.dart'; class News { @@ -6,38 +5,70 @@ class News { final String title; final String description; final String image; - // À changer pour une liste de tags - final List tags; + final List tags; final DateTime date; final bool important; - News( - {@required this.id, - @required this.title, - @required this.description, - @required this.image, - @required this.tags, - @required this.date, - @required this.important}); + News({ + @required this.id, + @required this.title, + @required this.description, + @required this.image, + @required this.tags, + @required this.date, + @required this.important, + }); /// Used to create [News] instance from a JSON file - factory News.fromJson(Map map) => News( + factory News.fromJson(Map map) { + return News( id: map['id'] as int, title: map['title'] as String, description: map['description'] as String, image: map['image'] as String, - tags: List.from(map['tags'] as List), + tags: List.from( + (map['tags'] as List).map((tagMap) => Tag.fromJson(tagMap))), date: DateTime.parse(map['date'] as String), - important: map['important'] as bool); - - Map toJson() => { - 'id': id, - 'title': title, - 'description': description, - 'image': image, - 'tags': tags, - 'date': date.toString(), - 'important': important - }; + important: map['important'] as bool, + ); + } + + Map toJson() { + return { + 'id': id, + 'title': title, + 'description': description, + 'image': image, + 'tags': tags.map((tag) => tag.toJson()).toList(), + 'date': date.toString(), + 'important': important, + }; + } } +class Tag { + final String text; + final Color color; + + Tag({ + @required this.text, + @required this.color, + }); + + factory Tag.fromJson(dynamic tagMap) { + if (tagMap is Map) { + return Tag( + text: tagMap['text'] as String, + color: Color(tagMap['color'] as int), + ); + } + throw ArgumentError('Invalid tagMap type. Expected Map.'); + } + + Map toJson() { + return { + 'text': text, + 'color': color.value, + }; + } +} diff --git a/lib/core/utils/utils.dart b/lib/core/utils/utils.dart index 9925a7dc4..b4e8f05ab 100644 --- a/lib/core/utils/utils.dart +++ b/lib/core/utils/utils.dart @@ -32,6 +32,10 @@ mixin Utils { : darkColor; } + static bool isDarkTheme(BuildContext context) { + return Theme.of(context).brightness == Brightness.dark; + } + /// Get first day of the week depending on startingDay which corresponds to weekday static DateTime getFirstDayOfCurrentWeek( DateTime currentDate, StartingDayOfWeek startingDay) { diff --git a/lib/core/viewmodels/news_viewmodel.dart b/lib/core/viewmodels/news_viewmodel.dart index db19e354c..898e5b7be 100644 --- a/lib/core/viewmodels/news_viewmodel.dart +++ b/lib/core/viewmodels/news_viewmodel.dart @@ -13,7 +13,7 @@ import 'package:notredame/core/managers/news_repository.dart'; import 'package:notredame/core/managers/settings_manager.dart'; // MODELS -import 'package:notredame/core/models/News.dart'; +import 'package:notredame/core/models/news.dart'; // UTILS diff --git a/lib/ui/views/dashboard_view.dart b/lib/ui/views/dashboard_view.dart index d2abc8557..000c458d7 100644 --- a/lib/ui/views/dashboard_view.dart +++ b/lib/ui/views/dashboard_view.dart @@ -20,7 +20,7 @@ import 'package:notredame/ui/widgets/haptics_container.dart'; // MODELS / CONSTANTS import 'package:ets_api_clients/models.dart'; -import 'package:notredame/core/models/News.dart'; +import 'package:notredame/core/models/news.dart'; import 'package:notredame/locator.dart'; import 'package:notredame/core/constants/preferences_flags.dart'; import 'package:notredame/core/constants/urls.dart'; @@ -404,89 +404,120 @@ class _DashboardViewState extends State ]), ); - Widget _buildNewsCard(NewsViewModel model, News news) => DismissibleCard( - cardColor: news.important ? AppTheme.accent : null, - key: UniqueKey(), - onDismissed: (DismissDirection direction) { - // Nothing for test - }, - isBusy: model.busy(model.news), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Container( - padding: const EdgeInsets.fromLTRB(8, 8, 8, 8), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - // Image with tags - if (news.image != null) - Stack( - children: [ - ClipRRect( - borderRadius: BorderRadius.circular(8.0), - child: Image.network( - news.image, - fit: BoxFit.cover, - ), - ), - Positioned( - top: 8, - left: 8, - child: Wrap( - spacing: 8, - children: List.generate( - news.tags.length, - (index) => Container( - padding: const EdgeInsets.all(8), - decoration: BoxDecoration( - color: Colors.blueGrey, - borderRadius: BorderRadius.circular(8), - ), - child: Text( - news.tags[index], - style: const TextStyle( - color: Colors.white, - fontWeight: FontWeight.bold, - ), - ), - ), - ), - )), - ], - ), - const SizedBox(height: 8), - // Text and time - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - // Write title with more margin over and under the title - Flexible( - child: Padding( - padding: EdgeInsets.symmetric(vertical: 8.0), - child: Text( - news.title, - style: Theme.of(context).textTheme.titleMedium, - ), - ), - ), - const SizedBox(width: 10), - Text( - // Format news date - timeago.format(news.date, - locale: AppIntl.of(context).localeName), - style: Theme.of(context).textTheme.bodySmall, - ), - ], - ), - ], + Widget _buildImageWithTags(News news) { + if (news.image == null) { + return const SizedBox.shrink(); + } + + return Stack( + children: [ + ClipRRect( + borderRadius: BorderRadius.circular(8.0), + child: Image.network( + news.image, + fit: BoxFit.cover, + ), + ), + Positioned( + top: 8, + left: 8, + child: Wrap( + spacing: 8, + children: List.generate( + news.tags.length, + (index) => Container( + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: news.tags[index].color, + borderRadius: BorderRadius.circular(8), + ), + child: Text( + news.tags[index].text, + style: TextStyle( + color: _getTagTextColor(news.tags[index].color), + fontWeight: FontWeight.bold, + ), ), ), - ], + ), ), - ); + ), + ], + ); +} + +Color _getTagTextColor(Color backgroundColor) { + final luminance = backgroundColor.computeLuminance(); + return luminance > 0.5 ? Colors.black : Colors.white; +} + + + Widget _buildTitleAndTime(News news, BuildContext context) { + final TextStyle titleStyle = news.important + ? Theme.of(context).textTheme.titleMedium.copyWith( + color: Colors.white, + fontWeight: FontWeight.bold, + ) + : Theme.of(context).textTheme.titleMedium.copyWith( + fontWeight: FontWeight.w500, + ); + + final TextStyle timeStyle = news.important && !Utils.isDarkTheme(context) + ? Theme.of(context).textTheme.bodySmall.copyWith( + color: Colors.white, + fontWeight: FontWeight.bold, + ) + : Theme.of(context).textTheme.bodySmall; + + return Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Flexible( + child: Padding( + padding: EdgeInsets.symmetric(vertical: 8.0), + child: Text( + news.title, + style: titleStyle, + ), + ), + ), + const SizedBox(width: 10), + Text( + timeago.format(news.date, locale: AppIntl.of(context).localeName), + style: timeStyle, + ), + ], + ); + } + + Widget _buildNewsCard(NewsViewModel model, News news) { + return DismissibleCard( + cardColor: news.important ? AppTheme.accent : null, + key: UniqueKey(), + onDismissed: (DismissDirection direction) { + // Nothing for test + }, + isBusy: model.busy(model.news), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Container( + padding: const EdgeInsets.fromLTRB(8, 8, 8, 8), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _buildImageWithTags(news), + const SizedBox(height: 8), + _buildTitleAndTime(news, context), + ], + ), + ), + ], + ), + ); + } void dismissCard(DashboardViewModel model, PreferencesFlag flag) { model.hideCard(flag); diff --git a/pubspec.lock b/pubspec.lock index c96ecfc98..3cbeb02ae 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,245 +5,280 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - url: "https://pub.dartlang.org" + sha256: "3444216bfd127af50bbe4862d8843ed44db946dd933554f0d7285e89f10e28ac" + url: "https://pub.dev" source: hosted version: "50.0.0" _flutterfire_internals: dependency: transitive description: name: _flutterfire_internals - url: "https://pub.dartlang.org" + sha256: "330d7fcbb72624f5b6d374af8b059b0ef4ba96ba5b8987f874964a1287eb617d" + url: "https://pub.dev" source: hosted version: "1.0.18" analyzer: dependency: transitive description: name: analyzer - url: "https://pub.dartlang.org" + sha256: "68796c31f510c8455a06fed75fc97d8e5ad04d324a830322ab3efc9feb6201c1" + url: "https://pub.dev" source: hosted version: "5.2.0" archive: dependency: transitive description: name: archive - url: "https://pub.dartlang.org" + sha256: d6347d54a2d8028e0437e3c099f66fdb8ae02c4720c1e7534c9f24c10351f85d + url: "https://pub.dev" source: hosted version: "3.3.6" args: dependency: transitive description: name: args - url: "https://pub.dartlang.org" + sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440" + url: "https://pub.dev" source: hosted version: "2.4.0" async: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + url: "https://pub.dev" source: hosted - version: "2.9.0" + version: "2.10.0" auto_size_text: dependency: "direct main" description: name: auto_size_text - url: "https://pub.dartlang.org" + sha256: "3f5261cd3fb5f2a9ab4e2fc3fba84fd9fcaac8821f20a1d4e71f557521b22599" + url: "https://pub.dev" source: hosted version: "3.0.0" boolean_selector: dependency: transitive description: name: boolean_selector - url: "https://pub.dartlang.org" + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" build: dependency: transitive description: name: build - url: "https://pub.dartlang.org" + sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777" + url: "https://pub.dev" source: hosted version: "2.3.1" built_collection: dependency: transitive description: name: built_collection - url: "https://pub.dartlang.org" + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" source: hosted version: "5.1.1" built_value: dependency: transitive description: name: built_value - url: "https://pub.dartlang.org" + sha256: "31b7c748fd4b9adf8d25d72a4c4a59ef119f12876cf414f94f8af5131d5fa2b0" + url: "https://pub.dev" source: hosted version: "8.4.4" characters: dependency: transitive description: name: characters - url: "https://pub.dartlang.org" + sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + url: "https://pub.dev" source: hosted version: "1.2.1" checked_yaml: dependency: transitive description: name: checked_yaml - url: "https://pub.dartlang.org" + sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" + url: "https://pub.dev" source: hosted version: "2.0.2" cli_util: dependency: transitive description: name: cli_util - url: "https://pub.dartlang.org" + sha256: "66f86e916d285c1a93d3b79587d94bd71984a66aac4ff74e524cfa7877f1395c" + url: "https://pub.dev" source: hosted version: "0.3.5" clock: dependency: transitive description: name: clock - url: "https://pub.dartlang.org" + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" source: hosted version: "1.1.1" code_builder: dependency: transitive description: name: code_builder - url: "https://pub.dartlang.org" + sha256: "0d43dd1288fd145de1ecc9a3948ad4a6d5a82f0a14c4fdd0892260787d975cbe" + url: "https://pub.dev" source: hosted version: "4.4.0" collection: dependency: transitive description: name: collection - url: "https://pub.dartlang.org" + sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + url: "https://pub.dev" source: hosted - version: "1.16.0" + version: "1.17.0" connectivity_plus: dependency: "direct main" description: name: connectivity_plus - url: "https://pub.dartlang.org" + sha256: "3f8fe4e504c2d33696dac671a54909743bc6a902a9bb0902306f7a2aed7e528e" + url: "https://pub.dev" source: hosted version: "2.3.9" connectivity_plus_linux: dependency: transitive description: name: connectivity_plus_linux - url: "https://pub.dartlang.org" + sha256: "3caf859d001f10407b8e48134c761483e4495ae38094ffcca97193f6c271f5e2" + url: "https://pub.dev" source: hosted version: "1.3.1" connectivity_plus_macos: dependency: transitive description: name: connectivity_plus_macos - url: "https://pub.dartlang.org" + sha256: "488d2de1e47e1224ad486e501b20b088686ba1f4ee9c4420ecbc3b9824f0b920" + url: "https://pub.dev" source: hosted version: "1.2.6" connectivity_plus_platform_interface: dependency: transitive description: name: connectivity_plus_platform_interface - url: "https://pub.dartlang.org" + sha256: cf1d1c28f4416f8c654d7dc3cd638ec586076255d407cef3ddbdaf178272a71a + url: "https://pub.dev" source: hosted version: "1.2.4" connectivity_plus_web: dependency: transitive description: name: connectivity_plus_web - url: "https://pub.dartlang.org" + sha256: "81332be1b4baf8898fed17bb4fdef27abb7c6fd990bf98c54fd978478adf2f1a" + url: "https://pub.dev" source: hosted version: "1.2.5" connectivity_plus_windows: dependency: transitive description: name: connectivity_plus_windows - url: "https://pub.dartlang.org" + sha256: "535b0404b4d5605c4dd8453d67e5d6d2ea0dd36e3b477f50f31af51b0aeab9dd" + url: "https://pub.dev" source: hosted version: "1.2.2" convert: dependency: transitive description: name: convert - url: "https://pub.dartlang.org" + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" source: hosted version: "3.1.1" crypto: dependency: transitive description: name: crypto - url: "https://pub.dartlang.org" + sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + url: "https://pub.dev" source: hosted version: "3.0.2" dart_style: dependency: transitive description: name: dart_style - url: "https://pub.dartlang.org" + sha256: "5be16bf1707658e4c03078d4a9b90208ded217fb02c163e207d334082412f2fb" + url: "https://pub.dev" source: hosted version: "2.2.5" dbus: dependency: transitive description: name: dbus - url: "https://pub.dartlang.org" + sha256: "4f814fc7e73057f78f307a6c4714fe2ffb4bdb994ab1970540a068ec4d5a45be" + url: "https://pub.dev" source: hosted version: "0.7.3" device_info_plus: dependency: "direct main" description: name: device_info_plus - url: "https://pub.dartlang.org" + sha256: "79439ccee1641b9cbb95dd0a6b3fb478eab63aab05700249d371626ec6c1810f" + url: "https://pub.dev" source: hosted version: "4.0.0" device_info_plus_linux: dependency: transitive description: name: device_info_plus_linux - url: "https://pub.dartlang.org" + sha256: e4eb5db4704f5534e872148a21cfcd39581022b63df556da6720d88f7c9f91a9 + url: "https://pub.dev" source: hosted version: "2.1.1" device_info_plus_macos: dependency: transitive description: name: device_info_plus_macos - url: "https://pub.dartlang.org" + sha256: "38871fd2ad31871399d8307630c9f4eb5941dd2c643ee221c44d58de95d367a1" + url: "https://pub.dev" source: hosted version: "2.2.3" device_info_plus_platform_interface: dependency: transitive description: name: device_info_plus_platform_interface - url: "https://pub.dartlang.org" + sha256: b2743934f0efc3e291880d76fb341ea114b7e8417d77ee0f93bd21f5dfd3e8d2 + url: "https://pub.dev" source: hosted version: "2.6.1" device_info_plus_web: dependency: transitive description: name: device_info_plus_web - url: "https://pub.dartlang.org" + sha256: "38715ad1ef3bee8915dd7bee08a9ac9ab54472a8df425c887062a3046209f663" + url: "https://pub.dev" source: hosted version: "2.1.0" device_info_plus_windows: dependency: transitive description: name: device_info_plus_windows - url: "https://pub.dartlang.org" + sha256: "8fb1403fc94636d6ab48aeebb5f9379f2ca51cde3b337167ec6f39db09234492" + url: "https://pub.dev" source: hosted version: "2.1.1" easter_egg_trigger: dependency: "direct main" description: name: easter_egg_trigger - url: "https://pub.dartlang.org" + sha256: "094c16e5ebf15c75131e2fe87944e91ca87524f4ffb88f0128e477befbe43501" + url: "https://pub.dev" source: hosted version: "1.0.1" enum_to_string: dependency: "direct main" description: name: enum_to_string - url: "https://pub.dartlang.org" + sha256: bd9e83a33b754cb43a75b36a9af2a0b92a757bfd9847d2621ca0b1bed45f8e7a + url: "https://pub.dev" source: hosted version: "2.0.1" ets_api_clients: @@ -259,126 +294,144 @@ packages: dependency: transitive description: name: fading_edge_scrollview - url: "https://pub.dartlang.org" + sha256: fcc6184eb6ea6761f310a3619bccd1f59520380328cb1a9fa161730bb2078910 + url: "https://pub.dev" source: hosted version: "2.0.1" fake_async: dependency: transitive description: name: fake_async - url: "https://pub.dartlang.org" + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" source: hosted version: "1.3.1" feature_discovery: dependency: "direct main" description: name: feature_discovery - url: "https://pub.dartlang.org" + sha256: c4008f3d78515883354ab095cabaefbd5116fb7005b150d28cead306f03f4b30 + url: "https://pub.dev" source: hosted version: "0.14.1" feedback: dependency: "direct main" description: name: feedback - url: "https://pub.dartlang.org" + sha256: "912ffe11317f88585410818885a5312d044f025bd9b5633eab18f5808d28ac54" + url: "https://pub.dev" source: hosted version: "2.5.0" ffi: dependency: transitive description: name: ffi - url: "https://pub.dartlang.org" + sha256: "13a6ccf6a459a125b3fcdb6ec73bd5ff90822e071207c663bfd1f70062d51d18" + url: "https://pub.dev" source: hosted version: "1.2.1" file: dependency: transitive description: name: file - url: "https://pub.dartlang.org" + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" source: hosted version: "6.1.4" firebase_analytics: dependency: "direct main" description: name: firebase_analytics - url: "https://pub.dartlang.org" + sha256: "48202f083e63ec56e00d27bf4bab5600c73d850134bcda262e3b9634ac841826" + url: "https://pub.dev" source: hosted version: "10.1.6" firebase_analytics_platform_interface: dependency: transitive description: name: firebase_analytics_platform_interface - url: "https://pub.dartlang.org" + sha256: "56bc6da503e4536d5c4d0ab41f25fb9fe58379b4f9bac5af9b091735764a141c" + url: "https://pub.dev" source: hosted version: "3.3.23" firebase_analytics_web: dependency: transitive description: name: firebase_analytics_web - url: "https://pub.dartlang.org" + sha256: "58f8992a4661dec1671255d31d4755721456aad07ae00b49ae303a8afcbc739c" + url: "https://pub.dev" source: hosted version: "0.5.1+14" firebase_core: dependency: "direct main" description: name: firebase_core - url: "https://pub.dartlang.org" + sha256: "75f747cafd7cbd6c00b908e3a7aa59fc31593d46ba8165d9ee8a79e69464a394" + url: "https://pub.dev" source: hosted version: "2.8.0" firebase_core_platform_interface: dependency: transitive description: name: firebase_core_platform_interface - url: "https://pub.dartlang.org" + sha256: "5615b30c36f55b2777d0533771deda7e5730e769e5d3cb7fda79e9bed86cfa55" + url: "https://pub.dev" source: hosted version: "4.5.3" firebase_core_web: dependency: transitive description: name: firebase_core_web - url: "https://pub.dartlang.org" + sha256: "0c1cf1f1022d2245ac117443bb95207952ca770281524d2908e323bc063fb8ff" + url: "https://pub.dev" source: hosted version: "2.2.2" firebase_crashlytics: dependency: "direct main" description: name: firebase_crashlytics - url: "https://pub.dartlang.org" + sha256: "5410b6ab2009fc6c181ca82e16525fdcb324c5851933bfbb49246543b1005ebc" + url: "https://pub.dev" source: hosted version: "3.0.17" firebase_crashlytics_platform_interface: dependency: transitive description: name: firebase_crashlytics_platform_interface - url: "https://pub.dartlang.org" + sha256: bf3d3791c51a8448413b5ebd8388fa7db239a3e165db6bbd8ab58ef0e8f61906 + url: "https://pub.dev" source: hosted version: "3.3.17" firebase_remote_config: dependency: "direct main" description: name: firebase_remote_config - url: "https://pub.dartlang.org" + sha256: "191aa5376ccf512d12e124dc7a99abcb6bd5d4e2b073d102253dd94d5a513e57" + url: "https://pub.dev" source: hosted version: "3.0.15" firebase_remote_config_platform_interface: dependency: transitive description: name: firebase_remote_config_platform_interface - url: "https://pub.dartlang.org" + sha256: "3f23e4944011852da5fdd073758009c52d468d78a5a4e3c28752c11de430941a" + url: "https://pub.dev" source: hosted version: "1.1.35" firebase_remote_config_web: dependency: transitive description: name: firebase_remote_config_web - url: "https://pub.dartlang.org" + sha256: e79a73c7b42ba283de122f1aed79a8923ec526e6bc8a554e798520b453fca351 + url: "https://pub.dev" source: hosted version: "1.1.24" fixnum: dependency: transitive description: name: fixnum - url: "https://pub.dartlang.org" + sha256: "04be3e934c52e082558cc9ee21f42f5c1cd7a1262f4c63cd0357c08d5bba81ec" + url: "https://pub.dev" source: hosted version: "1.0.1" flutter: @@ -390,42 +443,48 @@ packages: dependency: "direct main" description: name: flutter_cache_manager - url: "https://pub.dartlang.org" + sha256: "32cd900555219333326a2d0653aaaf8671264c29befa65bbd9856d204a4c9fb3" + url: "https://pub.dev" source: hosted version: "3.3.0" flutter_config: dependency: "direct dev" description: name: flutter_config - url: "https://pub.dartlang.org" + sha256: "8e2be2d560a52e06d2ef53a31913a11fc80ef708a442571c96194fd32e29fb1a" + url: "https://pub.dev" source: hosted version: "2.0.0" flutter_custom_tabs: dependency: "direct main" description: name: flutter_custom_tabs - url: "https://pub.dartlang.org" + sha256: bebb9552438eb3aea8f8511d48e41abdd0d05ff3e9a74622a4d1acd2bffd242c + url: "https://pub.dev" source: hosted version: "1.0.4" flutter_custom_tabs_platform_interface: dependency: transitive description: name: flutter_custom_tabs_platform_interface - url: "https://pub.dartlang.org" + sha256: bbd2d9a2ff22d27e079a35302ddd3da9f2328110c370d56c81655a7ba306fee2 + url: "https://pub.dev" source: hosted version: "1.0.1" flutter_custom_tabs_web: dependency: transitive description: name: flutter_custom_tabs_web - url: "https://pub.dartlang.org" + sha256: d735abff9a1b215018dfe2584f131fe0a3bb0e3b685fbd6ae8a55cf5c4d7dcd8 + url: "https://pub.dev" source: hosted version: "1.0.0" flutter_launcher_icons: dependency: "direct dev" description: name: flutter_launcher_icons - url: "https://pub.dartlang.org" + sha256: ce0e501cfc258907842238e4ca605e74b7fd1cdf04b3b43e86c43f3e40a1592c + url: "https://pub.dev" source: hosted version: "0.11.0" flutter_localizations: @@ -437,70 +496,80 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - url: "https://pub.dartlang.org" + sha256: c224ac897bed083dabf11f238dd11a239809b446740be0c2044608c50029ffdf + url: "https://pub.dev" source: hosted version: "2.0.9" flutter_secure_storage: dependency: "direct main" description: name: flutter_secure_storage - url: "https://pub.dartlang.org" + sha256: de957362e046bc68da8dcf6c1d922cb8bdad8dd4979ec69480cf1a3c481abe8e + url: "https://pub.dev" source: hosted version: "6.1.0" flutter_secure_storage_linux: dependency: transitive description: name: flutter_secure_storage_linux - url: "https://pub.dartlang.org" + sha256: "0912ae29a572230ad52d8a4697e5518d7f0f429052fd51df7e5a7952c7efe2a3" + url: "https://pub.dev" source: hosted version: "1.1.3" flutter_secure_storage_macos: dependency: transitive description: name: flutter_secure_storage_macos - url: "https://pub.dartlang.org" + sha256: "388f76fd0f093e7415a39ec4c169ae7cceeee6d9f9ba529d788a13f2be4de7bd" + url: "https://pub.dev" source: hosted version: "1.1.2" flutter_secure_storage_platform_interface: dependency: transitive description: name: flutter_secure_storage_platform_interface - url: "https://pub.dartlang.org" + sha256: b3773190e385a3c8a382007893d678ae95462b3c2279e987b55d140d3b0cb81b + url: "https://pub.dev" source: hosted version: "1.0.1" flutter_secure_storage_web: dependency: transitive description: name: flutter_secure_storage_web - url: "https://pub.dartlang.org" + sha256: "42938e70d4b872e856e678c423cc0e9065d7d294f45bc41fc1981a4eb4beaffe" + url: "https://pub.dev" source: hosted version: "1.1.1" flutter_secure_storage_windows: dependency: transitive description: name: flutter_secure_storage_windows - url: "https://pub.dartlang.org" + sha256: ca89c8059cf439985aa83c59619b3674c7ef6cc2e86943d169a7369d6a69cab5 + url: "https://pub.dev" source: hosted version: "1.1.3" flutter_siren: dependency: "direct main" description: name: flutter_siren - url: "https://pub.dartlang.org" + sha256: "0814d890072c0d474d49e1a0e1e3edfb5a88756fa1890663b07685d4a09b7f73" + url: "https://pub.dev" source: hosted version: "1.2.0" flutter_staggered_animations: dependency: "direct main" description: name: flutter_staggered_animations - url: "https://pub.dartlang.org" + sha256: "81d3c816c9bb0dca9e8a5d5454610e21ffb068aedb2bde49d2f8d04f75538351" + url: "https://pub.dev" source: hosted version: "1.1.1" flutter_svg: dependency: "direct main" description: name: flutter_svg - url: "https://pub.dartlang.org" + sha256: c9bb2757b8a0bbf8e45f4069a90d2b9dbafc80b1a5e28d43e29088be533e6df4 + url: "https://pub.dev" source: hosted version: "1.0.3" flutter_test: @@ -517,448 +586,512 @@ packages: dependency: "direct main" description: name: fluttertoast - url: "https://pub.dartlang.org" + sha256: "2f9c4d3f4836421f7067a28f8939814597b27614e021da9d63e5d3fb6e212d25" + url: "https://pub.dev" source: hosted version: "8.2.1" font_awesome_flutter: dependency: "direct main" description: name: font_awesome_flutter - url: "https://pub.dartlang.org" + sha256: "959ef4add147753f990b4a7c6cccb746d5792dbdc81b1cde99e62e7edb31b206" + url: "https://pub.dev" source: hosted version: "10.4.0" get_it: dependency: "direct main" description: name: get_it - url: "https://pub.dartlang.org" + sha256: "290fde3a86072e4b37dbb03c07bec6126f0ecc28dad403c12ffe2e5a2d751ab7" + url: "https://pub.dev" source: hosted version: "7.2.0" github: dependency: "direct main" description: name: github - url: "https://pub.dartlang.org" + sha256: "3150898cd04af1213379b98fcd3f75681518eb12bb37b1c3ac489656b98c2138" + url: "https://pub.dev" source: hosted version: "9.11.0" glob: dependency: transitive description: name: glob - url: "https://pub.dartlang.org" + sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" + url: "https://pub.dev" source: hosted version: "2.1.1" google_maps_flutter: dependency: "direct main" description: name: google_maps_flutter - url: "https://pub.dartlang.org" + sha256: "24392ef192f3b00bcd93151375676805a9933574423a5bd5509a0ead2e8a4215" + url: "https://pub.dev" source: hosted version: "2.2.5" google_maps_flutter_android: dependency: transitive description: name: google_maps_flutter_android - url: "https://pub.dartlang.org" + sha256: a8ee18649a67750cbd477a6867a1bf9c4154c5e9f69d722c8b53a627a6d58303 + url: "https://pub.dev" source: hosted version: "2.4.9" google_maps_flutter_ios: dependency: transitive description: name: google_maps_flutter_ios - url: "https://pub.dartlang.org" + sha256: e9ad74415a222573625a2c1717adc1e375b18e8ce660fc12db734d1bda1132d4 + url: "https://pub.dev" source: hosted version: "2.2.1" google_maps_flutter_platform_interface: dependency: transitive description: name: google_maps_flutter_platform_interface - url: "https://pub.dartlang.org" + sha256: a07811d2b82055815ede75e1fe4b7b76f71a0b4820b26f71bdaddd157d6a3e20 + url: "https://pub.dev" source: hosted version: "2.2.6" graphs: dependency: transitive description: name: graphs - url: "https://pub.dartlang.org" + sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2 + url: "https://pub.dev" source: hosted version: "2.2.0" home_widget: dependency: "direct main" description: name: home_widget - url: "https://pub.dartlang.org" + sha256: "9514c47422d511e87a3923ffed3fc4eb82540e168d7715d1560ceb1f02d5ec80" + url: "https://pub.dev" source: hosted version: "0.1.6" http: dependency: "direct main" description: name: http - url: "https://pub.dartlang.org" + sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + url: "https://pub.dev" source: hosted version: "0.13.5" http_parser: dependency: transitive description: name: http_parser - url: "https://pub.dartlang.org" + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" source: hosted version: "4.0.2" image: dependency: transitive description: name: image - url: "https://pub.dartlang.org" + sha256: "02bafd3b4f399bfeb10034deba9753d93b55ce41cd0c4d3d8b355626f80e5b32" + url: "https://pub.dev" source: hosted version: "3.1.3" in_app_review: dependency: "direct main" description: name: in_app_review - url: "https://pub.dartlang.org" + sha256: "16328b8202d36522322b95804ae5d975577aa9f584d634985849ba1099645850" + url: "https://pub.dev" source: hosted version: "2.0.6" in_app_review_platform_interface: dependency: transitive description: name: in_app_review_platform_interface - url: "https://pub.dartlang.org" + sha256: b12ec9aaf6b34d3a72aa95895eb252b381896246bdad4ef378d444affe8410ef + url: "https://pub.dev" source: hosted version: "2.0.4" intl: dependency: transitive description: name: intl - url: "https://pub.dartlang.org" + sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" + url: "https://pub.dev" source: hosted version: "0.17.0" js: dependency: transitive description: name: js - url: "https://pub.dartlang.org" + sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + url: "https://pub.dev" source: hosted - version: "0.6.4" + version: "0.6.5" json_annotation: dependency: transitive description: name: json_annotation - url: "https://pub.dartlang.org" + sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317 + url: "https://pub.dev" source: hosted version: "4.8.0" lint: dependency: "direct dev" description: name: lint - url: "https://pub.dartlang.org" + sha256: "3e9343b1cededcfb1e8b40d0dbd3592b7a1c6c0121545663a991433390c2bc97" + url: "https://pub.dev" source: hosted version: "2.0.1" logger: dependency: "direct main" description: name: logger - url: "https://pub.dartlang.org" + sha256: db2ff852ed77090ba9f62d3611e4208a3d11dfa35991a81ae724c113fcb3e3f7 + url: "https://pub.dev" source: hosted version: "1.3.0" logging: dependency: transitive description: name: logging - url: "https://pub.dartlang.org" + sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" + url: "https://pub.dev" source: hosted version: "1.1.1" marquee: dependency: "direct main" description: name: marquee - url: "https://pub.dartlang.org" + sha256: ac5fd2176dd6262d9eec0d0cc6daa99edcbd88097433cfe86a889112cd254145 + url: "https://pub.dev" source: hosted version: "2.2.1" matcher: dependency: transitive description: name: matcher - url: "https://pub.dartlang.org" + sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + url: "https://pub.dev" source: hosted - version: "0.12.12" + version: "0.12.13" material_color_utilities: dependency: transitive description: name: material_color_utilities - url: "https://pub.dartlang.org" + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + url: "https://pub.dev" source: hosted - version: "0.1.5" + version: "0.2.0" meta: dependency: transitive description: name: meta - url: "https://pub.dartlang.org" + sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + url: "https://pub.dev" source: hosted version: "1.8.0" mockito: dependency: "direct dev" description: name: mockito - url: "https://pub.dartlang.org" + sha256: "2a8a17b82b1bde04d514e75d90d634a0ac23f6cb4991f6098009dd56836aeafe" + url: "https://pub.dev" source: hosted version: "5.3.2" nested: dependency: transitive description: name: nested - url: "https://pub.dartlang.org" + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" source: hosted version: "1.0.0" nm: dependency: transitive description: name: nm - url: "https://pub.dartlang.org" + sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254" + url: "https://pub.dev" source: hosted version: "0.5.0" package_config: dependency: transitive description: name: package_config - url: "https://pub.dartlang.org" + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" source: hosted version: "2.1.0" package_info_plus: dependency: "direct main" description: name: package_info_plus - url: "https://pub.dartlang.org" + sha256: "7a6114becdf042be2b0777d77ace954d4a205644171a1cbd8712976b9bbb837c" + url: "https://pub.dev" source: hosted version: "1.4.2" package_info_plus_linux: dependency: transitive description: name: package_info_plus_linux - url: "https://pub.dartlang.org" + sha256: "04b575f44233d30edbb80a94e57cad9107aada334fc02aabb42b6becd13c43fc" + url: "https://pub.dev" source: hosted version: "1.0.5" package_info_plus_macos: dependency: transitive description: name: package_info_plus_macos - url: "https://pub.dartlang.org" + sha256: a2ad8b4acf4cd479d4a0afa5a74ea3f5b1c7563b77e52cc32b3ee6956d5482a6 + url: "https://pub.dev" source: hosted version: "1.3.0" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - url: "https://pub.dartlang.org" + sha256: f7a0c8f1e7e981bc65f8b64137a53fd3c195b18d429fba960babc59a5a1c7ae8 + url: "https://pub.dev" source: hosted version: "1.0.2" package_info_plus_web: dependency: transitive description: name: package_info_plus_web - url: "https://pub.dartlang.org" + sha256: f0829327eb534789e0a16ccac8936a80beed4e2401c4d3a74f3f39094a822d3b + url: "https://pub.dev" source: hosted version: "1.0.6" package_info_plus_windows: dependency: transitive description: name: package_info_plus_windows - url: "https://pub.dartlang.org" + sha256: a6040b8695c82f8dd3c3d4dfab7ef96fbe9c67aac21b9bcf5db272589ef84441 + url: "https://pub.dev" source: hosted version: "1.0.5" path: dependency: transitive description: name: path - url: "https://pub.dartlang.org" + sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + url: "https://pub.dev" source: hosted version: "1.8.2" path_drawing: dependency: transitive description: name: path_drawing - url: "https://pub.dartlang.org" + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" source: hosted version: "1.0.1" path_parsing: dependency: transitive description: name: path_parsing - url: "https://pub.dartlang.org" + sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf + url: "https://pub.dev" source: hosted version: "1.0.1" path_provider: dependency: "direct main" description: name: path_provider - url: "https://pub.dartlang.org" + sha256: "04890b994ee89bfa80bf3080bfec40d5a92c5c7a785ebb02c13084a099d2b6f9" + url: "https://pub.dev" source: hosted version: "2.0.13" path_provider_android: dependency: transitive description: name: path_provider_android - url: "https://pub.dartlang.org" + sha256: "019f18c9c10ae370b08dce1f3e3b73bc9f58e7f087bb5e921f06529438ac0ae7" + url: "https://pub.dev" source: hosted version: "2.0.24" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - url: "https://pub.dartlang.org" + sha256: "12eee51abdf4d34c590f043f45073adbb45514a108bd9db4491547a2fd891059" + url: "https://pub.dev" source: hosted version: "2.2.0" path_provider_linux: dependency: transitive description: name: path_provider_linux - url: "https://pub.dartlang.org" + sha256: "2ae08f2216225427e64ad224a24354221c2c7907e448e6e0e8b57b1eb9f10ad1" + url: "https://pub.dev" source: hosted version: "2.1.10" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - url: "https://pub.dartlang.org" + sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec" + url: "https://pub.dev" source: hosted version: "2.0.6" path_provider_windows: dependency: transitive description: name: path_provider_windows - url: "https://pub.dartlang.org" + sha256: a34ecd7fb548f8e57321fd8e50d865d266941b54e6c3b7758cf8f37c24116905 + url: "https://pub.dev" source: hosted version: "2.0.7" pedantic: dependency: transitive description: name: pedantic - url: "https://pub.dartlang.org" + sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" + url: "https://pub.dev" source: hosted version: "1.11.1" percent_indicator: dependency: "direct main" description: name: percent_indicator - url: "https://pub.dartlang.org" + sha256: c37099ad833a883c9d71782321cb65c3a848c21b6939b6185f0ff6640d05814c + url: "https://pub.dev" source: hosted version: "4.2.3" petitparser: dependency: transitive description: name: petitparser - url: "https://pub.dartlang.org" + sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4" + url: "https://pub.dev" source: hosted version: "5.1.0" platform: dependency: transitive description: name: platform - url: "https://pub.dartlang.org" + sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + url: "https://pub.dev" source: hosted version: "3.1.0" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - url: "https://pub.dartlang.org" + sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc" + url: "https://pub.dev" source: hosted version: "2.1.4" pointycastle: dependency: transitive description: name: pointycastle - url: "https://pub.dartlang.org" + sha256: "57b6b78df14175658f09c5dfcfc51a46ad9561a3504fe679913dab404d0cc0f2" + url: "https://pub.dev" source: hosted version: "3.7.0" process: dependency: transitive description: name: process - url: "https://pub.dartlang.org" + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + url: "https://pub.dev" source: hosted version: "4.2.4" provider: dependency: "direct main" description: name: provider - url: "https://pub.dartlang.org" + sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f + url: "https://pub.dev" source: hosted version: "6.0.5" pub_semver: dependency: "direct main" description: name: pub_semver - url: "https://pub.dartlang.org" + sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" + url: "https://pub.dev" source: hosted version: "2.1.3" rive: dependency: "direct main" description: name: rive - url: "https://pub.dartlang.org" + sha256: "22e3755b75f4ea4492d2fecf4fc2acf1c8d0073df39781d290a20cbfe74c3760" + url: "https://pub.dev" source: hosted version: "0.9.1" rxdart: dependency: transitive description: name: rxdart - url: "https://pub.dartlang.org" + sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" + url: "https://pub.dev" source: hosted version: "0.27.7" shared_preferences: dependency: "direct main" description: name: shared_preferences - url: "https://pub.dartlang.org" + sha256: ee6257848f822b8481691f20c3e6d2bfee2e9eccb2a3d249907fcfb198c55b41 + url: "https://pub.dev" source: hosted version: "2.0.18" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - url: "https://pub.dartlang.org" + sha256: ad423a80fe7b4e48b50d6111b3ea1027af0e959e49d485712e134863d9c1c521 + url: "https://pub.dev" source: hosted version: "2.0.17" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - url: "https://pub.dartlang.org" + sha256: "1e755f8583229f185cfca61b1d80fb2344c9d660e1c69ede5450d8f478fa5310" + url: "https://pub.dev" source: hosted version: "2.1.5" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - url: "https://pub.dartlang.org" + sha256: "3a59ed10890a8409ad0faad7bb2957dab4b92b8fbe553257b05d30ed8af2c707" + url: "https://pub.dev" source: hosted version: "2.1.5" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - url: "https://pub.dartlang.org" + sha256: "824bfd02713e37603b2bdade0842e47d56e7db32b1dcdd1cae533fb88e2913fc" + url: "https://pub.dev" source: hosted version: "2.1.1" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - url: "https://pub.dartlang.org" + sha256: "0dc2633f215a3d4aa3184c9b2c5766f4711e4e5a6b256e62aafee41f89f1bfb8" + url: "https://pub.dev" source: hosted version: "2.0.6" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - url: "https://pub.dartlang.org" + sha256: "71bcd669bb9cdb6b39f22c4a7728b6d49e934f6cba73157ffa5a54f1eed67436" + url: "https://pub.dev" source: hosted version: "2.1.5" simple_gesture_detector: dependency: transitive description: name: simple_gesture_detector - url: "https://pub.dartlang.org" + sha256: "86d08f85f1f58583b7b4b941d989f48ea6ce08c1724a1d10954a277c2ec36592" + url: "https://pub.dev" source: hosted version: "0.2.0" sky_engine: @@ -970,259 +1103,296 @@ packages: dependency: transitive description: name: source_gen - url: "https://pub.dartlang.org" + sha256: c2bea18c95cfa0276a366270afaa2850b09b4a76db95d546f3d003dcc7011298 + url: "https://pub.dev" source: hosted version: "1.2.7" source_span: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.9.1" sqflite: dependency: transitive description: name: sqflite - url: "https://pub.dartlang.org" + sha256: "500d6fec583d2c021f2d25a056d96654f910662c64f836cd2063167b8f1fa758" + url: "https://pub.dev" source: hosted version: "2.2.6" sqflite_common: dependency: transitive description: name: sqflite_common - url: "https://pub.dartlang.org" + sha256: "963dad8c4aa2f814ce7d2d5b1da2f36f31bd1a439d8f27e3dc189bb9d26bc684" + url: "https://pub.dev" source: hosted version: "2.4.3" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.0" stacked: dependency: "direct main" description: name: stacked - url: "https://pub.dartlang.org" + sha256: "1ebc0998c0de136bb80a761aa93f7578e596a66e57856260004cf5bd8335c6f9" + url: "https://pub.dev" source: hosted version: "3.2.0" stacked_shared: dependency: transitive description: name: stacked_shared - url: "https://pub.dartlang.org" + sha256: cdf6758e0048086d550051ce6072ddec31de131c8f7b518dec3ad437c6638c0a + url: "https://pub.dev" source: hosted version: "1.3.0" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" stream_transform: dependency: transitive description: name: stream_transform - url: "https://pub.dartlang.org" + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" source: hosted version: "2.1.0" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.2.0" synchronized: dependency: transitive description: name: synchronized - url: "https://pub.dartlang.org" + sha256: "33b31b6beb98100bf9add464a36a8dd03eb10c7a8cf15aeec535e9b054aaf04b" + url: "https://pub.dev" source: hosted version: "3.0.1" table_calendar: dependency: "direct main" description: name: table_calendar - url: "https://pub.dartlang.org" + sha256: "7f1270313c0cdb245b583ed8518982c01d4a7e95869b3c30abcbae3b642c45d0" + url: "https://pub.dev" source: hosted version: "3.0.8" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" source: hosted version: "1.2.1" test_api: dependency: transitive description: name: test_api - url: "https://pub.dartlang.org" + sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + url: "https://pub.dev" source: hosted - version: "0.4.12" + version: "0.4.16" timeago: dependency: "direct main" description: name: timeago - url: "https://pub.dartlang.org" + sha256: "46c128312ab0ea144b146c0ac6426ddd96810efec2de3fccc425d00179cd8254" + url: "https://pub.dev" source: hosted version: "3.3.0" typed_data: dependency: transitive description: name: typed_data - url: "https://pub.dartlang.org" + sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + url: "https://pub.dev" source: hosted version: "1.3.1" universal_io: dependency: transitive description: name: universal_io - url: "https://pub.dartlang.org" + sha256: "06866290206d196064fd61df4c7aea1ffe9a4e7c4ccaa8fcded42dd41948005d" + url: "https://pub.dev" source: hosted version: "2.2.0" url_launcher: dependency: "direct main" description: name: url_launcher - url: "https://pub.dartlang.org" + sha256: "75f2846facd11168d007529d6cd8fcb2b750186bea046af9711f10b907e1587e" + url: "https://pub.dev" source: hosted version: "6.1.10" url_launcher_android: dependency: transitive description: name: url_launcher_android - url: "https://pub.dartlang.org" + sha256: "845530e5e05db5500c1a4c1446785d60cbd8f9bd45e21e7dd643a3273bb4bbd1" + url: "https://pub.dev" source: hosted version: "6.0.25" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - url: "https://pub.dartlang.org" + sha256: "7ab1e5b646623d6a2537aa59d5d039f90eebef75a7c25e105f6f75de1f7750c3" + url: "https://pub.dev" source: hosted version: "6.1.2" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - url: "https://pub.dartlang.org" + sha256: "206fb8334a700ef7754d6a9ed119e7349bc830448098f21a69bf1b4ed038cabc" + url: "https://pub.dev" source: hosted version: "3.0.4" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - url: "https://pub.dartlang.org" + sha256: "0ef2b4f97942a16523e51256b799e9aa1843da6c60c55eefbfa9dbc2dcb8331a" + url: "https://pub.dev" source: hosted version: "3.0.4" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - url: "https://pub.dartlang.org" + sha256: "6c9ca697a5ae218ce56cece69d46128169a58aa8653c1b01d26fcd4aad8c4370" + url: "https://pub.dev" source: hosted version: "2.1.2" url_launcher_web: dependency: transitive description: name: url_launcher_web - url: "https://pub.dartlang.org" + sha256: "81fe91b6c4f84f222d186a9d23c73157dc4c8e1c71489c4d08be1ad3b228f1aa" + url: "https://pub.dev" source: hosted version: "2.0.16" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - url: "https://pub.dartlang.org" + sha256: a83ba3607a507758669cfafb03f9de09bf6e6280c14d9b9cb18f013e406dcacd + url: "https://pub.dev" source: hosted version: "3.0.5" uuid: dependency: transitive description: name: uuid - url: "https://pub.dartlang.org" + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + url: "https://pub.dev" source: hosted version: "3.0.7" vector_math: dependency: transitive description: name: vector_math - url: "https://pub.dartlang.org" + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" version: dependency: transitive description: name: version - url: "https://pub.dartlang.org" + sha256: b8d9fc75327de5da108942502043f0b7d6500fbded3137560ec2254dc4b9f8ba + url: "https://pub.dev" source: hosted version: "2.0.3" watcher: dependency: transitive description: name: watcher - url: "https://pub.dartlang.org" + sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" + url: "https://pub.dev" source: hosted version: "1.0.2" webview_flutter: dependency: "direct main" description: name: webview_flutter - url: "https://pub.dartlang.org" + sha256: "392c1d83b70fe2495de3ea2c84531268d5b8de2de3f01086a53334d8b6030a88" + url: "https://pub.dev" source: hosted version: "3.0.4" webview_flutter_android: dependency: transitive description: name: webview_flutter_android - url: "https://pub.dartlang.org" + sha256: "8b3b2450e98876c70bfcead876d9390573b34b9418c19e28168b74f6cb252dbd" + url: "https://pub.dev" source: hosted version: "2.10.4" webview_flutter_platform_interface: dependency: transitive description: name: webview_flutter_platform_interface - url: "https://pub.dartlang.org" + sha256: "812165e4e34ca677bdfbfa58c01e33b27fd03ab5fa75b70832d4b7d4ca1fa8cf" + url: "https://pub.dev" source: hosted version: "1.9.5" webview_flutter_wkwebview: dependency: transitive description: name: webview_flutter_wkwebview - url: "https://pub.dartlang.org" + sha256: a5364369c758892aa487cbf59ea41d9edd10f9d9baf06a94e80f1bd1b4c7bbc0 + url: "https://pub.dev" source: hosted version: "2.9.5" win32: dependency: transitive description: name: win32 - url: "https://pub.dartlang.org" + sha256: c0e3a4f7be7dae51d8f152230b86627e3397c1ba8c3fa58e63d44a9f3edc9cef + url: "https://pub.dev" source: hosted version: "2.6.1" xdg_directories: dependency: transitive description: name: xdg_directories - url: "https://pub.dartlang.org" + sha256: ee1505df1426458f7f60aac270645098d318a8b4766d85fde75f76f2e21807d1 + url: "https://pub.dev" source: hosted version: "1.0.0" xml: dependency: transitive description: name: xml - url: "https://pub.dartlang.org" + sha256: "80d494c09849dc3f899d227a78c30c5b949b985ededf884cb3f3bcd39f4b447a" + url: "https://pub.dev" source: hosted version: "5.4.1" yaml: dependency: transitive description: name: yaml - url: "https://pub.dartlang.org" + sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + url: "https://pub.dev" source: hosted version: "3.1.1" sdks: From f7ca498e8a50c0b2e7e9bea5193bb9e3407e37c6 Mon Sep 17 00:00:00 2001 From: Antoine Martineau <47289926+Udito3@users.noreply.github.com> Date: Sun, 16 Jul 2023 19:02:19 -0400 Subject: [PATCH 05/20] Tests --- test/managers/news_repository_test.dart | 56 +++++++++++++++ test/models/news_test.dart | 91 ++++++++++++++++++++++++ test/viewmodels/news_viewmodel_test.dart | 79 ++++++++++++++++++++ 3 files changed, 226 insertions(+) create mode 100644 test/managers/news_repository_test.dart create mode 100644 test/models/news_test.dart create mode 100644 test/viewmodels/news_viewmodel_test.dart diff --git a/test/managers/news_repository_test.dart b/test/managers/news_repository_test.dart new file mode 100644 index 000000000..a94c7e9ba --- /dev/null +++ b/test/managers/news_repository_test.dart @@ -0,0 +1,56 @@ +// FLUTTER / DART / THIRD-PARTIES +import 'package:flutter_test/flutter_test.dart'; + +// MANAGER +import 'package:notredame/core/managers/news_repository.dart'; + +// MODEL +import 'package:notredame/core/models/news.dart'; + +import '../helpers.dart'; + +void main() { + group('NewsRepository tests', () { + NewsRepository repository; + + setUp(() { + setupLogger(); + setupAnalyticsServiceMock(); + setupCacheManagerMock(); + setupNetworkingServiceMock(); + repository = NewsRepository(); + }); + + test('Fetching news updates the news list', () async { + // TODO : remove when the news will be empty by default without test news + //expect(repository.news, isEmpty); + + final List fetchedNews = await repository.getNews(fromCacheOnly: true); + + expect(repository.news, isNotEmpty); + expect(repository.news, equals(fetchedNews)); + }); + + test('Fetching news from cache returns the correct data', () async { + // TODO : remove when the news will be empty by default without test news + //expect(repository.news, isEmpty); + + await repository.getNews(fromCacheOnly: true); + + final List newsFromCache = await repository.getNews(fromCacheOnly: true); + + expect(newsFromCache, isNotEmpty); + expect(newsFromCache, equals(repository.news)); + }); + + test('Fetching news from API updates the news list', () async { + // TODO : remove when the news will be empty by default without test news + //expect(repository.news, isEmpty); + + final List fetchedNews = await repository.getNews(fromCacheOnly: false); + + expect(repository.news, isNotEmpty); + expect(repository.news, equals(fetchedNews)); + }); + }); +} diff --git a/test/models/news_test.dart b/test/models/news_test.dart new file mode 100644 index 000000000..973a2d904 --- /dev/null +++ b/test/models/news_test.dart @@ -0,0 +1,91 @@ +// FLUTTER / DART / THIRD-PARTIES +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +// MODELS +import 'package:notredame/core/models/news.dart'; + +void main() { + group('News class tests', () { + test('News.fromJson() should parse JSON correctly', () { + final json = { + 'id': 1, + 'title': 'Test Title', + 'description': 'Test Description', + 'image': 'https://example.com/image.jpg', + 'tags': [ + {'text': 'Tag 1', 'color': Colors.blue.value}, + {'text': 'Tag 2', 'color': Colors.red.value}, + ], + 'date': '2022-01-01T12:00:00Z', + 'important': true, + }; + + final news = News.fromJson(json); + + expect(news.id, equals(1)); + expect(news.title, equals('Test Title')); + expect(news.description, equals('Test Description')); + expect(news.image, equals('https://example.com/image.jpg')); + expect(news.tags.length, equals(2)); + expect(news.tags[0].text, equals('Tag 1')); + expect(news.tags[0].color, equals(Colors.blue[500])); + expect(news.tags[1].text, equals('Tag 2')); + expect(news.tags[1].color, equals(Colors.red[500])); + expect(news.date, equals(DateTime.parse('2022-01-01T12:00:00Z'))); + expect(news.important, isTrue); + }); + + test('toJson() should convert News to JSON correctly', () { + final news = News( + id: 1, + title: 'Test Title', + description: 'Test Description', + image: 'https://example.com/image.jpg', + tags: [ + Tag(text: 'Tag 1', color: Colors.blue[500]), + Tag(text: 'Tag 2', color: Colors.red[500]), + ], + date: DateTime.parse('2022-01-01T12:00:00Z'), + important: true, + ); + + final json = news.toJson(); + + expect(json['id'], equals(1)); + expect(json['title'], equals('Test Title')); + expect(json['description'], equals('Test Description')); + expect(json['image'], equals('https://example.com/image.jpg')); + expect(json['tags'], hasLength(2)); + expect(json['tags'][0]['text'], equals('Tag 1')); + expect(json['tags'][0]['color'], equals(Colors.blue[500].value)); + expect(json['tags'][1]['text'], equals('Tag 2')); + expect(json['tags'][1]['color'], equals(Colors.red[500].value)); + expect(json['date'], equals('2022-01-01 12:00:00.000Z')); + expect(json['important'], isTrue); + }); + }); + + group('Tag class tests', () { + test('Tag.fromJson() should parse JSON correctly', () { + final json = { + 'text': 'Test Tag', + 'color': Colors.blue[500].value, + }; + + final tag = Tag.fromJson(json); + + expect(tag.text, equals('Test Tag')); + expect(tag.color, equals(Colors.blue[500])); + }); + + test('toJson() should convert Tag to JSON correctly', () { + final tag = Tag(text: 'Test Tag', color: Colors.blue[500]); + + final json = tag.toJson(); + + expect(json['text'], equals('Test Tag')); + expect(json['color'], equals(Colors.blue[500].value)); + }); + }); +} diff --git a/test/viewmodels/news_viewmodel_test.dart b/test/viewmodels/news_viewmodel_test.dart new file mode 100644 index 000000000..1eeef51ad --- /dev/null +++ b/test/viewmodels/news_viewmodel_test.dart @@ -0,0 +1,79 @@ +// FLUTTER / DART / THIRD-PARTIES +import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/mockito.dart'; + +// MANAGERS +import 'package:notredame/core/managers/settings_manager.dart'; +import 'package:notredame/core/managers/news_repository.dart'; + +// MODEL +import 'package:notredame/core/models/news.dart'; + +// VIEWMODEL +import 'package:notredame/core/viewmodels/news_viewmodel.dart'; + +// UTILS +import 'package:notredame/locator.dart'; +import 'package:logger/logger.dart'; +import '../helpers.dart'; + +class MockNewsRepository extends Mock implements NewsRepository { + @override + List get news => [ + News( + id: 1, + title: 'Mock News 1', + description: 'Mock Description 1', + image: 'https://example.com/mock-image1.jpg', + tags: [], + date: DateTime.now(), + important: false, + ), + News( + id: 2, + title: 'Mock News 2', + description: 'Mock Description 2', + image: 'https://example.com/mock-image2.jpg', + tags: [], + date: DateTime.now(), + important: true, + ), + ]; + + static void stubGetNews(MockNewsRepository mock, List newsList) { + when(mock.getNews(fromCacheOnly: anyNamed('fromCacheOnly'))) + .thenAnswer((_) async => newsList); + } +} + +void main() { + NewsViewModel viewModel; + + group('NewsViewModel tests', () { + setUp(() { + setupLogger(); + setupSettingsManagerMock(); + final mockNewsRepository = MockNewsRepository(); + MockNewsRepository.stubGetNews(mockNewsRepository, []); + locator.registerSingleton(mockNewsRepository); + viewModel = NewsViewModel(intl: null); // Pass null for AppIntl + }); + + tearDown(() { + locator.unregister(); + locator.unregister(); + locator.unregister(); + }); + + test('Fetching news updates the news list', () async { + expect(viewModel.isBusy, isFalse); + + await viewModel.futureToRun(); + + expect(viewModel.news, hasLength(2)); + expect(viewModel.news[0].title, equals('Mock News 1')); + expect(viewModel.news[1].title, equals('Mock News 2')); + expect(viewModel.isBusy, isFalse); + }); + }); +} From f50e3c1dec6122886e9be5efbef6b5d4dd6dd778 Mon Sep 17 00:00:00 2001 From: Antoine Martineau <47289926+Udito3@users.noreply.github.com> Date: Sun, 16 Jul 2023 19:10:14 -0400 Subject: [PATCH 06/20] Comment to fix the tests --- lib/ui/views/dashboard_view.dart | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/ui/views/dashboard_view.dart b/lib/ui/views/dashboard_view.dart index 000c458d7..47ac69ded 100644 --- a/lib/ui/views/dashboard_view.dart +++ b/lib/ui/views/dashboard_view.dart @@ -3,10 +3,10 @@ import 'package:feature_discovery/feature_discovery.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; -import 'package:notredame/core/viewmodels/news_viewmodel.dart'; +//import 'package:notredame/core/viewmodels/news_viewmodel.dart'; import 'package:stacked/stacked.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; -import 'package:timeago/timeago.dart' as timeago; +//import 'package:timeago/timeago.dart' as timeago; // VIEWMODEL import 'package:notredame/core/viewmodels/dashboard_viewmodel.dart'; @@ -20,7 +20,7 @@ import 'package:notredame/ui/widgets/haptics_container.dart'; // MODELS / CONSTANTS import 'package:ets_api_clients/models.dart'; -import 'package:notredame/core/models/news.dart'; +//import 'package:notredame/core/models/news.dart'; import 'package:notredame/locator.dart'; import 'package:notredame/core/constants/preferences_flags.dart'; import 'package:notredame/core/constants/urls.dart'; @@ -63,7 +63,7 @@ class _DashboardViewState extends State }); DashboardViewModel.launchInAppReview(); // TODO move this to a better place - timeago.setLocaleMessages('fr', timeago.FrShortMessages()); + //timeago.setLocaleMessages('fr', timeago.FrShortMessages()); } @override @@ -92,7 +92,7 @@ class _DashboardViewState extends State onReorder(model, oldIndex, newIndex), padding: const EdgeInsets.fromLTRB(0, 4, 0, 8), children: _buildCards( - model, NewsViewModel(intl: AppIntl.of(context))), + model/*, NewsViewModel(intl: AppIntl.of(context))*/), proxyDecorator: (child, _, __) { return HapticsContainer(child: child); }, @@ -103,7 +103,7 @@ class _DashboardViewState extends State }); } - List _buildCards(DashboardViewModel model, NewsViewModel newsModel) { + List _buildCards(DashboardViewModel model/*, NewsViewModel newsModel*/) { final List cards = List.empty(growable: true); for (final PreferencesFlag element in model.cardsToDisplay) { @@ -119,10 +119,10 @@ class _DashboardViewState extends State break; case PreferencesFlag.gradesCard: cards.add(_buildGradesCards(model, element)); - // TEST - for (final News news in newsModel.news) { + // TODO : move to news page + /*for (final News news in newsModel.news) { cards.add(_buildNewsCard(newsModel, news)); - } + }*/ break; default: @@ -403,7 +403,7 @@ class _DashboardViewState extends State ) ]), ); - +/* TODO : Move to news page Widget _buildImageWithTags(News news) { if (news.image == null) { return const SizedBox.shrink(); @@ -518,7 +518,7 @@ Color _getTagTextColor(Color backgroundColor) { ), ); } - +*/ void dismissCard(DashboardViewModel model, PreferencesFlag flag) { model.hideCard(flag); } From 9e1917d82b8741cbdf56433523d772fa6ee985d2 Mon Sep 17 00:00:00 2001 From: Antoine Martineau <47289926+Udito3@users.noreply.github.com> Date: Sun, 16 Jul 2023 19:15:37 -0400 Subject: [PATCH 07/20] remove pubspec.lock --- pubspec.lock | 1400 -------------------------------------------------- 1 file changed, 1400 deletions(-) delete mode 100644 pubspec.lock diff --git a/pubspec.lock b/pubspec.lock deleted file mode 100644 index 3cbeb02ae..000000000 --- a/pubspec.lock +++ /dev/null @@ -1,1400 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - _fe_analyzer_shared: - dependency: transitive - description: - name: _fe_analyzer_shared - sha256: "3444216bfd127af50bbe4862d8843ed44db946dd933554f0d7285e89f10e28ac" - url: "https://pub.dev" - source: hosted - version: "50.0.0" - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "330d7fcbb72624f5b6d374af8b059b0ef4ba96ba5b8987f874964a1287eb617d" - url: "https://pub.dev" - source: hosted - version: "1.0.18" - analyzer: - dependency: transitive - description: - name: analyzer - sha256: "68796c31f510c8455a06fed75fc97d8e5ad04d324a830322ab3efc9feb6201c1" - url: "https://pub.dev" - source: hosted - version: "5.2.0" - archive: - dependency: transitive - description: - name: archive - sha256: d6347d54a2d8028e0437e3c099f66fdb8ae02c4720c1e7534c9f24c10351f85d - url: "https://pub.dev" - source: hosted - version: "3.3.6" - args: - dependency: transitive - description: - name: args - sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440" - url: "https://pub.dev" - source: hosted - version: "2.4.0" - async: - dependency: transitive - description: - name: async - sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 - url: "https://pub.dev" - source: hosted - version: "2.10.0" - auto_size_text: - dependency: "direct main" - description: - name: auto_size_text - sha256: "3f5261cd3fb5f2a9ab4e2fc3fba84fd9fcaac8821f20a1d4e71f557521b22599" - url: "https://pub.dev" - source: hosted - version: "3.0.0" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - build: - dependency: transitive - description: - name: build - sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777" - url: "https://pub.dev" - source: hosted - version: "2.3.1" - built_collection: - dependency: transitive - description: - name: built_collection - sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" - url: "https://pub.dev" - source: hosted - version: "5.1.1" - built_value: - dependency: transitive - description: - name: built_value - sha256: "31b7c748fd4b9adf8d25d72a4c4a59ef119f12876cf414f94f8af5131d5fa2b0" - url: "https://pub.dev" - source: hosted - version: "8.4.4" - characters: - dependency: transitive - description: - name: characters - sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c - url: "https://pub.dev" - source: hosted - version: "1.2.1" - checked_yaml: - dependency: transitive - description: - name: checked_yaml - sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" - url: "https://pub.dev" - source: hosted - version: "2.0.2" - cli_util: - dependency: transitive - description: - name: cli_util - sha256: "66f86e916d285c1a93d3b79587d94bd71984a66aac4ff74e524cfa7877f1395c" - url: "https://pub.dev" - source: hosted - version: "0.3.5" - clock: - dependency: transitive - description: - name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://pub.dev" - source: hosted - version: "1.1.1" - code_builder: - dependency: transitive - description: - name: code_builder - sha256: "0d43dd1288fd145de1ecc9a3948ad4a6d5a82f0a14c4fdd0892260787d975cbe" - url: "https://pub.dev" - source: hosted - version: "4.4.0" - collection: - dependency: transitive - description: - name: collection - sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 - url: "https://pub.dev" - source: hosted - version: "1.17.0" - connectivity_plus: - dependency: "direct main" - description: - name: connectivity_plus - sha256: "3f8fe4e504c2d33696dac671a54909743bc6a902a9bb0902306f7a2aed7e528e" - url: "https://pub.dev" - source: hosted - version: "2.3.9" - connectivity_plus_linux: - dependency: transitive - description: - name: connectivity_plus_linux - sha256: "3caf859d001f10407b8e48134c761483e4495ae38094ffcca97193f6c271f5e2" - url: "https://pub.dev" - source: hosted - version: "1.3.1" - connectivity_plus_macos: - dependency: transitive - description: - name: connectivity_plus_macos - sha256: "488d2de1e47e1224ad486e501b20b088686ba1f4ee9c4420ecbc3b9824f0b920" - url: "https://pub.dev" - source: hosted - version: "1.2.6" - connectivity_plus_platform_interface: - dependency: transitive - description: - name: connectivity_plus_platform_interface - sha256: cf1d1c28f4416f8c654d7dc3cd638ec586076255d407cef3ddbdaf178272a71a - url: "https://pub.dev" - source: hosted - version: "1.2.4" - connectivity_plus_web: - dependency: transitive - description: - name: connectivity_plus_web - sha256: "81332be1b4baf8898fed17bb4fdef27abb7c6fd990bf98c54fd978478adf2f1a" - url: "https://pub.dev" - source: hosted - version: "1.2.5" - connectivity_plus_windows: - dependency: transitive - description: - name: connectivity_plus_windows - sha256: "535b0404b4d5605c4dd8453d67e5d6d2ea0dd36e3b477f50f31af51b0aeab9dd" - url: "https://pub.dev" - source: hosted - version: "1.2.2" - convert: - dependency: transitive - description: - name: convert - sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" - url: "https://pub.dev" - source: hosted - version: "3.1.1" - crypto: - dependency: transitive - description: - name: crypto - sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 - url: "https://pub.dev" - source: hosted - version: "3.0.2" - dart_style: - dependency: transitive - description: - name: dart_style - sha256: "5be16bf1707658e4c03078d4a9b90208ded217fb02c163e207d334082412f2fb" - url: "https://pub.dev" - source: hosted - version: "2.2.5" - dbus: - dependency: transitive - description: - name: dbus - sha256: "4f814fc7e73057f78f307a6c4714fe2ffb4bdb994ab1970540a068ec4d5a45be" - url: "https://pub.dev" - source: hosted - version: "0.7.3" - device_info_plus: - dependency: "direct main" - description: - name: device_info_plus - sha256: "79439ccee1641b9cbb95dd0a6b3fb478eab63aab05700249d371626ec6c1810f" - url: "https://pub.dev" - source: hosted - version: "4.0.0" - device_info_plus_linux: - dependency: transitive - description: - name: device_info_plus_linux - sha256: e4eb5db4704f5534e872148a21cfcd39581022b63df556da6720d88f7c9f91a9 - url: "https://pub.dev" - source: hosted - version: "2.1.1" - device_info_plus_macos: - dependency: transitive - description: - name: device_info_plus_macos - sha256: "38871fd2ad31871399d8307630c9f4eb5941dd2c643ee221c44d58de95d367a1" - url: "https://pub.dev" - source: hosted - version: "2.2.3" - device_info_plus_platform_interface: - dependency: transitive - description: - name: device_info_plus_platform_interface - sha256: b2743934f0efc3e291880d76fb341ea114b7e8417d77ee0f93bd21f5dfd3e8d2 - url: "https://pub.dev" - source: hosted - version: "2.6.1" - device_info_plus_web: - dependency: transitive - description: - name: device_info_plus_web - sha256: "38715ad1ef3bee8915dd7bee08a9ac9ab54472a8df425c887062a3046209f663" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - device_info_plus_windows: - dependency: transitive - description: - name: device_info_plus_windows - sha256: "8fb1403fc94636d6ab48aeebb5f9379f2ca51cde3b337167ec6f39db09234492" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - easter_egg_trigger: - dependency: "direct main" - description: - name: easter_egg_trigger - sha256: "094c16e5ebf15c75131e2fe87944e91ca87524f4ffb88f0128e477befbe43501" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - enum_to_string: - dependency: "direct main" - description: - name: enum_to_string - sha256: bd9e83a33b754cb43a75b36a9af2a0b92a757bfd9847d2621ca0b1bed45f8e7a - url: "https://pub.dev" - source: hosted - version: "2.0.1" - ets_api_clients: - dependency: "direct main" - description: - path: "." - ref: "0.5.0" - resolved-ref: cefaa19955323ce4790b64aa45c598925df71109 - url: "https://github.com/ApplETS/ETS-API-Clients.git" - source: git - version: "0.5.0" - fading_edge_scrollview: - dependency: transitive - description: - name: fading_edge_scrollview - sha256: fcc6184eb6ea6761f310a3619bccd1f59520380328cb1a9fa161730bb2078910 - url: "https://pub.dev" - source: hosted - version: "2.0.1" - fake_async: - dependency: transitive - description: - name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" - url: "https://pub.dev" - source: hosted - version: "1.3.1" - feature_discovery: - dependency: "direct main" - description: - name: feature_discovery - sha256: c4008f3d78515883354ab095cabaefbd5116fb7005b150d28cead306f03f4b30 - url: "https://pub.dev" - source: hosted - version: "0.14.1" - feedback: - dependency: "direct main" - description: - name: feedback - sha256: "912ffe11317f88585410818885a5312d044f025bd9b5633eab18f5808d28ac54" - url: "https://pub.dev" - source: hosted - version: "2.5.0" - ffi: - dependency: transitive - description: - name: ffi - sha256: "13a6ccf6a459a125b3fcdb6ec73bd5ff90822e071207c663bfd1f70062d51d18" - url: "https://pub.dev" - source: hosted - version: "1.2.1" - file: - dependency: transitive - description: - name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" - url: "https://pub.dev" - source: hosted - version: "6.1.4" - firebase_analytics: - dependency: "direct main" - description: - name: firebase_analytics - sha256: "48202f083e63ec56e00d27bf4bab5600c73d850134bcda262e3b9634ac841826" - url: "https://pub.dev" - source: hosted - version: "10.1.6" - firebase_analytics_platform_interface: - dependency: transitive - description: - name: firebase_analytics_platform_interface - sha256: "56bc6da503e4536d5c4d0ab41f25fb9fe58379b4f9bac5af9b091735764a141c" - url: "https://pub.dev" - source: hosted - version: "3.3.23" - firebase_analytics_web: - dependency: transitive - description: - name: firebase_analytics_web - sha256: "58f8992a4661dec1671255d31d4755721456aad07ae00b49ae303a8afcbc739c" - url: "https://pub.dev" - source: hosted - version: "0.5.1+14" - firebase_core: - dependency: "direct main" - description: - name: firebase_core - sha256: "75f747cafd7cbd6c00b908e3a7aa59fc31593d46ba8165d9ee8a79e69464a394" - url: "https://pub.dev" - source: hosted - version: "2.8.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: "5615b30c36f55b2777d0533771deda7e5730e769e5d3cb7fda79e9bed86cfa55" - url: "https://pub.dev" - source: hosted - version: "4.5.3" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "0c1cf1f1022d2245ac117443bb95207952ca770281524d2908e323bc063fb8ff" - url: "https://pub.dev" - source: hosted - version: "2.2.2" - firebase_crashlytics: - dependency: "direct main" - description: - name: firebase_crashlytics - sha256: "5410b6ab2009fc6c181ca82e16525fdcb324c5851933bfbb49246543b1005ebc" - url: "https://pub.dev" - source: hosted - version: "3.0.17" - firebase_crashlytics_platform_interface: - dependency: transitive - description: - name: firebase_crashlytics_platform_interface - sha256: bf3d3791c51a8448413b5ebd8388fa7db239a3e165db6bbd8ab58ef0e8f61906 - url: "https://pub.dev" - source: hosted - version: "3.3.17" - firebase_remote_config: - dependency: "direct main" - description: - name: firebase_remote_config - sha256: "191aa5376ccf512d12e124dc7a99abcb6bd5d4e2b073d102253dd94d5a513e57" - url: "https://pub.dev" - source: hosted - version: "3.0.15" - firebase_remote_config_platform_interface: - dependency: transitive - description: - name: firebase_remote_config_platform_interface - sha256: "3f23e4944011852da5fdd073758009c52d468d78a5a4e3c28752c11de430941a" - url: "https://pub.dev" - source: hosted - version: "1.1.35" - firebase_remote_config_web: - dependency: transitive - description: - name: firebase_remote_config_web - sha256: e79a73c7b42ba283de122f1aed79a8923ec526e6bc8a554e798520b453fca351 - url: "https://pub.dev" - source: hosted - version: "1.1.24" - fixnum: - dependency: transitive - description: - name: fixnum - sha256: "04be3e934c52e082558cc9ee21f42f5c1cd7a1262f4c63cd0357c08d5bba81ec" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_cache_manager: - dependency: "direct main" - description: - name: flutter_cache_manager - sha256: "32cd900555219333326a2d0653aaaf8671264c29befa65bbd9856d204a4c9fb3" - url: "https://pub.dev" - source: hosted - version: "3.3.0" - flutter_config: - dependency: "direct dev" - description: - name: flutter_config - sha256: "8e2be2d560a52e06d2ef53a31913a11fc80ef708a442571c96194fd32e29fb1a" - url: "https://pub.dev" - source: hosted - version: "2.0.0" - flutter_custom_tabs: - dependency: "direct main" - description: - name: flutter_custom_tabs - sha256: bebb9552438eb3aea8f8511d48e41abdd0d05ff3e9a74622a4d1acd2bffd242c - url: "https://pub.dev" - source: hosted - version: "1.0.4" - flutter_custom_tabs_platform_interface: - dependency: transitive - description: - name: flutter_custom_tabs_platform_interface - sha256: bbd2d9a2ff22d27e079a35302ddd3da9f2328110c370d56c81655a7ba306fee2 - url: "https://pub.dev" - source: hosted - version: "1.0.1" - flutter_custom_tabs_web: - dependency: transitive - description: - name: flutter_custom_tabs_web - sha256: d735abff9a1b215018dfe2584f131fe0a3bb0e3b685fbd6ae8a55cf5c4d7dcd8 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_launcher_icons: - dependency: "direct dev" - description: - name: flutter_launcher_icons - sha256: ce0e501cfc258907842238e4ca605e74b7fd1cdf04b3b43e86c43f3e40a1592c - url: "https://pub.dev" - source: hosted - version: "0.11.0" - flutter_localizations: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_plugin_android_lifecycle: - dependency: transitive - description: - name: flutter_plugin_android_lifecycle - sha256: c224ac897bed083dabf11f238dd11a239809b446740be0c2044608c50029ffdf - url: "https://pub.dev" - source: hosted - version: "2.0.9" - flutter_secure_storage: - dependency: "direct main" - description: - name: flutter_secure_storage - sha256: de957362e046bc68da8dcf6c1d922cb8bdad8dd4979ec69480cf1a3c481abe8e - url: "https://pub.dev" - source: hosted - version: "6.1.0" - flutter_secure_storage_linux: - dependency: transitive - description: - name: flutter_secure_storage_linux - sha256: "0912ae29a572230ad52d8a4697e5518d7f0f429052fd51df7e5a7952c7efe2a3" - url: "https://pub.dev" - source: hosted - version: "1.1.3" - flutter_secure_storage_macos: - dependency: transitive - description: - name: flutter_secure_storage_macos - sha256: "388f76fd0f093e7415a39ec4c169ae7cceeee6d9f9ba529d788a13f2be4de7bd" - url: "https://pub.dev" - source: hosted - version: "1.1.2" - flutter_secure_storage_platform_interface: - dependency: transitive - description: - name: flutter_secure_storage_platform_interface - sha256: b3773190e385a3c8a382007893d678ae95462b3c2279e987b55d140d3b0cb81b - url: "https://pub.dev" - source: hosted - version: "1.0.1" - flutter_secure_storage_web: - dependency: transitive - description: - name: flutter_secure_storage_web - sha256: "42938e70d4b872e856e678c423cc0e9065d7d294f45bc41fc1981a4eb4beaffe" - url: "https://pub.dev" - source: hosted - version: "1.1.1" - flutter_secure_storage_windows: - dependency: transitive - description: - name: flutter_secure_storage_windows - sha256: ca89c8059cf439985aa83c59619b3674c7ef6cc2e86943d169a7369d6a69cab5 - url: "https://pub.dev" - source: hosted - version: "1.1.3" - flutter_siren: - dependency: "direct main" - description: - name: flutter_siren - sha256: "0814d890072c0d474d49e1a0e1e3edfb5a88756fa1890663b07685d4a09b7f73" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - flutter_staggered_animations: - dependency: "direct main" - description: - name: flutter_staggered_animations - sha256: "81d3c816c9bb0dca9e8a5d5454610e21ffb068aedb2bde49d2f8d04f75538351" - url: "https://pub.dev" - source: hosted - version: "1.1.1" - flutter_svg: - dependency: "direct main" - description: - name: flutter_svg - sha256: c9bb2757b8a0bbf8e45f4069a90d2b9dbafc80b1a5e28d43e29088be533e6df4 - url: "https://pub.dev" - source: hosted - version: "1.0.3" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - flutter_web_plugins: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - fluttertoast: - dependency: "direct main" - description: - name: fluttertoast - sha256: "2f9c4d3f4836421f7067a28f8939814597b27614e021da9d63e5d3fb6e212d25" - url: "https://pub.dev" - source: hosted - version: "8.2.1" - font_awesome_flutter: - dependency: "direct main" - description: - name: font_awesome_flutter - sha256: "959ef4add147753f990b4a7c6cccb746d5792dbdc81b1cde99e62e7edb31b206" - url: "https://pub.dev" - source: hosted - version: "10.4.0" - get_it: - dependency: "direct main" - description: - name: get_it - sha256: "290fde3a86072e4b37dbb03c07bec6126f0ecc28dad403c12ffe2e5a2d751ab7" - url: "https://pub.dev" - source: hosted - version: "7.2.0" - github: - dependency: "direct main" - description: - name: github - sha256: "3150898cd04af1213379b98fcd3f75681518eb12bb37b1c3ac489656b98c2138" - url: "https://pub.dev" - source: hosted - version: "9.11.0" - glob: - dependency: transitive - description: - name: glob - sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - google_maps_flutter: - dependency: "direct main" - description: - name: google_maps_flutter - sha256: "24392ef192f3b00bcd93151375676805a9933574423a5bd5509a0ead2e8a4215" - url: "https://pub.dev" - source: hosted - version: "2.2.5" - google_maps_flutter_android: - dependency: transitive - description: - name: google_maps_flutter_android - sha256: a8ee18649a67750cbd477a6867a1bf9c4154c5e9f69d722c8b53a627a6d58303 - url: "https://pub.dev" - source: hosted - version: "2.4.9" - google_maps_flutter_ios: - dependency: transitive - description: - name: google_maps_flutter_ios - sha256: e9ad74415a222573625a2c1717adc1e375b18e8ce660fc12db734d1bda1132d4 - url: "https://pub.dev" - source: hosted - version: "2.2.1" - google_maps_flutter_platform_interface: - dependency: transitive - description: - name: google_maps_flutter_platform_interface - sha256: a07811d2b82055815ede75e1fe4b7b76f71a0b4820b26f71bdaddd157d6a3e20 - url: "https://pub.dev" - source: hosted - version: "2.2.6" - graphs: - dependency: transitive - description: - name: graphs - sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2 - url: "https://pub.dev" - source: hosted - version: "2.2.0" - home_widget: - dependency: "direct main" - description: - name: home_widget - sha256: "9514c47422d511e87a3923ffed3fc4eb82540e168d7715d1560ceb1f02d5ec80" - url: "https://pub.dev" - source: hosted - version: "0.1.6" - http: - dependency: "direct main" - description: - name: http - sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" - url: "https://pub.dev" - source: hosted - version: "0.13.5" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" - url: "https://pub.dev" - source: hosted - version: "4.0.2" - image: - dependency: transitive - description: - name: image - sha256: "02bafd3b4f399bfeb10034deba9753d93b55ce41cd0c4d3d8b355626f80e5b32" - url: "https://pub.dev" - source: hosted - version: "3.1.3" - in_app_review: - dependency: "direct main" - description: - name: in_app_review - sha256: "16328b8202d36522322b95804ae5d975577aa9f584d634985849ba1099645850" - url: "https://pub.dev" - source: hosted - version: "2.0.6" - in_app_review_platform_interface: - dependency: transitive - description: - name: in_app_review_platform_interface - sha256: b12ec9aaf6b34d3a72aa95895eb252b381896246bdad4ef378d444affe8410ef - url: "https://pub.dev" - source: hosted - version: "2.0.4" - intl: - dependency: transitive - description: - name: intl - sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" - url: "https://pub.dev" - source: hosted - version: "0.17.0" - js: - dependency: transitive - description: - name: js - sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" - url: "https://pub.dev" - source: hosted - version: "0.6.5" - json_annotation: - dependency: transitive - description: - name: json_annotation - sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317 - url: "https://pub.dev" - source: hosted - version: "4.8.0" - lint: - dependency: "direct dev" - description: - name: lint - sha256: "3e9343b1cededcfb1e8b40d0dbd3592b7a1c6c0121545663a991433390c2bc97" - url: "https://pub.dev" - source: hosted - version: "2.0.1" - logger: - dependency: "direct main" - description: - name: logger - sha256: db2ff852ed77090ba9f62d3611e4208a3d11dfa35991a81ae724c113fcb3e3f7 - url: "https://pub.dev" - source: hosted - version: "1.3.0" - logging: - dependency: transitive - description: - name: logging - sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" - url: "https://pub.dev" - source: hosted - version: "1.1.1" - marquee: - dependency: "direct main" - description: - name: marquee - sha256: ac5fd2176dd6262d9eec0d0cc6daa99edcbd88097433cfe86a889112cd254145 - url: "https://pub.dev" - source: hosted - version: "2.2.1" - matcher: - dependency: transitive - description: - name: matcher - sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" - url: "https://pub.dev" - source: hosted - version: "0.12.13" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 - url: "https://pub.dev" - source: hosted - version: "0.2.0" - meta: - dependency: transitive - description: - name: meta - sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" - url: "https://pub.dev" - source: hosted - version: "1.8.0" - mockito: - dependency: "direct dev" - description: - name: mockito - sha256: "2a8a17b82b1bde04d514e75d90d634a0ac23f6cb4991f6098009dd56836aeafe" - url: "https://pub.dev" - source: hosted - version: "5.3.2" - nested: - dependency: transitive - description: - name: nested - sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - nm: - dependency: transitive - description: - name: nm - sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254" - url: "https://pub.dev" - source: hosted - version: "0.5.0" - package_config: - dependency: transitive - description: - name: package_config - sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - package_info_plus: - dependency: "direct main" - description: - name: package_info_plus - sha256: "7a6114becdf042be2b0777d77ace954d4a205644171a1cbd8712976b9bbb837c" - url: "https://pub.dev" - source: hosted - version: "1.4.2" - package_info_plus_linux: - dependency: transitive - description: - name: package_info_plus_linux - sha256: "04b575f44233d30edbb80a94e57cad9107aada334fc02aabb42b6becd13c43fc" - url: "https://pub.dev" - source: hosted - version: "1.0.5" - package_info_plus_macos: - dependency: transitive - description: - name: package_info_plus_macos - sha256: a2ad8b4acf4cd479d4a0afa5a74ea3f5b1c7563b77e52cc32b3ee6956d5482a6 - url: "https://pub.dev" - source: hosted - version: "1.3.0" - package_info_plus_platform_interface: - dependency: transitive - description: - name: package_info_plus_platform_interface - sha256: f7a0c8f1e7e981bc65f8b64137a53fd3c195b18d429fba960babc59a5a1c7ae8 - url: "https://pub.dev" - source: hosted - version: "1.0.2" - package_info_plus_web: - dependency: transitive - description: - name: package_info_plus_web - sha256: f0829327eb534789e0a16ccac8936a80beed4e2401c4d3a74f3f39094a822d3b - url: "https://pub.dev" - source: hosted - version: "1.0.6" - package_info_plus_windows: - dependency: transitive - description: - name: package_info_plus_windows - sha256: a6040b8695c82f8dd3c3d4dfab7ef96fbe9c67aac21b9bcf5db272589ef84441 - url: "https://pub.dev" - source: hosted - version: "1.0.5" - path: - dependency: transitive - description: - name: path - sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b - url: "https://pub.dev" - source: hosted - version: "1.8.2" - path_drawing: - dependency: transitive - description: - name: path_drawing - sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 - url: "https://pub.dev" - source: hosted - version: "1.0.1" - path_parsing: - dependency: transitive - description: - name: path_parsing - sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf - url: "https://pub.dev" - source: hosted - version: "1.0.1" - path_provider: - dependency: "direct main" - description: - name: path_provider - sha256: "04890b994ee89bfa80bf3080bfec40d5a92c5c7a785ebb02c13084a099d2b6f9" - url: "https://pub.dev" - source: hosted - version: "2.0.13" - path_provider_android: - dependency: transitive - description: - name: path_provider_android - sha256: "019f18c9c10ae370b08dce1f3e3b73bc9f58e7f087bb5e921f06529438ac0ae7" - url: "https://pub.dev" - source: hosted - version: "2.0.24" - path_provider_foundation: - dependency: transitive - description: - name: path_provider_foundation - sha256: "12eee51abdf4d34c590f043f45073adbb45514a108bd9db4491547a2fd891059" - url: "https://pub.dev" - source: hosted - version: "2.2.0" - path_provider_linux: - dependency: transitive - description: - name: path_provider_linux - sha256: "2ae08f2216225427e64ad224a24354221c2c7907e448e6e0e8b57b1eb9f10ad1" - url: "https://pub.dev" - source: hosted - version: "2.1.10" - path_provider_platform_interface: - dependency: transitive - description: - name: path_provider_platform_interface - sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec" - url: "https://pub.dev" - source: hosted - version: "2.0.6" - path_provider_windows: - dependency: transitive - description: - name: path_provider_windows - sha256: a34ecd7fb548f8e57321fd8e50d865d266941b54e6c3b7758cf8f37c24116905 - url: "https://pub.dev" - source: hosted - version: "2.0.7" - pedantic: - dependency: transitive - description: - name: pedantic - sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" - url: "https://pub.dev" - source: hosted - version: "1.11.1" - percent_indicator: - dependency: "direct main" - description: - name: percent_indicator - sha256: c37099ad833a883c9d71782321cb65c3a848c21b6939b6185f0ff6640d05814c - url: "https://pub.dev" - source: hosted - version: "4.2.3" - petitparser: - dependency: transitive - description: - name: petitparser - sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4" - url: "https://pub.dev" - source: hosted - version: "5.1.0" - platform: - dependency: transitive - description: - name: platform - sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - plugin_platform_interface: - dependency: transitive - description: - name: plugin_platform_interface - sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - pointycastle: - dependency: transitive - description: - name: pointycastle - sha256: "57b6b78df14175658f09c5dfcfc51a46ad9561a3504fe679913dab404d0cc0f2" - url: "https://pub.dev" - source: hosted - version: "3.7.0" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" - provider: - dependency: "direct main" - description: - name: provider - sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f - url: "https://pub.dev" - source: hosted - version: "6.0.5" - pub_semver: - dependency: "direct main" - description: - name: pub_semver - sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" - url: "https://pub.dev" - source: hosted - version: "2.1.3" - rive: - dependency: "direct main" - description: - name: rive - sha256: "22e3755b75f4ea4492d2fecf4fc2acf1c8d0073df39781d290a20cbfe74c3760" - url: "https://pub.dev" - source: hosted - version: "0.9.1" - rxdart: - dependency: transitive - description: - name: rxdart - sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" - url: "https://pub.dev" - source: hosted - version: "0.27.7" - shared_preferences: - dependency: "direct main" - description: - name: shared_preferences - sha256: ee6257848f822b8481691f20c3e6d2bfee2e9eccb2a3d249907fcfb198c55b41 - url: "https://pub.dev" - source: hosted - version: "2.0.18" - shared_preferences_android: - dependency: transitive - description: - name: shared_preferences_android - sha256: ad423a80fe7b4e48b50d6111b3ea1027af0e959e49d485712e134863d9c1c521 - url: "https://pub.dev" - source: hosted - version: "2.0.17" - shared_preferences_foundation: - dependency: transitive - description: - name: shared_preferences_foundation - sha256: "1e755f8583229f185cfca61b1d80fb2344c9d660e1c69ede5450d8f478fa5310" - url: "https://pub.dev" - source: hosted - version: "2.1.5" - shared_preferences_linux: - dependency: transitive - description: - name: shared_preferences_linux - sha256: "3a59ed10890a8409ad0faad7bb2957dab4b92b8fbe553257b05d30ed8af2c707" - url: "https://pub.dev" - source: hosted - version: "2.1.5" - shared_preferences_platform_interface: - dependency: transitive - description: - name: shared_preferences_platform_interface - sha256: "824bfd02713e37603b2bdade0842e47d56e7db32b1dcdd1cae533fb88e2913fc" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - shared_preferences_web: - dependency: transitive - description: - name: shared_preferences_web - sha256: "0dc2633f215a3d4aa3184c9b2c5766f4711e4e5a6b256e62aafee41f89f1bfb8" - url: "https://pub.dev" - source: hosted - version: "2.0.6" - shared_preferences_windows: - dependency: transitive - description: - name: shared_preferences_windows - sha256: "71bcd669bb9cdb6b39f22c4a7728b6d49e934f6cba73157ffa5a54f1eed67436" - url: "https://pub.dev" - source: hosted - version: "2.1.5" - simple_gesture_detector: - dependency: transitive - description: - name: simple_gesture_detector - sha256: "86d08f85f1f58583b7b4b941d989f48ea6ce08c1724a1d10954a277c2ec36592" - url: "https://pub.dev" - source: hosted - version: "0.2.0" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.99" - source_gen: - dependency: transitive - description: - name: source_gen - sha256: c2bea18c95cfa0276a366270afaa2850b09b4a76db95d546f3d003dcc7011298 - url: "https://pub.dev" - source: hosted - version: "1.2.7" - source_span: - dependency: transitive - description: - name: source_span - sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 - url: "https://pub.dev" - source: hosted - version: "1.9.1" - sqflite: - dependency: transitive - description: - name: sqflite - sha256: "500d6fec583d2c021f2d25a056d96654f910662c64f836cd2063167b8f1fa758" - url: "https://pub.dev" - source: hosted - version: "2.2.6" - sqflite_common: - dependency: transitive - description: - name: sqflite_common - sha256: "963dad8c4aa2f814ce7d2d5b1da2f36f31bd1a439d8f27e3dc189bb9d26bc684" - url: "https://pub.dev" - source: hosted - version: "2.4.3" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 - url: "https://pub.dev" - source: hosted - version: "1.11.0" - stacked: - dependency: "direct main" - description: - name: stacked - sha256: "1ebc0998c0de136bb80a761aa93f7578e596a66e57856260004cf5bd8335c6f9" - url: "https://pub.dev" - source: hosted - version: "3.2.0" - stacked_shared: - dependency: transitive - description: - name: stacked_shared - sha256: cdf6758e0048086d550051ce6072ddec31de131c8f7b518dec3ad437c6638c0a - url: "https://pub.dev" - source: hosted - version: "1.3.0" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - stream_transform: - dependency: transitive - description: - name: stream_transform - sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - synchronized: - dependency: transitive - description: - name: synchronized - sha256: "33b31b6beb98100bf9add464a36a8dd03eb10c7a8cf15aeec535e9b054aaf04b" - url: "https://pub.dev" - source: hosted - version: "3.0.1" - table_calendar: - dependency: "direct main" - description: - name: table_calendar - sha256: "7f1270313c0cdb245b583ed8518982c01d4a7e95869b3c30abcbae3b642c45d0" - url: "https://pub.dev" - source: hosted - version: "3.0.8" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: "https://pub.dev" - source: hosted - version: "1.2.1" - test_api: - dependency: transitive - description: - name: test_api - sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 - url: "https://pub.dev" - source: hosted - version: "0.4.16" - timeago: - dependency: "direct main" - description: - name: timeago - sha256: "46c128312ab0ea144b146c0ac6426ddd96810efec2de3fccc425d00179cd8254" - url: "https://pub.dev" - source: hosted - version: "3.3.0" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" - url: "https://pub.dev" - source: hosted - version: "1.3.1" - universal_io: - dependency: transitive - description: - name: universal_io - sha256: "06866290206d196064fd61df4c7aea1ffe9a4e7c4ccaa8fcded42dd41948005d" - url: "https://pub.dev" - source: hosted - version: "2.2.0" - url_launcher: - dependency: "direct main" - description: - name: url_launcher - sha256: "75f2846facd11168d007529d6cd8fcb2b750186bea046af9711f10b907e1587e" - url: "https://pub.dev" - source: hosted - version: "6.1.10" - url_launcher_android: - dependency: transitive - description: - name: url_launcher_android - sha256: "845530e5e05db5500c1a4c1446785d60cbd8f9bd45e21e7dd643a3273bb4bbd1" - url: "https://pub.dev" - source: hosted - version: "6.0.25" - url_launcher_ios: - dependency: transitive - description: - name: url_launcher_ios - sha256: "7ab1e5b646623d6a2537aa59d5d039f90eebef75a7c25e105f6f75de1f7750c3" - url: "https://pub.dev" - source: hosted - version: "6.1.2" - url_launcher_linux: - dependency: transitive - description: - name: url_launcher_linux - sha256: "206fb8334a700ef7754d6a9ed119e7349bc830448098f21a69bf1b4ed038cabc" - url: "https://pub.dev" - source: hosted - version: "3.0.4" - url_launcher_macos: - dependency: transitive - description: - name: url_launcher_macos - sha256: "0ef2b4f97942a16523e51256b799e9aa1843da6c60c55eefbfa9dbc2dcb8331a" - url: "https://pub.dev" - source: hosted - version: "3.0.4" - url_launcher_platform_interface: - dependency: transitive - description: - name: url_launcher_platform_interface - sha256: "6c9ca697a5ae218ce56cece69d46128169a58aa8653c1b01d26fcd4aad8c4370" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - url_launcher_web: - dependency: transitive - description: - name: url_launcher_web - sha256: "81fe91b6c4f84f222d186a9d23c73157dc4c8e1c71489c4d08be1ad3b228f1aa" - url: "https://pub.dev" - source: hosted - version: "2.0.16" - url_launcher_windows: - dependency: transitive - description: - name: url_launcher_windows - sha256: a83ba3607a507758669cfafb03f9de09bf6e6280c14d9b9cb18f013e406dcacd - url: "https://pub.dev" - source: hosted - version: "3.0.5" - uuid: - dependency: transitive - description: - name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" - url: "https://pub.dev" - source: hosted - version: "3.0.7" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - version: - dependency: transitive - description: - name: version - sha256: b8d9fc75327de5da108942502043f0b7d6500fbded3137560ec2254dc4b9f8ba - url: "https://pub.dev" - source: hosted - version: "2.0.3" - watcher: - dependency: transitive - description: - name: watcher - sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" - url: "https://pub.dev" - source: hosted - version: "1.0.2" - webview_flutter: - dependency: "direct main" - description: - name: webview_flutter - sha256: "392c1d83b70fe2495de3ea2c84531268d5b8de2de3f01086a53334d8b6030a88" - url: "https://pub.dev" - source: hosted - version: "3.0.4" - webview_flutter_android: - dependency: transitive - description: - name: webview_flutter_android - sha256: "8b3b2450e98876c70bfcead876d9390573b34b9418c19e28168b74f6cb252dbd" - url: "https://pub.dev" - source: hosted - version: "2.10.4" - webview_flutter_platform_interface: - dependency: transitive - description: - name: webview_flutter_platform_interface - sha256: "812165e4e34ca677bdfbfa58c01e33b27fd03ab5fa75b70832d4b7d4ca1fa8cf" - url: "https://pub.dev" - source: hosted - version: "1.9.5" - webview_flutter_wkwebview: - dependency: transitive - description: - name: webview_flutter_wkwebview - sha256: a5364369c758892aa487cbf59ea41d9edd10f9d9baf06a94e80f1bd1b4c7bbc0 - url: "https://pub.dev" - source: hosted - version: "2.9.5" - win32: - dependency: transitive - description: - name: win32 - sha256: c0e3a4f7be7dae51d8f152230b86627e3397c1ba8c3fa58e63d44a9f3edc9cef - url: "https://pub.dev" - source: hosted - version: "2.6.1" - xdg_directories: - dependency: transitive - description: - name: xdg_directories - sha256: ee1505df1426458f7f60aac270645098d318a8b4766d85fde75f76f2e21807d1 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - xml: - dependency: transitive - description: - name: xml - sha256: "80d494c09849dc3f899d227a78c30c5b949b985ededf884cb3f3bcd39f4b447a" - url: "https://pub.dev" - source: hosted - version: "5.4.1" - yaml: - dependency: transitive - description: - name: yaml - sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" - url: "https://pub.dev" - source: hosted - version: "3.1.1" -sdks: - dart: ">=2.18.0 <3.0.0" - flutter: ">=3.3.0" From 59a69186b955d829793e18bd61fd430ecc210fc9 Mon Sep 17 00:00:00 2001 From: Antoine Martineau <47289926+Udito3@users.noreply.github.com> Date: Sun, 16 Jul 2023 19:18:10 -0400 Subject: [PATCH 08/20] Replaced pubspec.lock --- pubspec.lock | 1237 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1237 insertions(+) create mode 100644 pubspec.lock diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 000000000..55714b499 --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,1237 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + url: "https://pub.dartlang.org" + source: hosted + version: "50.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.12" + analyzer: + dependency: transitive + description: + name: analyzer + url: "https://pub.dartlang.org" + source: hosted + version: "5.2.0" + archive: + dependency: transitive + description: + name: archive + url: "https://pub.dartlang.org" + source: hosted + version: "3.2.2" + args: + dependency: transitive + description: + name: args + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.0" + async: + dependency: transitive + description: + name: async + url: "https://pub.dartlang.org" + source: hosted + version: "2.9.0" + auto_size_text: + dependency: "direct main" + description: + name: auto_size_text + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + build: + dependency: transitive + description: + name: build + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.1" + built_collection: + dependency: transitive + description: + name: built_collection + url: "https://pub.dartlang.org" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + url: "https://pub.dartlang.org" + source: hosted + version: "8.1.4" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.1" + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.1" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + cli_util: + dependency: transitive + description: + name: cli_util + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.5" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.1" + code_builder: + dependency: transitive + description: + name: code_builder + url: "https://pub.dartlang.org" + source: hosted + version: "4.3.0" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.dartlang.org" + source: hosted + version: "1.16.0" + connectivity_plus: + dependency: "direct main" + description: + name: connectivity_plus + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.9" + connectivity_plus_linux: + dependency: transitive + description: + name: connectivity_plus_linux + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0" + connectivity_plus_macos: + dependency: transitive + description: + name: connectivity_plus_macos + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.6" + connectivity_plus_platform_interface: + dependency: transitive + description: + name: connectivity_plus_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + connectivity_plus_web: + dependency: transitive + description: + name: connectivity_plus_web + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.5" + connectivity_plus_windows: + dependency: transitive + description: + name: connectivity_plus_windows + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.2" + convert: + dependency: transitive + description: + name: convert + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" + crypto: + dependency: transitive + description: + name: crypto + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" + dart_style: + dependency: transitive + description: + name: dart_style + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.4" + dbus: + dependency: transitive + description: + name: dbus + url: "https://pub.dartlang.org" + source: hosted + version: "0.7.1" + device_info_plus: + dependency: "direct main" + description: + name: device_info_plus + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.0" + device_info_plus_linux: + dependency: transitive + description: + name: device_info_plus_linux + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + device_info_plus_macos: + dependency: transitive + description: + name: device_info_plus_macos + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.3" + device_info_plus_platform_interface: + dependency: transitive + description: + name: device_info_plus_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.0+1" + device_info_plus_web: + dependency: transitive + description: + name: device_info_plus_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + device_info_plus_windows: + dependency: transitive + description: + name: device_info_plus_windows + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + easter_egg_trigger: + dependency: "direct main" + description: + name: easter_egg_trigger + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + enum_to_string: + dependency: "direct main" + description: + name: enum_to_string + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + ets_api_clients: + dependency: "direct main" + description: + path: "." + ref: "0.5.0" + resolved-ref: cefaa19955323ce4790b64aa45c598925df71109 + url: "https://github.com/ApplETS/ETS-API-Clients.git" + source: git + version: "0.5.0" + fading_edge_scrollview: + dependency: transitive + description: + name: fading_edge_scrollview + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.1" + feature_discovery: + dependency: "direct main" + description: + name: feature_discovery + url: "https://pub.dartlang.org" + source: hosted + version: "0.14.1" + feedback: + dependency: "direct main" + description: + name: feedback + url: "https://pub.dartlang.org" + source: hosted + version: "2.5.0" + ffi: + dependency: transitive + description: + name: ffi + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.2" + file: + dependency: transitive + description: + name: file + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.2" + firebase_analytics: + dependency: "direct main" + description: + name: firebase_analytics + url: "https://pub.dartlang.org" + source: hosted + version: "10.1.0" + firebase_analytics_platform_interface: + dependency: transitive + description: + name: firebase_analytics_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "3.3.17" + firebase_analytics_web: + dependency: transitive + description: + name: firebase_analytics_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.5.1+8" + firebase_core: + dependency: "direct main" + description: + name: firebase_core + url: "https://pub.dartlang.org" + source: hosted + version: "2.4.1" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "4.5.2" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + firebase_crashlytics: + dependency: "direct main" + description: + name: firebase_crashlytics + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.9" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "3.3.10" + firebase_remote_config: + dependency: "direct main" + description: + name: firebase_remote_config + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.9" + firebase_remote_config_platform_interface: + dependency: transitive + description: + name: firebase_remote_config_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.29" + firebase_remote_config_web: + dependency: transitive + description: + name: firebase_remote_config_web + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.18" + fixnum: + dependency: transitive + description: + name: fixnum + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_cache_manager: + dependency: "direct main" + description: + name: flutter_cache_manager + url: "https://pub.dartlang.org" + source: hosted + version: "3.3.0" + flutter_config: + dependency: "direct dev" + description: + name: flutter_config + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + flutter_custom_tabs: + dependency: "direct main" + description: + name: flutter_custom_tabs + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.4" + flutter_custom_tabs_platform_interface: + dependency: transitive + description: + name: flutter_custom_tabs_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + flutter_custom_tabs_web: + dependency: transitive + description: + name: flutter_custom_tabs_web + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + flutter_launcher_icons: + dependency: "direct dev" + description: + name: flutter_launcher_icons + url: "https://pub.dartlang.org" + source: hosted + version: "0.11.0" + flutter_localizations: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.5" + flutter_secure_storage: + dependency: "direct main" + description: + name: flutter_secure_storage + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.0" + flutter_secure_storage_linux: + dependency: transitive + description: + name: flutter_secure_storage_linux + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.2" + flutter_secure_storage_macos: + dependency: transitive + description: + name: flutter_secure_storage_macos + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.2" + flutter_secure_storage_platform_interface: + dependency: transitive + description: + name: flutter_secure_storage_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + flutter_secure_storage_web: + dependency: transitive + description: + name: flutter_secure_storage_web + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.1" + flutter_secure_storage_windows: + dependency: transitive + description: + name: flutter_secure_storage_windows + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.3" + flutter_siren: + dependency: "direct main" + description: + name: flutter_siren + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + flutter_staggered_animations: + dependency: "direct main" + description: + name: flutter_staggered_animations + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.1" + flutter_svg: + dependency: "direct main" + description: + name: flutter_svg + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.3" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + fluttertoast: + dependency: "direct main" + description: + name: fluttertoast + url: "https://pub.dartlang.org" + source: hosted + version: "8.0.9" + font_awesome_flutter: + dependency: "direct main" + description: + name: font_awesome_flutter + url: "https://pub.dartlang.org" + source: hosted + version: "10.2.1" + get_it: + dependency: "direct main" + description: + name: get_it + url: "https://pub.dartlang.org" + source: hosted + version: "7.2.0" + github: + dependency: "direct main" + description: + name: github + url: "https://pub.dartlang.org" + source: hosted + version: "9.1.0" + glob: + dependency: transitive + description: + name: glob + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.2" + google_maps_flutter: + dependency: "direct main" + description: + name: google_maps_flutter + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.1" + google_maps_flutter_android: + dependency: transitive + description: + name: google_maps_flutter_android + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.3" + google_maps_flutter_ios: + dependency: transitive + description: + name: google_maps_flutter_ios + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.12" + google_maps_flutter_platform_interface: + dependency: transitive + description: + name: google_maps_flutter_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.4" + graphs: + dependency: transitive + description: + name: graphs + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + home_widget: + dependency: "direct main" + description: + name: home_widget + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.6" + http: + dependency: "direct main" + description: + name: http + url: "https://pub.dartlang.org" + source: hosted + version: "0.13.4" + http_parser: + dependency: transitive + description: + name: http_parser + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.0" + image: + dependency: transitive + description: + name: image + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.3" + in_app_review: + dependency: "direct main" + description: + name: in_app_review + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.6" + in_app_review_platform_interface: + dependency: transitive + description: + name: in_app_review_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.4" + intl: + dependency: transitive + description: + name: intl + url: "https://pub.dartlang.org" + source: hosted + version: "0.17.0" + js: + dependency: transitive + description: + name: js + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.4" + json_annotation: + dependency: transitive + description: + name: json_annotation + url: "https://pub.dartlang.org" + source: hosted + version: "4.7.0" + lint: + dependency: "direct dev" + description: + name: lint + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + logger: + dependency: "direct main" + description: + name: logger + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + logging: + dependency: transitive + description: + name: logging + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" + marquee: + dependency: "direct main" + description: + name: marquee + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.1" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.12" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.5" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.0" + mockito: + dependency: "direct dev" + description: + name: mockito + url: "https://pub.dartlang.org" + source: hosted + version: "5.3.2" + nested: + dependency: transitive + description: + name: nested + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + nm: + dependency: transitive + description: + name: nm + url: "https://pub.dartlang.org" + source: hosted + version: "0.5.0" + package_config: + dependency: transitive + description: + name: package_config + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.2" + package_info_plus: + dependency: "direct main" + description: + name: package_info_plus + url: "https://pub.dartlang.org" + source: hosted + version: "1.4.2" + package_info_plus_linux: + dependency: transitive + description: + name: package_info_plus_linux + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + package_info_plus_macos: + dependency: transitive + description: + name: package_info_plus_macos + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0" + package_info_plus_platform_interface: + dependency: transitive + description: + name: package_info_plus_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" + package_info_plus_web: + dependency: transitive + description: + name: package_info_plus_web + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + package_info_plus_windows: + dependency: transitive + description: + name: package_info_plus_windows + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + path: + dependency: transitive + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.2" + path_drawing: + dependency: transitive + description: + name: path_drawing + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + path_parsing: + dependency: transitive + description: + name: path_parsing + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + path_provider: + dependency: "direct main" + description: + name: path_provider + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.11" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.12" + path_provider_ios: + dependency: transitive + description: + name: path_provider_ios + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.8" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.5" + path_provider_macos: + dependency: transitive + description: + name: path_provider_macos + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.5" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.3" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.5" + pedantic: + dependency: transitive + description: + name: pedantic + url: "https://pub.dartlang.org" + source: hosted + version: "1.11.1" + percent_indicator: + dependency: "direct main" + description: + name: percent_indicator + url: "https://pub.dartlang.org" + source: hosted + version: "4.2.2" + petitparser: + dependency: transitive + description: + name: petitparser + url: "https://pub.dartlang.org" + source: hosted + version: "4.4.0" + platform: + dependency: transitive + description: + name: platform + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.3" + process: + dependency: transitive + description: + name: process + url: "https://pub.dartlang.org" + source: hosted + version: "4.2.4" + provider: + dependency: "direct main" + description: + name: provider + url: "https://pub.dartlang.org" + source: hosted + version: "6.0.4" + pub_semver: + dependency: "direct main" + description: + name: pub_semver + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + rive: + dependency: "direct main" + description: + name: rive + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.1" + rxdart: + dependency: transitive + description: + name: rxdart + url: "https://pub.dartlang.org" + source: hosted + version: "0.27.3" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.15" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.11" + shared_preferences_ios: + dependency: transitive + description: + name: shared_preferences_ios + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + shared_preferences_macos: + dependency: transitive + description: + name: shared_preferences_macos + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.3" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.3" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + simple_gesture_detector: + dependency: transitive + description: + name: simple_gesture_detector + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.0" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.6" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.dartlang.org" + source: hosted + version: "1.9.0" + sqflite: + dependency: transitive + description: + name: sqflite + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.2" + sqflite_common: + dependency: transitive + description: + name: sqflite_common + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "1.10.0" + stacked: + dependency: "direct main" + description: + name: stacked + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" + stacked_core: + dependency: transitive + description: + name: stacked_core + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.4" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + stream_transform: + dependency: transitive + description: + name: stream_transform + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.1" + synchronized: + dependency: transitive + description: + name: synchronized + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.0" + table_calendar: + dependency: "direct main" + description: + name: table_calendar + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.6" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.12" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0" + universal_io: + dependency: transitive + description: + name: universal_io + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.4" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.7" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + url: "https://pub.dartlang.org" + source: hosted + version: "6.0.15" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + url: "https://pub.dartlang.org" + source: hosted + version: "6.0.15" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.0" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.0" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.9" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.0" + uuid: + dependency: transitive + description: + name: uuid + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.6" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.2" + version: + dependency: transitive + description: + name: version + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + watcher: + dependency: transitive + description: + name: watcher + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + webview_flutter: + dependency: "direct main" + description: + name: webview_flutter + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.4" + webview_flutter_android: + dependency: transitive + description: + name: webview_flutter_android + url: "https://pub.dartlang.org" + source: hosted + version: "2.8.3" + webview_flutter_platform_interface: + dependency: transitive + description: + name: webview_flutter_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.1" + webview_flutter_wkwebview: + dependency: transitive + description: + name: webview_flutter_wkwebview + url: "https://pub.dartlang.org" + source: hosted + version: "2.7.1" + win32: + dependency: transitive + description: + name: win32 + url: "https://pub.dartlang.org" + source: hosted + version: "2.4.1" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.0+1" + xml: + dependency: transitive + description: + name: xml + url: "https://pub.dartlang.org" + source: hosted + version: "5.3.1" + yaml: + dependency: transitive + description: + name: yaml + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" +sdks: + dart: ">=2.18.0 <3.0.0" + flutter: ">=3.0.0" From 271592673c186412739ba19d679b1134959f5bcd Mon Sep 17 00:00:00 2001 From: Antoine Martineau <47289926+Udito3@users.noreply.github.com> Date: Sun, 16 Jul 2023 20:30:55 -0400 Subject: [PATCH 09/20] Clean up --- lib/core/managers/news_repository.dart | 3 ++- lib/core/models/news.dart | 28 +------------------------ lib/core/models/tags.dart | 28 +++++++++++++++++++++++++ lib/core/viewmodels/news_viewmodel.dart | 2 -- test/models/news_test.dart | 1 + 5 files changed, 32 insertions(+), 30 deletions(-) create mode 100644 lib/core/models/tags.dart diff --git a/lib/core/managers/news_repository.dart b/lib/core/managers/news_repository.dart index 3ce1c6a2e..89e711bad 100644 --- a/lib/core/managers/news_repository.dart +++ b/lib/core/managers/news_repository.dart @@ -1,6 +1,5 @@ // FLUTTER / DART / THIRD-PARTIES import 'dart:convert'; - import 'package:flutter/material.dart'; import 'package:logger/logger.dart'; @@ -11,6 +10,7 @@ import 'package:notredame/core/managers/cache_manager.dart'; // MODELS import 'package:notredame/core/models/news.dart'; +import 'package:notredame/core/models/tags.dart'; // UTILS import 'package:notredame/core/utils/cache_exception.dart'; @@ -18,6 +18,7 @@ import 'package:notredame/core/utils/cache_exception.dart'; // OTHER import 'package:notredame/locator.dart'; + /// Repository to access all the news class NewsRepository { static const String tag = "NewsRepository"; diff --git a/lib/core/models/news.dart b/lib/core/models/news.dart index b700a509e..e157f17c0 100644 --- a/lib/core/models/news.dart +++ b/lib/core/models/news.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:notredame/core/models/tags.dart'; class News { final int id; @@ -45,30 +46,3 @@ class News { }; } } - -class Tag { - final String text; - final Color color; - - Tag({ - @required this.text, - @required this.color, - }); - - factory Tag.fromJson(dynamic tagMap) { - if (tagMap is Map) { - return Tag( - text: tagMap['text'] as String, - color: Color(tagMap['color'] as int), - ); - } - throw ArgumentError('Invalid tagMap type. Expected Map.'); - } - - Map toJson() { - return { - 'text': text, - 'color': color.value, - }; - } -} diff --git a/lib/core/models/tags.dart b/lib/core/models/tags.dart new file mode 100644 index 000000000..e981da57e --- /dev/null +++ b/lib/core/models/tags.dart @@ -0,0 +1,28 @@ +import 'package:flutter/material.dart'; + +class Tag { + final String text; + final Color color; + + Tag({ + @required this.text, + @required this.color, + }); + + factory Tag.fromJson(dynamic tagMap) { + if (tagMap is Map) { + return Tag( + text: tagMap['text'] as String, + color: Color(tagMap['color'] as int), + ); + } + throw ArgumentError('Invalid tagMap type. Expected Map.'); + } + + Map toJson() { + return { + 'text': text, + 'color': color.value, + }; + } +} \ No newline at end of file diff --git a/lib/core/viewmodels/news_viewmodel.dart b/lib/core/viewmodels/news_viewmodel.dart index 898e5b7be..e3bbfdd2f 100644 --- a/lib/core/viewmodels/news_viewmodel.dart +++ b/lib/core/viewmodels/news_viewmodel.dart @@ -1,6 +1,4 @@ // FLUTTER / DART / THIRD-PARTIES -import 'dart:math'; - import 'package:fluttertoast/fluttertoast.dart'; import 'package:stacked/stacked.dart'; import 'package:flutter/material.dart'; diff --git a/test/models/news_test.dart b/test/models/news_test.dart index 973a2d904..e91024adc 100644 --- a/test/models/news_test.dart +++ b/test/models/news_test.dart @@ -4,6 +4,7 @@ import 'package:flutter_test/flutter_test.dart'; // MODELS import 'package:notredame/core/models/news.dart'; +import 'package:notredame/core/models/tags.dart'; void main() { group('News class tests', () { From f518a1e65a6f893f2e9d91307adc7e718697be48 Mon Sep 17 00:00:00 2001 From: Antoine Martineau <47289926+Udito3@users.noreply.github.com> Date: Sun, 16 Jul 2023 20:34:44 -0400 Subject: [PATCH 10/20] Clean up --- lib/locator.dart | 1 - test/managers/news_repository_test.dart | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/locator.dart b/lib/locator.dart index 504c40773..acf4da661 100644 --- a/lib/locator.dart +++ b/lib/locator.dart @@ -2,7 +2,6 @@ import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:get_it/get_it.dart'; import 'package:logger/logger.dart'; -import 'package:notredame/core/managers/news_repository.dart'; // SERVICES import 'package:notredame/core/services/navigation_service.dart'; diff --git a/test/managers/news_repository_test.dart b/test/managers/news_repository_test.dart index a94c7e9ba..6554c6a95 100644 --- a/test/managers/news_repository_test.dart +++ b/test/managers/news_repository_test.dart @@ -7,6 +7,7 @@ import 'package:notredame/core/managers/news_repository.dart'; // MODEL import 'package:notredame/core/models/news.dart'; +// UTILS import '../helpers.dart'; void main() { From bb8d2d392f08f3038f9462c681b2617781a4ef15 Mon Sep 17 00:00:00 2001 From: Samuel Montambault Date: Sun, 16 Jul 2023 23:48:16 -0400 Subject: [PATCH 11/20] Update dev-workflow.yaml --- .github/workflows/dev-workflow.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dev-workflow.yaml b/.github/workflows/dev-workflow.yaml index 59ba1e37b..61258700f 100644 --- a/.github/workflows/dev-workflow.yaml +++ b/.github/workflows/dev-workflow.yaml @@ -57,7 +57,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: Bump version - uses: apomalyn/bump-version-using-labels@1.3.1 + uses: apomalyn/bump-version-using-labels@1.5.0 with: file_path: 'pubspec.yaml' reference_branch: 'master' From 76162d956926d0cf79a9c94f582ac93ef878dae0 Mon Sep 17 00:00:00 2001 From: Samuel Montambault Date: Sun, 16 Jul 2023 23:49:49 -0400 Subject: [PATCH 12/20] Update dev-workflow.yaml --- .github/workflows/dev-workflow.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dev-workflow.yaml b/.github/workflows/dev-workflow.yaml index 61258700f..f086fe26d 100644 --- a/.github/workflows/dev-workflow.yaml +++ b/.github/workflows/dev-workflow.yaml @@ -57,7 +57,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: Bump version - uses: apomalyn/bump-version-using-labels@1.5.0 + uses: apomalyn/bump-version-using-labels@v1.5.0 with: file_path: 'pubspec.yaml' reference_branch: 'master' From f5942e627c4a3a6e403840e715732f0dcc935afa Mon Sep 17 00:00:00 2001 From: MysticFragilist Date: Mon, 17 Jul 2023 03:50:06 +0000 Subject: [PATCH 13/20] [BOT] Bump version from 4.20.0+1 to 4.24.0+1 --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index bcdf6578c..01f946f07 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -5,7 +5,7 @@ description: The 4th generation of ÉTSMobile, the main gateway between the Éco # pub.dev using `pub publish`. This is preferred for private packages. publish_to: 'none' # Remove this line if you wish to publish to pub.dev -version: 4.20.0+1 +version: 4.24.0+1 environment: sdk: ">=2.10.0 <3.0.0" From 1c896cd4d8f9c234a53a266d55ca302a9d313275 Mon Sep 17 00:00:00 2001 From: MysticFragilist Date: Mon, 17 Jul 2023 03:51:53 +0000 Subject: [PATCH 14/20] [BOT] Applying format. --- lib/core/managers/news_repository.dart | 1 - lib/core/models/tags.dart | 2 +- lib/core/viewmodels/news_viewmodel.dart | 9 ++++----- lib/ui/views/dashboard_view.dart | 5 +++-- test/managers/news_repository_test.dart | 9 ++++++--- 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/lib/core/managers/news_repository.dart b/lib/core/managers/news_repository.dart index 89e711bad..891491411 100644 --- a/lib/core/managers/news_repository.dart +++ b/lib/core/managers/news_repository.dart @@ -18,7 +18,6 @@ import 'package:notredame/core/utils/cache_exception.dart'; // OTHER import 'package:notredame/locator.dart'; - /// Repository to access all the news class NewsRepository { static const String tag = "NewsRepository"; diff --git a/lib/core/models/tags.dart b/lib/core/models/tags.dart index e981da57e..e1f8e7186 100644 --- a/lib/core/models/tags.dart +++ b/lib/core/models/tags.dart @@ -25,4 +25,4 @@ class Tag { 'color': color.value, }; } -} \ No newline at end of file +} diff --git a/lib/core/viewmodels/news_viewmodel.dart b/lib/core/viewmodels/news_viewmodel.dart index e3bbfdd2f..55a831c1e 100644 --- a/lib/core/viewmodels/news_viewmodel.dart +++ b/lib/core/viewmodels/news_viewmodel.dart @@ -57,22 +57,21 @@ class NewsViewModel extends FutureViewModel> { setBusyForObject(isLoadingEvents, true); _newsRepository .getNews() - // ignore: return_type_invalid_for_catch_error + // ignore: return_type_invalid_for_catch_error .catchError(onError) .then((value) { if (value != null) { // Reload the list of news news; } - }).whenComplete(() { - setBusyForObject(isLoadingEvents, false); - }); + }).whenComplete(() { + setBusyForObject(isLoadingEvents, false); }); + }); @override // ignore: type_annotate_public_apis void onError(error) { Fluttertoast.showToast(msg: _appIntl.error); } - } diff --git a/lib/ui/views/dashboard_view.dart b/lib/ui/views/dashboard_view.dart index 47ac69ded..8f286d34b 100644 --- a/lib/ui/views/dashboard_view.dart +++ b/lib/ui/views/dashboard_view.dart @@ -92,7 +92,7 @@ class _DashboardViewState extends State onReorder(model, oldIndex, newIndex), padding: const EdgeInsets.fromLTRB(0, 4, 0, 8), children: _buildCards( - model/*, NewsViewModel(intl: AppIntl.of(context))*/), + model /*, NewsViewModel(intl: AppIntl.of(context))*/), proxyDecorator: (child, _, __) { return HapticsContainer(child: child); }, @@ -103,7 +103,8 @@ class _DashboardViewState extends State }); } - List _buildCards(DashboardViewModel model/*, NewsViewModel newsModel*/) { + List _buildCards( + DashboardViewModel model /*, NewsViewModel newsModel*/) { final List cards = List.empty(growable: true); for (final PreferencesFlag element in model.cardsToDisplay) { diff --git a/test/managers/news_repository_test.dart b/test/managers/news_repository_test.dart index 6554c6a95..3ee9a5ce7 100644 --- a/test/managers/news_repository_test.dart +++ b/test/managers/news_repository_test.dart @@ -26,7 +26,8 @@ void main() { // TODO : remove when the news will be empty by default without test news //expect(repository.news, isEmpty); - final List fetchedNews = await repository.getNews(fromCacheOnly: true); + final List fetchedNews = + await repository.getNews(fromCacheOnly: true); expect(repository.news, isNotEmpty); expect(repository.news, equals(fetchedNews)); @@ -38,7 +39,8 @@ void main() { await repository.getNews(fromCacheOnly: true); - final List newsFromCache = await repository.getNews(fromCacheOnly: true); + final List newsFromCache = + await repository.getNews(fromCacheOnly: true); expect(newsFromCache, isNotEmpty); expect(newsFromCache, equals(repository.news)); @@ -48,7 +50,8 @@ void main() { // TODO : remove when the news will be empty by default without test news //expect(repository.news, isEmpty); - final List fetchedNews = await repository.getNews(fromCacheOnly: false); + final List fetchedNews = + await repository.getNews(fromCacheOnly: false); expect(repository.news, isNotEmpty); expect(repository.news, equals(fetchedNews)); From 893179d0a3879e87d133f2093e91c10ebec61472 Mon Sep 17 00:00:00 2001 From: Camille Brulotte Date: Thu, 7 Sep 2023 16:13:18 -0400 Subject: [PATCH 15/20] Oops calendar_view --- pubspec.lock | 7 +++++++ pubspec.yaml | 1 + 2 files changed, 8 insertions(+) diff --git a/pubspec.lock b/pubspec.lock index e28c71ad2..e2766914b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -78,6 +78,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "8.1.4" + calendar_view: + dependency: "direct main" + description: + name: calendar_view + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.4" characters: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 355a618de..9ba820135 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -70,6 +70,7 @@ dependencies: marquee: 2.2.1 auto_size_text: ^3.0.0 easter_egg_trigger: ^1.0.1 + calendar_view: ^1.0.4 dev_dependencies: flutter_test: From b8b62d4614113e99196a7eea28e47a15331599f5 Mon Sep 17 00:00:00 2001 From: Camille Brulotte Date: Thu, 7 Sep 2023 16:29:11 -0400 Subject: [PATCH 16/20] Fix some pr comments --- lib/core/managers/news_repository.dart | 3 --- test/managers/news_repository_test.dart | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/core/managers/news_repository.dart b/lib/core/managers/news_repository.dart index 891491411..27f3863fb 100644 --- a/lib/core/managers/news_repository.dart +++ b/lib/core/managers/news_repository.dart @@ -27,9 +27,6 @@ class NewsRepository { final Logger _logger = locator(); - /// Will be used to report event and error. - final AnalyticsService _analyticsService = locator(); - /// Cache manager to access and update the cache. final CacheManager _cacheManager = locator(); diff --git a/test/managers/news_repository_test.dart b/test/managers/news_repository_test.dart index 3ee9a5ce7..ee777ce13 100644 --- a/test/managers/news_repository_test.dart +++ b/test/managers/news_repository_test.dart @@ -51,7 +51,7 @@ void main() { //expect(repository.news, isEmpty); final List fetchedNews = - await repository.getNews(fromCacheOnly: false); + await repository.getNews(); expect(repository.news, isNotEmpty); expect(repository.news, equals(fetchedNews)); From 68e3b27b854a46ee30a8bf955ca8eb9bd17005b2 Mon Sep 17 00:00:00 2001 From: camillebrulotte Date: Thu, 7 Sep 2023 20:30:37 +0000 Subject: [PATCH 17/20] [BOT] Applying format. --- test/managers/news_repository_test.dart | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/managers/news_repository_test.dart b/test/managers/news_repository_test.dart index ee777ce13..cb014abd1 100644 --- a/test/managers/news_repository_test.dart +++ b/test/managers/news_repository_test.dart @@ -50,8 +50,7 @@ void main() { // TODO : remove when the news will be empty by default without test news //expect(repository.news, isEmpty); - final List fetchedNews = - await repository.getNews(); + final List fetchedNews = await repository.getNews(); expect(repository.news, isNotEmpty); expect(repository.news, equals(fetchedNews)); From dedfddb95f0a063c99b749a3b9047d23b545e49f Mon Sep 17 00:00:00 2001 From: Camille Brulotte Date: Thu, 7 Sep 2023 16:38:28 -0400 Subject: [PATCH 18/20] Remove unused import --- lib/core/managers/news_repository.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/core/managers/news_repository.dart b/lib/core/managers/news_repository.dart index 27f3863fb..1907664c2 100644 --- a/lib/core/managers/news_repository.dart +++ b/lib/core/managers/news_repository.dart @@ -4,7 +4,6 @@ import 'package:flutter/material.dart'; import 'package:logger/logger.dart'; // SERVICES -import 'package:notredame/core/services/analytics_service.dart'; import 'package:notredame/core/services/networking_service.dart'; import 'package:notredame/core/managers/cache_manager.dart'; From 5b8568b14f7bb2cbc64fa71eefdba12391c65fa2 Mon Sep 17 00:00:00 2001 From: Antoine Martineau <47289926+Udito3@users.noreply.github.com> Date: Sat, 16 Sep 2023 19:53:37 -0400 Subject: [PATCH 19/20] Fix the test --- test/models/news_test.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/models/news_test.dart b/test/models/news_test.dart index e91024adc..639b0f000 100644 --- a/test/models/news_test.dart +++ b/test/models/news_test.dart @@ -1,4 +1,6 @@ // FLUTTER / DART / THIRD-PARTIES +// ignore_for_file: avoid_dynamic_calls + import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; From 98638e325b505a85a0bc6c36e53fdef6129b726e Mon Sep 17 00:00:00 2001 From: Udito3 Date: Sat, 16 Sep 2023 23:53:59 +0000 Subject: [PATCH 20/20] [BOT] Applying version. --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index 9ba820135..d87c1f0de 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -5,7 +5,7 @@ description: The 4th generation of ÉTSMobile, the main gateway between the Éco # pub.dev using `pub publish`. This is preferred for private packages. publish_to: 'none' # Remove this line if you wish to publish to pub.dev -version: 4.24.0+1 +version: 4.26.0+1 environment: sdk: ">=2.10.0 <3.0.0"