diff --git a/.gitea/workflows/test.yml b/.gitea/workflows/test.yml index ffd3281..a21834f 100644 --- a/.gitea/workflows/test.yml +++ b/.gitea/workflows/test.yml @@ -84,8 +84,8 @@ jobs: - name: Native Analyze run: flutter analyze - - name: Run Code Metrics - run: flutter pub run dart_code_metrics:metrics lib --disable-sunset-warning --fatal-warnings --fatal-performance + #- name: Run Code Metrics + # run: flutter pub run dart_code_metrics:metrics lib --disable-sunset-warning --fatal-warnings --fatal-performance - name: Test run: | diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..3b10f12 --- /dev/null +++ b/Makefile @@ -0,0 +1,8 @@ + +run-tests: + flutter test + +run-analyse: + flutter analyze + +run-checks: run-analyse run-tests diff --git a/lib/app_router.dart b/lib/app_router.dart index 0b8c097..dada825 100644 --- a/lib/app_router.dart +++ b/lib/app_router.dart @@ -5,7 +5,7 @@ import 'package:eatvio_app/presentation/auth/auth_screen/auth_screen.dart'; import 'package:eatvio_app/presentation/diary/diary_edit_screen/diary_edit_screen.dart'; import 'package:eatvio_app/presentation/diets/diet_create_screen/diet_create_screen.dart'; import 'package:eatvio_app/presentation/diets/diet_select_screen/diet_select_screen.dart'; -import 'package:eatvio_app/presentation/feed/blog_post_create_screen/blog_post_create_screen.dart'; +import 'package:eatvio_app/features/blog_post_create/presentation/pages/blog_post_create_screen.dart'; import 'package:eatvio_app/presentation/feed/blog_post_edit_screen/blog_post_edit_screen.dart'; import 'package:eatvio_app/features/blog_post/presentation/pages/blog_post_screen.dart'; import 'package:eatvio_app/features/feed/presentation/pages/feed_screen.dart'; diff --git a/lib/core/initialization_cubit/initialization_cubit.dart b/lib/core/initialization_cubit/initialization_cubit.dart index 57544ae..2dabef5 100644 --- a/lib/core/initialization_cubit/initialization_cubit.dart +++ b/lib/core/initialization_cubit/initialization_cubit.dart @@ -2,7 +2,6 @@ import 'package:eatvio_app/core/app_export.dart'; import 'package:eatvio_app/core/initialization_cubit/initialization_state.dart'; import 'package:eatvio_app/core/token_storage.dart'; import 'package:eatvio_app/features/chat/repositories/chat_repository.dart'; -import 'package:pusher_client/pusher_client.dart'; class InitializationCubit extends Cubit { final ChatRepository chatRepository; @@ -12,40 +11,48 @@ class InitializationCubit extends Cubit { runInitialization() async { try { await TokenStorage.haveTokenInStorage(); - - final wsUrl = await chatRepository.getWebsocket(); - - PusherOptions options = PusherOptions( - host: 'socket.mobile-stage.eatvio.ru', - wsPort: 443, - encrypted: true, - auth: PusherAuth( - 'wss://' + wsUrl.host + '/app/' + wsUrl.key, - headers: { - 'Authorization': 'Bearer ${TokenStorage.getTokenFromStorage()}', - }, - ), - ); - - PusherClient pusherClient = PusherClient( - wsUrl.key, - options, - autoConnect: true, - enableLogging: true, - ); - - await pusherClient.connect(); - + // final wsUrl = await chatRepository.getWebsocket(); + // final options = PusherChannelsOptions.fromHost( + // scheme: 'wss', + // key: wsUrl.key, + // host: wsUrl.host, + // shouldSupplyMetadataQueries: true, + // metadata: PusherChannelsOptionsMetadata.byDefault(), + // port: 443, + // ); + // final client = PusherChannelsClient.websocket( + // options: options, + // connectionErrorHandler: (exception, trace, refresh) { + // refresh(); + // }, + // minimumReconnectDelayDuration: const Duration( + // seconds: 1, + // ), + // defaultActivityDuration: const Duration( + // seconds: 120, + // ), + // activityDurationOverride: const Duration( + // seconds: 120, + // ), + // waitForPongDuration: const Duration( + // seconds: 30, + // ), + // ); + // await client.connect(); + // final myPrivateChannel = client.privateChannel( + // 'private-message-events.${wsUrl.userId}', + // authorizationDelegate: EndpointAuthorizableChannelTokenAuthorizationDelegate.forPrivateChannel( + // authorizationEndpoint: Uri.parse('https://mobile-stage.eatvio.ru/broadcasting/auth'), + // headers: { + // 'Authorization' : 'Bearer ${await TokenStorage.getTokenFromStorage()}', + // }, + // ), + // ); + // myPrivateChannel.subscribe(); + // myPrivateChannel.bindToAll().listen((event) { + // print(event.name); + // }); emit(const InitializationState.success()); - - Channel channel = pusherClient.subscribe('private-direct-chat.' + '7909ea56-7822-4d5f-8892-134bc937127f'); - - channel.bind("pusher_internal:subscription_succeeded", (PusherEvent? event) { - channel.trigger("pusher_internal:subscription_succeeded", {}); - }); - - channel.registerListener('pusher:subscribe', (data) => print(data.toString())); - } catch (e) { print(e); emit(InitializationState.error(errorMessage: e.toString())); diff --git a/lib/core/token_storage.dart b/lib/core/token_storage.dart index 01ac606..1179241 100644 --- a/lib/core/token_storage.dart +++ b/lib/core/token_storage.dart @@ -18,14 +18,12 @@ abstract class TokenStorage { } } - static Future getTokenFromStorage() async => - (await Hive.openBox('token')).get('token'); + static Future getTokenFromStorage() async => (await Hive.openBox('token')).get('token'); static saveTokenInStorage(String token) async { (await Hive.openBox('token')).put('token', token); _addTokenToDioHeader(token); } - static removeTokenInStorage() async => - (await Hive.openBox('token')).delete('token'); + static removeTokenInStorage() async => (await Hive.openBox('token')).delete('token'); } diff --git a/lib/presentation/feed/blog_post_create_screen/models/blog_post_create_credentials_model.dart b/lib/features/blog_post_create/models/blog_post_create_credentials_model.dart similarity index 70% rename from lib/presentation/feed/blog_post_create_screen/models/blog_post_create_credentials_model.dart rename to lib/features/blog_post_create/models/blog_post_create_credentials_model.dart index 1464eb0..71c84d3 100644 --- a/lib/presentation/feed/blog_post_create_screen/models/blog_post_create_credentials_model.dart +++ b/lib/features/blog_post_create/models/blog_post_create_credentials_model.dart @@ -1,6 +1,6 @@ import 'package:freezed_annotation/freezed_annotation.dart'; -part 'blog_post_create_credentials_model.freezed.dart'; -part 'blog_post_create_credentials_model.g.dart'; +part '../../../presentation/feed/blog_post_create_screen/models/blog_post_create_credentials_model.freezed.dart'; +part '../../../presentation/feed/blog_post_create_screen/models/blog_post_create_credentials_model.g.dart'; @freezed class BlogPostCreateCredentialsModel with _$BlogPostCreateCredentialsModel { diff --git a/lib/presentation/feed/blog_post_create_screen/blog_post_create_screen.dart b/lib/features/blog_post_create/presentation/pages/blog_post_create_screen.dart similarity index 97% rename from lib/presentation/feed/blog_post_create_screen/blog_post_create_screen.dart rename to lib/features/blog_post_create/presentation/pages/blog_post_create_screen.dart index 225a771..4bedcf5 100644 --- a/lib/presentation/feed/blog_post_create_screen/blog_post_create_screen.dart +++ b/lib/features/blog_post_create/presentation/pages/blog_post_create_screen.dart @@ -1,5 +1,5 @@ -import 'bloc/blog_post_create_bloc.dart'; -import 'models/blog_post_create_model.dart'; +import '../../../../presentation/feed/blog_post_create_screen/bloc/blog_post_create_bloc.dart'; +import '../../../../presentation/feed/blog_post_create_screen/models/blog_post_create_model.dart'; import 'package:eatvio_app/core/app_export.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; diff --git a/lib/presentation/feed/blog_post_create_screen/repositories/blog_repository.dart b/lib/features/blog_post_create/repositories/blog_repository.dart similarity index 62% rename from lib/presentation/feed/blog_post_create_screen/repositories/blog_repository.dart rename to lib/features/blog_post_create/repositories/blog_repository.dart index 74f79cd..e11bce9 100644 --- a/lib/presentation/feed/blog_post_create_screen/repositories/blog_repository.dart +++ b/lib/features/blog_post_create/repositories/blog_repository.dart @@ -1,5 +1,5 @@ -import 'package:eatvio_app/presentation/feed/blog_post_create_screen/models/blog_post_create_credentials_model.dart'; -import 'package:eatvio_app/presentation/feed/blog_post_create_screen/services/blog_service.dart'; +import 'package:eatvio_app/features/blog_post_create/models/blog_post_create_credentials_model.dart'; +import 'package:eatvio_app/features/blog_post_create/services/blog_service.dart'; class BlogRepository { final BlogService blogService; diff --git a/lib/presentation/feed/blog_post_create_screen/services/blog_service.dart b/lib/features/blog_post_create/services/blog_service.dart similarity index 74% rename from lib/presentation/feed/blog_post_create_screen/services/blog_service.dart rename to lib/features/blog_post_create/services/blog_service.dart index e559383..1291c9a 100644 --- a/lib/presentation/feed/blog_post_create_screen/services/blog_service.dart +++ b/lib/features/blog_post_create/services/blog_service.dart @@ -1,4 +1,4 @@ -import 'package:eatvio_app/presentation/feed/blog_post_create_screen/models/blog_post_create_credentials_model.dart'; +import 'package:eatvio_app/features/blog_post_create/models/blog_post_create_credentials_model.dart'; import 'package:dio/dio.dart'; import 'package:retrofit/retrofit.dart'; diff --git a/lib/presentation/feed/blog_post_create_screen/services/blog_service.g.dart b/lib/features/blog_post_create/services/blog_service.g.dart similarity index 100% rename from lib/presentation/feed/blog_post_create_screen/services/blog_service.g.dart rename to lib/features/blog_post_create/services/blog_service.g.dart diff --git a/lib/features/chat/models/websocket_info_model.dart b/lib/features/chat/models/websocket_info_model.dart index 281c71e..274b421 100644 --- a/lib/features/chat/models/websocket_info_model.dart +++ b/lib/features/chat/models/websocket_info_model.dart @@ -10,6 +10,9 @@ class WebsocketInfoModel with _$WebsocketInfoModel { required String key, required String host, required String port, + required String cluster, + @JsonKey(name: 'user_id') + required int userId, }) = _WebsocketInfoModel; factory WebsocketInfoModel.fromJson(Map json) => _$WebsocketInfoModelFromJson(json); diff --git a/lib/features/chat/models/websocket_info_model.freezed.dart b/lib/features/chat/models/websocket_info_model.freezed.dart index 9a26fee..cd383a2 100644 --- a/lib/features/chat/models/websocket_info_model.freezed.dart +++ b/lib/features/chat/models/websocket_info_model.freezed.dart @@ -23,6 +23,9 @@ mixin _$WebsocketInfoModel { String get key => throw _privateConstructorUsedError; String get host => throw _privateConstructorUsedError; String get port => throw _privateConstructorUsedError; + String get cluster => throw _privateConstructorUsedError; + @JsonKey(name: 'user_id') + int get userId => throw _privateConstructorUsedError; Map toJson() => throw _privateConstructorUsedError; @JsonKey(ignore: true) @@ -36,7 +39,12 @@ abstract class $WebsocketInfoModelCopyWith<$Res> { WebsocketInfoModel value, $Res Function(WebsocketInfoModel) then) = _$WebsocketInfoModelCopyWithImpl<$Res, WebsocketInfoModel>; @useResult - $Res call({String key, String host, String port}); + $Res call( + {String key, + String host, + String port, + String cluster, + @JsonKey(name: 'user_id') int userId}); } /// @nodoc @@ -55,6 +63,8 @@ class _$WebsocketInfoModelCopyWithImpl<$Res, $Val extends WebsocketInfoModel> Object? key = null, Object? host = null, Object? port = null, + Object? cluster = null, + Object? userId = null, }) { return _then(_value.copyWith( key: null == key @@ -69,6 +79,14 @@ class _$WebsocketInfoModelCopyWithImpl<$Res, $Val extends WebsocketInfoModel> ? _value.port : port // ignore: cast_nullable_to_non_nullable as String, + cluster: null == cluster + ? _value.cluster + : cluster // ignore: cast_nullable_to_non_nullable + as String, + userId: null == userId + ? _value.userId + : userId // ignore: cast_nullable_to_non_nullable + as int, ) as $Val); } } @@ -81,7 +99,12 @@ abstract class _$$WebsocketInfoModelImplCopyWith<$Res> __$$WebsocketInfoModelImplCopyWithImpl<$Res>; @override @useResult - $Res call({String key, String host, String port}); + $Res call( + {String key, + String host, + String port, + String cluster, + @JsonKey(name: 'user_id') int userId}); } /// @nodoc @@ -98,6 +121,8 @@ class __$$WebsocketInfoModelImplCopyWithImpl<$Res> Object? key = null, Object? host = null, Object? port = null, + Object? cluster = null, + Object? userId = null, }) { return _then(_$WebsocketInfoModelImpl( key: null == key @@ -112,6 +137,14 @@ class __$$WebsocketInfoModelImplCopyWithImpl<$Res> ? _value.port : port // ignore: cast_nullable_to_non_nullable as String, + cluster: null == cluster + ? _value.cluster + : cluster // ignore: cast_nullable_to_non_nullable + as String, + userId: null == userId + ? _value.userId + : userId // ignore: cast_nullable_to_non_nullable + as int, )); } } @@ -120,7 +153,11 @@ class __$$WebsocketInfoModelImplCopyWithImpl<$Res> @JsonSerializable() class _$WebsocketInfoModelImpl implements _WebsocketInfoModel { const _$WebsocketInfoModelImpl( - {required this.key, required this.host, required this.port}); + {required this.key, + required this.host, + required this.port, + required this.cluster, + @JsonKey(name: 'user_id') required this.userId}); factory _$WebsocketInfoModelImpl.fromJson(Map json) => _$$WebsocketInfoModelImplFromJson(json); @@ -131,10 +168,15 @@ class _$WebsocketInfoModelImpl implements _WebsocketInfoModel { final String host; @override final String port; + @override + final String cluster; + @override + @JsonKey(name: 'user_id') + final int userId; @override String toString() { - return 'WebsocketInfoModel(key: $key, host: $host, port: $port)'; + return 'WebsocketInfoModel(key: $key, host: $host, port: $port, cluster: $cluster, userId: $userId)'; } @override @@ -144,12 +186,15 @@ class _$WebsocketInfoModelImpl implements _WebsocketInfoModel { other is _$WebsocketInfoModelImpl && (identical(other.key, key) || other.key == key) && (identical(other.host, host) || other.host == host) && - (identical(other.port, port) || other.port == port)); + (identical(other.port, port) || other.port == port) && + (identical(other.cluster, cluster) || other.cluster == cluster) && + (identical(other.userId, userId) || other.userId == userId)); } @JsonKey(ignore: true) @override - int get hashCode => Object.hash(runtimeType, key, host, port); + int get hashCode => + Object.hash(runtimeType, key, host, port, cluster, userId); @JsonKey(ignore: true) @override @@ -168,9 +213,12 @@ class _$WebsocketInfoModelImpl implements _WebsocketInfoModel { abstract class _WebsocketInfoModel implements WebsocketInfoModel { const factory _WebsocketInfoModel( - {required final String key, - required final String host, - required final String port}) = _$WebsocketInfoModelImpl; + {required final String key, + required final String host, + required final String port, + required final String cluster, + @JsonKey(name: 'user_id') required final int userId}) = + _$WebsocketInfoModelImpl; factory _WebsocketInfoModel.fromJson(Map json) = _$WebsocketInfoModelImpl.fromJson; @@ -182,6 +230,11 @@ abstract class _WebsocketInfoModel implements WebsocketInfoModel { @override String get port; @override + String get cluster; + @override + @JsonKey(name: 'user_id') + int get userId; + @override @JsonKey(ignore: true) _$$WebsocketInfoModelImplCopyWith<_$WebsocketInfoModelImpl> get copyWith => throw _privateConstructorUsedError; diff --git a/lib/features/chat/models/websocket_info_model.g.dart b/lib/features/chat/models/websocket_info_model.g.dart index e5b5c32..b2bb124 100644 --- a/lib/features/chat/models/websocket_info_model.g.dart +++ b/lib/features/chat/models/websocket_info_model.g.dart @@ -12,6 +12,8 @@ _$WebsocketInfoModelImpl _$$WebsocketInfoModelImplFromJson( key: json['key'] as String, host: json['host'] as String, port: json['port'] as String, + cluster: json['cluster'] as String, + userId: (json['user_id'] as num).toInt(), ); Map _$$WebsocketInfoModelImplToJson( @@ -20,4 +22,6 @@ Map _$$WebsocketInfoModelImplToJson( 'key': instance.key, 'host': instance.host, 'port': instance.port, + 'cluster': instance.cluster, + 'user_id': instance.userId, }; diff --git a/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_bloc.dart b/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_bloc.dart index 591cad6..d279105 100644 --- a/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_bloc.dart +++ b/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_bloc.dart @@ -190,12 +190,12 @@ class DiaryEditBloc extends Bloc { final recommendedChartValues = jsonDecode(responseChart.body)['dailyNutritionRecommendation'] .values - .map((value) => value as int) + .map((value) => value as double) .toList(); final consumedChartValues = jsonDecode(responseChart.body)['dailyNutritionIntake'] .values - .map((value) => value as int) + .map((value) => value as double) .toList(); return [recommendedChartValues, consumedChartValues]; } else { @@ -275,10 +275,10 @@ class DiaryEditBloc extends Bloc { moderationExpanded: false, token: token, recommendedChartValues: recommendedChartValues.values - .map((value) => value as int) + .map((value) => value as double) .toList(), consumedChartValues: consumedChartValues.values - .map((value) => value as int) + .map((value) => value as double) .toList(), meals: diary['meals'], portions: diary['meals'][0]['portions'], diff --git a/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_state.dart b/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_state.dart index fc8e197..6486b03 100644 --- a/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_state.dart +++ b/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_state.dart @@ -57,8 +57,8 @@ class DiaryEditLoadedState extends DiaryEditState { List? portions; List? photos; List? autocompleteList; - List recommendedChartValues; - List consumedChartValues; + List recommendedChartValues; + List consumedChartValues; SelectionPopupModel? currentMeal; SelectionPopupModel? portionController; TimeOfDay? wakeupController; @@ -117,8 +117,8 @@ class DiaryEditLoadedState extends DiaryEditState { SelectionPopupModel? portionController, String? diaryDate, String? token, - List? recommendedChartValues, - List? consumedChartValues, + List? recommendedChartValues, + List? consumedChartValues, List? meals, List? portions, List? photos, diff --git a/lib/presentation/diary/diary_edit_screen/diary_edit_screen.dart b/lib/presentation/diary/diary_edit_screen/diary_edit_screen.dart index 77aa77f..5f94a18 100644 --- a/lib/presentation/diary/diary_edit_screen/diary_edit_screen.dart +++ b/lib/presentation/diary/diary_edit_screen/diary_edit_screen.dart @@ -720,8 +720,8 @@ class DiaryEditScreen extends StatelessWidget { } _buildNutritionChart(BuildContext context, DiaryEditLoadedState state) { - final List recommendedValues = state.recommendedChartValues; // Рекомендуемые значения: калории, жиры, белки, углеводы - final List consumedValues = state.consumedChartValues; // + final List recommendedValues = state.recommendedChartValues; // Рекомендуемые значения: калории, жиры, белки, углеводы + final List consumedValues = state.consumedChartValues; // return Container( margin: EdgeInsets.symmetric(horizontal: 16.h), padding: EdgeInsets.symmetric( @@ -1196,7 +1196,7 @@ class DiaryEditScreen extends StatelessWidget { } } -bool checkConsumedValues(List recommendedValues, List consumedValues) { +bool checkConsumedValues(List recommendedValues, List consumedValues) { for (int i = 0; i < recommendedValues.length; i++) { if (consumedValues[i] > recommendedValues[i]) { // Если хотя бы одно потребленное значение превышает рекомендованное diff --git a/lib/presentation/feed/blog_post_create_screen/models/blog_post_create_credentials_model.freezed.dart b/lib/presentation/feed/blog_post_create_screen/models/blog_post_create_credentials_model.freezed.dart index 87eb9e1..d403e45 100644 --- a/lib/presentation/feed/blog_post_create_screen/models/blog_post_create_credentials_model.freezed.dart +++ b/lib/presentation/feed/blog_post_create_screen/models/blog_post_create_credentials_model.freezed.dart @@ -3,7 +3,7 @@ // ignore_for_file: type=lint // ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark -part of 'blog_post_create_credentials_model.dart'; +part of '../../../../features/blog_post_create/models/blog_post_create_credentials_model.dart'; // ************************************************************************** // FreezedGenerator diff --git a/lib/presentation/feed/blog_post_create_screen/models/blog_post_create_credentials_model.g.dart b/lib/presentation/feed/blog_post_create_screen/models/blog_post_create_credentials_model.g.dart index bf339e9..5dec030 100644 --- a/lib/presentation/feed/blog_post_create_screen/models/blog_post_create_credentials_model.g.dart +++ b/lib/presentation/feed/blog_post_create_screen/models/blog_post_create_credentials_model.g.dart @@ -1,6 +1,6 @@ // GENERATED CODE - DO NOT MODIFY BY HAND -part of 'blog_post_create_credentials_model.dart'; +part of '../../../../features/blog_post_create/models/blog_post_create_credentials_model.dart'; // ************************************************************************** // JsonSerializableGenerator diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..67e7935 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,26 @@ +{ + "name": "eatvio_app", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "eatvio_app", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "simple-git-hooks": "^2.11.1" + } + }, + "node_modules/simple-git-hooks": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/simple-git-hooks/-/simple-git-hooks-2.11.1.tgz", + "integrity": "sha512-tgqwPUMDcNDhuf1Xf6KTUsyeqGdgKMhzaH4PAZZuzguOgTl5uuyeYe/8mWgAr6IBxB5V06uqEf6Dy37gIWDtDg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "simple-git-hooks": "cli.js" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..8c0eba5 --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "name": "eatvio_app", + "version": "1.0.0", + "description": "- Flutter (Channel stable, 3.19.0, on Ubuntu 22.04.3 LTS 6.2.0-39-generic, locale en_US.UTF-8) - Android Studio (version 2023.1) - VS Code (version 1.85.0) - Android SDK (version 34.0.0) - устанавливается из Android Studio (Tools->SDK Manager->Android Command Line Tools) - Эмулятор (2 available)", + "main": "index.js", + "directories": { + "lib": "lib", + "test": "test" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "devDependencies": { + "simple-git-hooks": "^2.11.1" + }, + "simple-git-hooks": { + "pre-push": "make run-checks", + "preserveUnused": true + } +} diff --git a/pubspec.yaml b/pubspec.yaml index 353e7ef..d3572e0 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -59,10 +59,8 @@ dependencies: get_it: ^7.7.0 # http request dio: ^5.4.3+1 - # websocket - pusher_client: - git: - url: https://github.com/bihim/pusher_client + # pusher + dart_pusher_channels: ^1.2.2+1 # photo gallery viewer + dismissible page photo_view: ^0.15.0 dismissible_page: ^1.0.2 @@ -70,8 +68,6 @@ dependencies: url_launcher: ^6.3.0 dev_dependencies: - dart_code_metrics: ^5.7.6 - dart_code_metrics_presets: ^1.8.0 build_runner: ^2.4.11 freezed: ^2.5.2 json_serializable: ^6.8.0