feat(hooks): prepush hooks

This commit is contained in:
alex
2024-07-03 11:59:32 +03:00
parent 9849b03404
commit 6a03e06f04
16 changed files with 249 additions and 171 deletions

3
.gitignore vendored
View File

@@ -6,4 +6,5 @@
/.flutter-plugins
/.flutter-plugins-dependencies
/.packages
/.env
/.env
/node_modules/

7
Makefile Normal file
View File

@@ -0,0 +1,7 @@
run-tests:
flutter test
run-analyse:
flutter analyze
run-checks: run-analyse run-tests

View File

@@ -45,8 +45,9 @@ class AppRouter {
path: '/auth-screen',
name: 'authScreen',
redirect: (context, state) async {
if (await TokenStorage.haveTokenInStorage())
if (await TokenStorage.haveTokenInStorage()) {
return '/my-profile-screen';
}
return null;
},
builder: (context, state) => AuthScreen.builder(context),
@@ -59,120 +60,72 @@ class AppRouter {
GoRoute(
path: 'credentials-screen',
name: 'credentialsScreen',
builder: (context, state) =>
CredentialsScreen.builder(context, state.extra),
builder: (context, state) => CredentialsScreen.builder(context, state.extra),
routes: [
GoRoute(
path: 'name-screen',
name: 'nameScreen',
builder: (context, state) =>
NameScreen.builder(context, state.extra),
builder: (context, state) => NameScreen.builder(context, state.extra),
routes: [
GoRoute(
path: 'gender-screen',
name: 'genderScreen',
builder: (context, state) =>
GenderScreen.builder(context, state.extra),
builder: (context, state) => GenderScreen.builder(context, state.extra),
routes: [
GoRoute(
path: 'date-of-birth-screen',
name: 'dateOfBirthScreen',
builder: (context, state) =>
DateOfBirthScreen.builder(context, state.extra),
builder: (context, state) => DateOfBirthScreen.builder(context, state.extra),
routes: [
GoRoute(
path: 'city-of-living-screen',
name: 'cityOfLivingScreen',
builder: (context, state) =>
CityOfLivingScreen.builder(
context, state.extra),
builder: (context, state) => CityOfLivingScreen.builder(context, state.extra),
routes: [
GoRoute(
path: 'body-circumferences-screen',
name: 'bodyCircumferencesScreen',
builder: (context, state) =>
BodyCircumferencesScreen.builder(
context, state.extra),
builder: (context, state) => BodyCircumferencesScreen.builder(context, state.extra),
routes: [
GoRoute(
path: 'weight-screen',
name: 'weightScreen',
builder: (context, state) =>
WeightScreen.builder(
context, state.extra),
builder: (context, state) => WeightScreen.builder(context, state.extra),
routes: [
GoRoute(
path: 'height-screen',
name: 'heightScreen',
builder: (context, state) =>
HeightScreen.builder(
context, state.extra),
builder: (context, state) => HeightScreen.builder(context, state.extra),
routes: [
GoRoute(
path: 'blood-pressure-screen',
name: 'bloodPressureScreen',
builder: (context, state) =>
BloodPressureScreen.builder(
context, state.extra),
builder: (context, state) => BloodPressureScreen.builder(context, state.extra),
routes: [
GoRoute(
path:
'favorite-sports-screen',
name:
'favoriteSportsScreen',
builder: (context, state) =>
FavoriteSportsScreen
.builder(context,
state.extra),
path: 'favorite-sports-screen',
name: 'favoriteSportsScreen',
builder: (context, state) => FavoriteSportsScreen.builder(context, state.extra),
routes: [
GoRoute(
name: 'allergiesScreen',
path: 'allergiesScreen',
builder: (context,
state) =>
AllergiesScreen
.builder(
context,
state
.extra),
builder: (context, state) => AllergiesScreen.builder(context, state.extra),
routes: [
GoRoute(
name:
'medicineIntakeScreen',
path:
'medicine-intake-screen',
builder: (context,
state) =>
MedicineIntakeScreen
.builder(
context,
state
.extra),
name: 'medicineIntakeScreen',
path: 'medicine-intake-screen',
builder: (context, state) => MedicineIntakeScreen.builder(context, state.extra),
),
GoRoute(
name:
'favoriteFoodsScreen',
path:
'favorite-foods-screen',
builder: (context,
state) =>
FavoriteFoodsScreen
.builder(
context,
state
.extra),
name: 'favoriteFoodsScreen',
path: 'favorite-foods-screen',
builder: (context, state) => FavoriteFoodsScreen.builder(context, state.extra),
routes: [
GoRoute(
path:
'additional-information-screen',
name:
'additionalInformationScreen',
builder: (context,
state) =>
AdditionalInformationScreen.builder(
context,
state
.extra),
path: 'additional-information-screen',
name: 'additionalInformationScreen',
builder: (context, state) => AdditionalInformationScreen.builder(context, state.extra),
),
],
),
@@ -220,14 +173,12 @@ class AppRouter {
GoRoute(
path: 'blog-post-create-screen',
name: 'blogPostCreateScreen',
builder: (context, state) =>
BlogPostCreateScreen.builder(context),
builder: (context, state) => BlogPostCreateScreen.builder(context),
),
GoRoute(
path: 'blog-post-screen',
name: 'blogPostScreen',
builder: (context, state) =>
BlogPostScreen(blogPostID: state.extra as String),
builder: (context, state) => BlogPostScreen(blogPostID: state.extra as String),
routes: [
GoRoute(
path: 'blog-post-edit-screen',

View File

@@ -1,3 +1,4 @@
import 'package:dart_pusher_channels/dart_pusher_channels.dart';
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';
@@ -8,54 +9,58 @@ class InitializationCubit extends Cubit<InitializationState> {
InitializationCubit({required this.chatRepository}) : super(const InitializationState.loading());
// final myPrivateChannel = client.privateChannel(
// 'private-new-chat-messages.${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);
// });
runInitialization() async {
try {
await TokenStorage.haveTokenInStorage();
// 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());
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();
emit(InitializationState.success(
client: client,
));
} catch (e) {
print(e);
emit(InitializationState.error(errorMessage: e.toString()));
emit(InitializationState.error(
errorMessage: e.toString(),
));
}
}
}

View File

@@ -1,3 +1,4 @@
import 'package:dart_pusher_channels/dart_pusher_channels.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'initialization_state.freezed.dart';
@@ -8,7 +9,11 @@ abstract class InitializationState with _$InitializationState {
const factory InitializationState.loading() = InitializationStateLoading;
const factory InitializationState.success() = InitializationStateSuccess;
const factory InitializationState.success({
required PusherChannelsClient client,
}) = InitializationStateSuccess;
const factory InitializationState.error({required String errorMessage}) = InitializationStateError;
const factory InitializationState.error({
required String errorMessage,
}) = InitializationStateError;
}

View File

@@ -20,7 +20,7 @@ mixin _$InitializationState {
TResult when<TResult extends Object?>(
TResult Function() $default, {
required TResult Function() loading,
required TResult Function() success,
required TResult Function(PusherChannelsClient client) success,
required TResult Function(String errorMessage) error,
}) =>
throw _privateConstructorUsedError;
@@ -28,7 +28,7 @@ mixin _$InitializationState {
TResult? whenOrNull<TResult extends Object?>(
TResult? Function()? $default, {
TResult? Function()? loading,
TResult? Function()? success,
TResult? Function(PusherChannelsClient client)? success,
TResult? Function(String errorMessage)? error,
}) =>
throw _privateConstructorUsedError;
@@ -36,7 +36,7 @@ mixin _$InitializationState {
TResult maybeWhen<TResult extends Object?>(
TResult Function()? $default, {
TResult Function()? loading,
TResult Function()? success,
TResult Function(PusherChannelsClient client)? success,
TResult Function(String errorMessage)? error,
required TResult orElse(),
}) =>
@@ -127,7 +127,7 @@ class _$InitializationStateImpl implements _InitializationState {
TResult when<TResult extends Object?>(
TResult Function() $default, {
required TResult Function() loading,
required TResult Function() success,
required TResult Function(PusherChannelsClient client) success,
required TResult Function(String errorMessage) error,
}) {
return $default();
@@ -138,7 +138,7 @@ class _$InitializationStateImpl implements _InitializationState {
TResult? whenOrNull<TResult extends Object?>(
TResult? Function()? $default, {
TResult? Function()? loading,
TResult? Function()? success,
TResult? Function(PusherChannelsClient client)? success,
TResult? Function(String errorMessage)? error,
}) {
return $default?.call();
@@ -149,7 +149,7 @@ class _$InitializationStateImpl implements _InitializationState {
TResult maybeWhen<TResult extends Object?>(
TResult Function()? $default, {
TResult Function()? loading,
TResult Function()? success,
TResult Function(PusherChannelsClient client)? success,
TResult Function(String errorMessage)? error,
required TResult orElse(),
}) {
@@ -245,7 +245,7 @@ class _$InitializationStateLoadingImpl implements InitializationStateLoading {
TResult when<TResult extends Object?>(
TResult Function() $default, {
required TResult Function() loading,
required TResult Function() success,
required TResult Function(PusherChannelsClient client) success,
required TResult Function(String errorMessage) error,
}) {
return loading();
@@ -256,7 +256,7 @@ class _$InitializationStateLoadingImpl implements InitializationStateLoading {
TResult? whenOrNull<TResult extends Object?>(
TResult? Function()? $default, {
TResult? Function()? loading,
TResult? Function()? success,
TResult? Function(PusherChannelsClient client)? success,
TResult? Function(String errorMessage)? error,
}) {
return loading?.call();
@@ -267,7 +267,7 @@ class _$InitializationStateLoadingImpl implements InitializationStateLoading {
TResult maybeWhen<TResult extends Object?>(
TResult Function()? $default, {
TResult Function()? loading,
TResult Function()? success,
TResult Function(PusherChannelsClient client)? success,
TResult Function(String errorMessage)? error,
required TResult orElse(),
}) {
@@ -325,6 +325,8 @@ abstract class _$$InitializationStateSuccessImplCopyWith<$Res> {
_$InitializationStateSuccessImpl value,
$Res Function(_$InitializationStateSuccessImpl) then) =
__$$InitializationStateSuccessImplCopyWithImpl<$Res>;
@useResult
$Res call({PusherChannelsClient client});
}
/// @nodoc
@@ -336,37 +338,61 @@ class __$$InitializationStateSuccessImplCopyWithImpl<$Res>
_$InitializationStateSuccessImpl _value,
$Res Function(_$InitializationStateSuccessImpl) _then)
: super(_value, _then);
@pragma('vm:prefer-inline')
@override
$Res call({
Object? client = null,
}) {
return _then(_$InitializationStateSuccessImpl(
client: null == client
? _value.client
: client // ignore: cast_nullable_to_non_nullable
as PusherChannelsClient,
));
}
}
/// @nodoc
class _$InitializationStateSuccessImpl implements InitializationStateSuccess {
const _$InitializationStateSuccessImpl();
const _$InitializationStateSuccessImpl({required this.client});
@override
final PusherChannelsClient client;
@override
String toString() {
return 'InitializationState.success()';
return 'InitializationState.success(client: $client)';
}
@override
bool operator ==(Object other) {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$InitializationStateSuccessImpl);
other is _$InitializationStateSuccessImpl &&
(identical(other.client, client) || other.client == client));
}
@override
int get hashCode => runtimeType.hashCode;
int get hashCode => Object.hash(runtimeType, client);
@JsonKey(ignore: true)
@override
@pragma('vm:prefer-inline')
_$$InitializationStateSuccessImplCopyWith<_$InitializationStateSuccessImpl>
get copyWith => __$$InitializationStateSuccessImplCopyWithImpl<
_$InitializationStateSuccessImpl>(this, _$identity);
@override
@optionalTypeArgs
TResult when<TResult extends Object?>(
TResult Function() $default, {
required TResult Function() loading,
required TResult Function() success,
required TResult Function(PusherChannelsClient client) success,
required TResult Function(String errorMessage) error,
}) {
return success();
return success(client);
}
@override
@@ -374,10 +400,10 @@ class _$InitializationStateSuccessImpl implements InitializationStateSuccess {
TResult? whenOrNull<TResult extends Object?>(
TResult? Function()? $default, {
TResult? Function()? loading,
TResult? Function()? success,
TResult? Function(PusherChannelsClient client)? success,
TResult? Function(String errorMessage)? error,
}) {
return success?.call();
return success?.call(client);
}
@override
@@ -385,12 +411,12 @@ class _$InitializationStateSuccessImpl implements InitializationStateSuccess {
TResult maybeWhen<TResult extends Object?>(
TResult Function()? $default, {
TResult Function()? loading,
TResult Function()? success,
TResult Function(PusherChannelsClient client)? success,
TResult Function(String errorMessage)? error,
required TResult orElse(),
}) {
if (success != null) {
return success();
return success(client);
}
return orElse();
}
@@ -434,7 +460,14 @@ class _$InitializationStateSuccessImpl implements InitializationStateSuccess {
}
abstract class InitializationStateSuccess implements InitializationState {
const factory InitializationStateSuccess() = _$InitializationStateSuccessImpl;
const factory InitializationStateSuccess(
{required final PusherChannelsClient client}) =
_$InitializationStateSuccessImpl;
PusherChannelsClient get client;
@JsonKey(ignore: true)
_$$InitializationStateSuccessImplCopyWith<_$InitializationStateSuccessImpl>
get copyWith => throw _privateConstructorUsedError;
}
/// @nodoc
@@ -508,7 +541,7 @@ class _$InitializationStateErrorImpl implements InitializationStateError {
TResult when<TResult extends Object?>(
TResult Function() $default, {
required TResult Function() loading,
required TResult Function() success,
required TResult Function(PusherChannelsClient client) success,
required TResult Function(String errorMessage) error,
}) {
return error(errorMessage);
@@ -519,7 +552,7 @@ class _$InitializationStateErrorImpl implements InitializationStateError {
TResult? whenOrNull<TResult extends Object?>(
TResult? Function()? $default, {
TResult? Function()? loading,
TResult? Function()? success,
TResult? Function(PusherChannelsClient client)? success,
TResult? Function(String errorMessage)? error,
}) {
return error?.call(errorMessage);
@@ -530,7 +563,7 @@ class _$InitializationStateErrorImpl implements InitializationStateError {
TResult maybeWhen<TResult extends Object?>(
TResult Function()? $default, {
TResult Function()? loading,
TResult Function()? success,
TResult Function(PusherChannelsClient client)? success,
TResult Function(String errorMessage)? error,
required TResult orElse(),
}) {

View File

@@ -11,6 +11,5 @@ class BlogPostCreateCredentialsModel with _$BlogPostCreateCredentialsModel {
@Default('active') String status,
}) = _BlogPostCreateCredentialsModel;
factory BlogPostCreateCredentialsModel.fromJson(Map<String, Object?> json) =>
_$BlogPostCreateCredentialsModelFromJson(json);
factory BlogPostCreateCredentialsModel.fromJson(Map<String, Object?> json) => _$BlogPostCreateCredentialsModelFromJson(json);
}

View File

@@ -1,7 +1,6 @@
import 'package:eatvio_app/features/chat/presentation/pages/chat_select_screen/models/chat_entry.dart';
import 'package:eatvio_app/features/chat/presentation/pages/chat_select_screen/widgets/chat_entry_widget.dart';
import 'package:flutter/cupertino.dart';
import 'bloc/chat_select_bloc.dart';
import 'models/chat_select_model.dart';
import 'package:eatvio_app/core/app_export.dart';

View File

@@ -48,7 +48,7 @@ class ChatEntryWidget extends StatelessWidget {
),
),
),
SizedBox(width: 8),
SizedBox(width: 12),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,

View File

@@ -15,21 +15,16 @@ import 'package:get_it/get_it.dart';
final sl = GetIt.instance;
Future<void> init() async {
// BLoC
// BLoC / Cubit
sl.registerFactory<InitializationCubit>(() => InitializationCubit(chatRepository: sl()));
sl.registerFactory<ChatRoomCubit>(() => ChatRoomCubit(chatRepository: sl()));
sl.registerFactory<InitializationCubit>(
() => InitializationCubit(chatRepository: sl()));
sl.registerFactory<FeedCubit>(() => FeedCubit(feedRepository: sl()));
sl.registerFactory<BlogPostCubit>(
() => BlogPostCubit(blogPostRepository: sl()));
sl.registerFactory<BlogPostCubit>(() => BlogPostCubit(blogPostRepository: sl()));
// Repository
sl.registerLazySingleton<ChatRepository>(
() => ChatRepository(chatService: sl()));
sl.registerLazySingleton<FeedRepository>(
() => FeedRepository(feedService: sl()));
sl.registerLazySingleton<BlogPostRepository>(
() => BlogPostRepository(blogPostService: sl()));
sl.registerLazySingleton<ChatRepository>(() => ChatRepository(chatService: sl()));
sl.registerLazySingleton<FeedRepository>(() => FeedRepository(feedService: sl()));
sl.registerLazySingleton<BlogPostRepository>(() => BlogPostRepository(blogPostService: sl()));
// Services
sl.registerLazySingleton<ChatService>(() => ChatService(sl()));

View File

@@ -52,8 +52,7 @@ class MyApp extends StatelessWidget {
),
],
child: BlocListener<InitializationCubit, InitializationState>(
listener: (BuildContext context, InitializationState state) {
},
listener: (BuildContext context, InitializationState state) {},
child: BlocBuilder<ThemeBloc, ThemeState>(
builder: (context, state) {
return KeyboardDismisser(

18
node_modules/.package-lock.json generated vendored Normal file
View File

@@ -0,0 +1,18 @@
{
"name": "eatvio_app",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"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"
}
}
}
}

18
node_modules/simple-git-hooks/package.json generated vendored Normal file
View File

@@ -0,0 +1,18 @@
{
"name": "simple-git-hooks",
"version": "2.11.1",
"description": "A simple, zero dependency tool for setting up git hooks for small projects",
"author": "Mikhail Gorbunov <toplenboren@gmail.com>",
"main": "simple-git-hooks.js",
"bin": "./cli.js",
"keywords": ["pre-commit","pre-push","git","hook","lint","linter"],
"license": "MIT",
"repository": {
"type": "git",
"url": "https://github.com/toplenboren/simple-git-hooks.git"
},
"scripts": {
"postinstall": "node ./postinstall.js",
"uninstall": "node ./uninstall.js"
}
}

26
package-lock.json generated Normal file
View File

@@ -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"
}
}
}
}

22
package.json Normal file
View File

@@ -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
}
}

View File

@@ -1,7 +1,7 @@
name: eatvio_app
description: A new Flutter project.
version: 0.0.0+1
publish_to: 'none'
publish_to: "none"
environment:
sdk: ">=3.3.4 <4.0.0"
@@ -13,7 +13,7 @@ dependencies:
flutter_localizations:
sdk: flutter
# BLoC state manager
# BLoC
flutter_bloc: ^8.1.6
# local storage
shared_preferences: ^2.2.3
@@ -22,17 +22,17 @@ dependencies:
#
cached_network_image: ^3.3.1
#
flutter_svg: ^2.0.9
flutter_svg: ^2.0.10
#
equatable: ^2.0.5
#
freezed_annotation: ^2.4.1
freezed_annotation: ^2.4.2
#
json_annotation: ^4.9.0
#
validators: ^3.0.0
#
isar_flutter_libs: ^3.1.0+1
isar_flutter_libs: ^3.1.0
#
path_provider: ^2.1.3
#
@@ -50,7 +50,7 @@ dependencies:
#
flutter_typeahead: ^5.2.0
# navigation
go_router: ^14.1.4
go_router: ^14.2.0
#
keyboard_dismisser: ^3.0.0
# service generator
@@ -58,9 +58,9 @@ dependencies:
# di
get_it: ^7.7.0
# http request
dio: ^5.4.3+1
dio: ^5.5.0
# pusher
dart_pusher_channels: ^1.2.2+1
dart_pusher_channels: ^1.2.2
# photo gallery viewer + dismissible page
photo_view: ^0.15.0
dismissible_page: ^1.0.2
@@ -71,7 +71,7 @@ dev_dependencies:
build_runner: ^2.4.11
freezed: ^2.5.2
json_serializable: ^6.8.0
retrofit_generator: ^8.1.0
retrofit_generator: ^8.1.1
flutter_test:
sdk: flutter