Merge pull request 'main' (#194) from mso7nueh/eatvio_app:main into main

Reviewed-on: eatvio/eatvio_app#194
This commit is contained in:
mso7nueh
2024-12-11 10:58:29 +00:00
16 changed files with 556 additions and 90 deletions

View File

@@ -18,7 +18,7 @@ pluginManagement {
plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "8.7.2" apply false
id "com.android.application" version "8.7.3" apply false
id "org.jetbrains.kotlin.android" version "2.0.21" apply false
}

View File

@@ -87,13 +87,17 @@ class InitializationCubit extends Cubit<InitializationState> {
await subscribeNotifications(wsUrl.userId, client);
await subscribeChatMessages(wsUrl.userId, client);
emit(InitializationState.success(
client: client,
),);
emit(
InitializationState.success(
client: client,
),
);
} catch (e) {
emit(InitializationState.error(
errorMessage: e.toString(),
),);
emit(
InitializationState.error(
errorMessage: e.toString(),
),
);
rethrow;
}
}

View File

@@ -155,7 +155,7 @@ class DiaryCubit extends Cubit<DiaryState> {
await fetchDiary();
}
Future<GlossaryModerationModel> sendProductToModeration({
Future<void> sendProductToModeration({
required String name,
required double energy,
required double proteins,

View File

@@ -1,7 +1,6 @@
import 'package:eatvio_app/features/diary/presentation/bloc/diary_cubit.dart';
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/custom_text_form_field.dart';
import 'package:eatvio_app/features/glossary/models/glossary_model.dart';
import 'package:flutter/material.dart';
import 'package:lottie/lottie.dart';
@@ -28,7 +27,7 @@ class _GlossaryModerationRequestModalWidgetState extends State<GlossaryModeratio
final proteinsController = TextEditingController();
final fatsController = TextEditingController();
final carbohydratesController = TextEditingController();
GlossaryModel? glossary;
@override
Widget build(BuildContext context) {
if (glossaryState == GlossaryState.alert) {
@@ -161,7 +160,7 @@ class _GlossaryModerationRequestModalWidgetState extends State<GlossaryModeratio
const SizedBox(height: 16),
InkWell(
onTap: () {
Navigator.of(context).pop(glossary);
Navigator.of(context).pop();
},
borderRadius: BorderRadius.circular(20),
child: Ink(
@@ -264,14 +263,13 @@ class _GlossaryModerationRequestModalWidgetState extends State<GlossaryModeratio
const SizedBox(height: 12),
InkWell(
onTap: () async {
glossary = (await widget.diaryCubit.sendProductToModeration(
await widget.diaryCubit.sendProductToModeration(
name: productNameController.text,
energy: double.parse(energyController.text),
proteins: double.parse(proteinsController.text),
fats: double.parse(fatsController.text),
carbohydrates: double.parse(carbohydratesController.text),
))
.glossary;
);
setState(() {
glossaryState = GlossaryState.success;
});

View File

@@ -4,7 +4,6 @@ import 'package:eatvio_app/features/diary/models/finish_diary_day_model.dart';
import 'package:eatvio_app/features/diary/models/nutrition_model.dart';
import 'package:eatvio_app/features/diary/models/product_moderation_model.dart';
import 'package:eatvio_app/features/diary/services/diary_service.dart';
import 'package:eatvio_app/features/glossary/models/glossary_model.dart';
class DiaryRepository {
final DiaryService diaryService;
@@ -128,7 +127,7 @@ class DiaryRepository {
);
}
Future<GlossaryModerationModel> sendProductToModeration({
Future<void> sendProductToModeration({
required String name,
required double energy,
required double proteins,

View File

@@ -3,7 +3,6 @@ import 'package:dio/dio.dart';
import 'package:eatvio_app/features/diary/models/diary_day_model.dart';
import 'package:eatvio_app/features/diary/models/finish_diary_day_model.dart';
import 'package:eatvio_app/features/diary/models/nutrition_model.dart';
import 'package:eatvio_app/features/glossary/models/glossary_model.dart';
import 'package:retrofit/retrofit.dart';
part 'diary_service.g.dart';
@@ -88,7 +87,7 @@ abstract class DiaryService {
});
@POST('/api/diary/product_nutritional_values/sendToModeration')
Future<GlossaryModerationModel> sendProductToModeration({
Future<void> sendProductToModeration({
@Body() required Map<String, dynamic> data,
});
}

View File

@@ -387,14 +387,14 @@ class _DiaryService implements DiaryService {
}
@override
Future<GlossaryModerationModel> sendProductToModeration(
Future<void> sendProductToModeration(
{required Map<String, dynamic> data}) async {
final _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{};
final _headers = <String, dynamic>{};
final _data = <String, dynamic>{};
_data.addAll(data);
final _options = _setStreamType<GlossaryModerationModel>(Options(
final _options = _setStreamType<void>(Options(
method: 'POST',
headers: _headers,
extra: _extra,
@@ -410,15 +410,7 @@ class _DiaryService implements DiaryService {
_dio.options.baseUrl,
baseUrl,
)));
final _result = await _dio.fetch<Map<String, dynamic>>(_options);
late GlossaryModerationModel _value;
try {
_value = GlossaryModerationModel.fromJson(_result.data!);
} on Object catch (e, s) {
errorLogger?.logError(e, s, _options);
rethrow;
}
return _value;
await _dio.fetch<void>(_options);
}
RequestOptions _setStreamType<T>(RequestOptions requestOptions) {

View File

@@ -75,6 +75,7 @@ class _BlogPostWidgetState extends State<BlogPostWidget> {
height: 1,
color: Colors.black87,
fontWeight: FontWeight.w500,
fontSize: 16,
),
),
const SizedBox(height: 4),
@@ -83,6 +84,7 @@ class _BlogPostWidgetState extends State<BlogPostWidget> {
style: TextStyle(
height: 1,
color: Colors.black45,
fontSize: 14,
),
),
],
@@ -102,6 +104,7 @@ class _BlogPostWidgetState extends State<BlogPostWidget> {
child: Text(
state.feedBlogPostList[widget.index].title,
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w600,
color: Colors.black87,
),
@@ -117,6 +120,7 @@ class _BlogPostWidgetState extends State<BlogPostWidget> {
: state.feedBlogPostList[widget.index].description,
style: {
"*": Style(
fontSize: FontSize(16),
color: Colors.black87,
),
},

View File

@@ -43,7 +43,7 @@ class DiplomasAndCertificatesModel with _$DiplomasAndCertificatesModel {
class EducationModel with _$EducationModel {
const factory EducationModel({
@JsonKey(name: "has_medical_education") int? hasMedicalEducation,
@JsonKey(name: "completed_cources") Map<String, CompletedCoursesModel>? completedCourses,
@JsonKey(name: "completed_cources") List<CompletedCoursesModel>? completedCourses,
@JsonKey(name: "vk_link") String? vkLink,
@JsonKey(name: "insta_link") String? instaLink,
@JsonKey(name: "fb_link") String? fbLink,

View File

@@ -821,7 +821,7 @@ mixin _$EducationModel {
@JsonKey(name: "has_medical_education")
int? get hasMedicalEducation => throw _privateConstructorUsedError;
@JsonKey(name: "completed_cources")
Map<String, CompletedCoursesModel>? get completedCourses =>
List<CompletedCoursesModel>? get completedCourses =>
throw _privateConstructorUsedError;
@JsonKey(name: "vk_link")
String? get vkLink => throw _privateConstructorUsedError;
@@ -855,7 +855,7 @@ abstract class $EducationModelCopyWith<$Res> {
$Res call(
{@JsonKey(name: "has_medical_education") int? hasMedicalEducation,
@JsonKey(name: "completed_cources")
Map<String, CompletedCoursesModel>? completedCourses,
List<CompletedCoursesModel>? completedCourses,
@JsonKey(name: "vk_link") String? vkLink,
@JsonKey(name: "insta_link") String? instaLink,
@JsonKey(name: "fb_link") String? fbLink,
@@ -896,7 +896,7 @@ class _$EducationModelCopyWithImpl<$Res, $Val extends EducationModel>
completedCourses: freezed == completedCourses
? _value.completedCourses
: completedCourses // ignore: cast_nullable_to_non_nullable
as Map<String, CompletedCoursesModel>?,
as List<CompletedCoursesModel>?,
vkLink: freezed == vkLink
? _value.vkLink
: vkLink // ignore: cast_nullable_to_non_nullable
@@ -936,7 +936,7 @@ abstract class _$$EducationModelImplCopyWith<$Res>
$Res call(
{@JsonKey(name: "has_medical_education") int? hasMedicalEducation,
@JsonKey(name: "completed_cources")
Map<String, CompletedCoursesModel>? completedCourses,
List<CompletedCoursesModel>? completedCourses,
@JsonKey(name: "vk_link") String? vkLink,
@JsonKey(name: "insta_link") String? instaLink,
@JsonKey(name: "fb_link") String? fbLink,
@@ -975,7 +975,7 @@ class __$$EducationModelImplCopyWithImpl<$Res>
completedCourses: freezed == completedCourses
? _value._completedCourses
: completedCourses // ignore: cast_nullable_to_non_nullable
as Map<String, CompletedCoursesModel>?,
as List<CompletedCoursesModel>?,
vkLink: freezed == vkLink
? _value.vkLink
: vkLink // ignore: cast_nullable_to_non_nullable
@@ -1010,7 +1010,7 @@ class _$EducationModelImpl implements _EducationModel {
const _$EducationModelImpl(
{@JsonKey(name: "has_medical_education") this.hasMedicalEducation,
@JsonKey(name: "completed_cources")
final Map<String, CompletedCoursesModel>? completedCourses,
final List<CompletedCoursesModel>? completedCourses,
@JsonKey(name: "vk_link") this.vkLink,
@JsonKey(name: "insta_link") this.instaLink,
@JsonKey(name: "fb_link") this.fbLink,
@@ -1025,15 +1025,16 @@ class _$EducationModelImpl implements _EducationModel {
@override
@JsonKey(name: "has_medical_education")
final int? hasMedicalEducation;
final Map<String, CompletedCoursesModel>? _completedCourses;
final List<CompletedCoursesModel>? _completedCourses;
@override
@JsonKey(name: "completed_cources")
Map<String, CompletedCoursesModel>? get completedCourses {
List<CompletedCoursesModel>? get completedCourses {
final value = _completedCourses;
if (value == null) return null;
if (_completedCourses is EqualUnmodifiableMapView) return _completedCourses;
if (_completedCourses is EqualUnmodifiableListView)
return _completedCourses;
// ignore: implicit_dynamic_type
return EqualUnmodifiableMapView(value);
return EqualUnmodifiableListView(value);
}
@override
@@ -1114,7 +1115,7 @@ abstract class _EducationModel implements EducationModel {
const factory _EducationModel(
{@JsonKey(name: "has_medical_education") final int? hasMedicalEducation,
@JsonKey(name: "completed_cources")
final Map<String, CompletedCoursesModel>? completedCourses,
final List<CompletedCoursesModel>? completedCourses,
@JsonKey(name: "vk_link") final String? vkLink,
@JsonKey(name: "insta_link") final String? instaLink,
@JsonKey(name: "fb_link") final String? fbLink,
@@ -1131,7 +1132,7 @@ abstract class _EducationModel implements EducationModel {
int? get hasMedicalEducation;
@override
@JsonKey(name: "completed_cources")
Map<String, CompletedCoursesModel>? get completedCourses;
List<CompletedCoursesModel>? get completedCourses;
@override
@JsonKey(name: "vk_link")
String? get vkLink;

View File

@@ -83,11 +83,10 @@ Map<String, dynamic> _$$DiplomasAndCertificatesModelImplToJson(
_$EducationModelImpl _$$EducationModelImplFromJson(Map<String, dynamic> json) =>
_$EducationModelImpl(
hasMedicalEducation: (json['has_medical_education'] as num?)?.toInt(),
completedCourses:
(json['completed_cources'] as Map<String, dynamic>?)?.map(
(k, e) => MapEntry(
k, CompletedCoursesModel.fromJson(e as Map<String, dynamic>)),
),
completedCourses: (json['completed_cources'] as List<dynamic>?)
?.map(
(e) => CompletedCoursesModel.fromJson(e as Map<String, dynamic>))
.toList(),
vkLink: json['vk_link'] as String?,
instaLink: json['insta_link'] as String?,
fbLink: json['fb_link'] as String?,

View File

@@ -487,7 +487,7 @@ class _ProfileScreenState extends State<ProfileScreen> {
child: Column(
children: [
if (state.profile.educationResource?.completedCourses != null)
...state.profile.educationResource!.completedCourses!.values.map((c) => _educationBlock(c.title, c.date)).toList(),
...state.profile.educationResource!.completedCourses!.map((c) => _educationBlock(c.title, c.date)).toList(),
],
),
),

View File

@@ -16,8 +16,8 @@ dependencies:
flutter_secure_storage: ^9.2.2
flutter_bloc: ^8.1.6
cached_network_image: ^3.4.1
flutter_svg: ^2.0.14
equatable: ^2.0.5
flutter_svg: ^2.0.16
equatable: ^2.0.7
freezed_annotation: ^2.4.4
json_annotation: ^4.9.0
validators: ^3.0.0
@@ -26,7 +26,7 @@ dependencies:
flutter_form_builder: ^9.5.0
image_picker: ^1.1.2
flutter_typeahead: ^5.2.0
go_router: ^14.6.0
go_router: ^14.6.2
keyboard_dismisser: ^3.0.0
retrofit: ^4.4.1
get_it: ^8.0.2
@@ -39,8 +39,8 @@ dependencies:
badges: ^3.1.2
google_fonts: ^6.2.1
location: ^7.0.1
syncfusion_flutter_charts: ^27.2.2
syncfusion_flutter_gauges: ^27.2.2
syncfusion_flutter_charts: ^27.2.5
syncfusion_flutter_gauges: ^27.2.5
table_calendar: ^3.1.2
flutter_keyboard_visibility: ^6.0.0
share_plus: ^10.1.2
@@ -65,6 +65,7 @@ dev_dependencies:
freezed: ^2.5.7
json_serializable: ^6.9.0
retrofit_generator: ^9.1.5
mockito: ^5.4.4
flutter_test:
sdk: flutter

View File

@@ -1,37 +0,0 @@
import 'package:eatvio_app/features/auth/auth_screen/auth_screen.dart';
import 'package:eatvio_app/features/auth/auth_screen/bloc/auth_bloc.dart';
import 'package:eatvio_app/features/auth/auth_screen/models/auth_model.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('AuthScreen', () {
testWidgets('renders AuthScreen with initial state', (WidgetTester tester) async {
final authBloc = AuthBloc(AuthState(authModelObj: AuthModel()));
await tester.pumpWidget(
MaterialApp(
localizationsDelegates: const [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: S.delegate.supportedLocales,
home: BlocProvider<AuthBloc>(
create: (context) => authBloc,
child: Builder(
builder: (context) {
return AuthScreen();
},
),
),
),
);
});
});
}

View File

@@ -0,0 +1,92 @@
import 'package:eatvio_app/features/feed/models/feed_blog_post_model.dart';
import 'package:eatvio_app/features/profile/models/circumference_model.dart';
import 'package:eatvio_app/features/profile/models/profile_model.dart';
import 'package:eatvio_app/features/profile/models/weight_model.dart';
import 'package:eatvio_app/features/profile/services/profile_service.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'package:flutter_test/flutter_test.dart';
import 'profile_service_test.mocks.dart';
@GenerateNiceMocks([MockSpec<ProfileService>()])
void main() {
group('profileService', () {
final mockProfileService = MockProfileService();
test('getMyProfile', () async {
when(mockProfileService.getMyProfile()).thenAnswer(
(_) async => await Future.value(
ProfileModel(
id: 0,
name: 'Alexander Avanesyan',
email: 'mso7nueh@mail.ru',
isPublicProfile: true,
isEntitySubscribedByMe: false,
slug: 'slug',
profilePhotoUrl: '',
role: 'user',
badges: [],
subscriptions: [],
subscribers: [],
),
),
);
expect(await mockProfileService.getMyProfile(), isA<ProfileModel>());
});
test('getProfileDetailsBySlug', () async {
when(mockProfileService.getProfileDetailsBySlug(slug: 'slug')).thenAnswer(
(_) async => await Future.value(
ProfileDetailsModel(
firstName: 'Alexnader',
lastName: 'Avanesyan',
birthdate: '2024-05-28',
gender: 'male',
country: 'Russia',
city: 'Moscow',
lang: 'Russian',
weight: 84,
height: 178,
chestCircumference: 100,
waistCircumference: 80,
hipCircumference: 90,
bloodPressureUp: 120,
bloodPressureDown: 80,
hasHypo: false,
hasHyper: false,
aboutAlergy: '',
aboutTakingPils: '',
aboutSportHobbies: 'Judo',
favoriteFoods: '',
unfavoriteFoods: '',
additionalInfo: '10 lvl faceit',
isMoodFillable: true,
isBedtimeFillable: true,
activityCoefficient: 2,
),
),
);
expect(await mockProfileService.getProfileDetailsBySlug(slug: 'slug'), isA<ProfileDetailsModel>());
});
test('getBlogPostByAuthorSlug', () async {
when(mockProfileService.getBlogPostByAuthorSlug(slug: '')).thenAnswer(
(_) async => [],
);
expect(await mockProfileService.getBlogPostByAuthorSlug(slug: 'slug'), isA<List<FeedBlogPostModel>>());
});
test('getWeight', () async {
when(mockProfileService.getWeight(period: '')).thenAnswer(
(_) async => [],
);
expect(await mockProfileService.getWeight(period: ''), isA<List<WeightModel>>());
});
test('getCircumferences', () async {
when(mockProfileService.getCircumferences(period: '')).thenAnswer(
(_) async => [],
);
expect(await mockProfileService.getCircumferences(period: ''), isA<List<CircumferenceModel>>());
});
});
}

View File

@@ -0,0 +1,414 @@
// Mocks generated by Mockito 5.4.4 from annotations
// in eatvio_app/test/features/profile/services/profile_service_test.dart.
// Do not manually edit this file.
// ignore_for_file: no_leading_underscores_for_library_prefixes
import 'dart:async' as _i5;
import 'dart:io' as _i9;
import 'package:eatvio_app/features/feed/models/feed_blog_post_model.dart'
as _i6;
import 'package:eatvio_app/features/profile/models/circumference_model.dart'
as _i8;
import 'package:eatvio_app/features/profile/models/profile_model.dart' as _i2;
import 'package:eatvio_app/features/profile/models/sub_model.dart' as _i3;
import 'package:eatvio_app/features/profile/models/weight_model.dart' as _i7;
import 'package:eatvio_app/features/profile/services/profile_service.dart'
as _i4;
import 'package:mockito/mockito.dart' as _i1;
// ignore_for_file: type=lint
// ignore_for_file: avoid_redundant_argument_values
// ignore_for_file: avoid_setters_without_getters
// ignore_for_file: comment_references
// ignore_for_file: deprecated_member_use
// ignore_for_file: deprecated_member_use_from_same_package
// ignore_for_file: implementation_imports
// ignore_for_file: invalid_use_of_visible_for_testing_member
// ignore_for_file: prefer_const_constructors
// ignore_for_file: unnecessary_parenthesis
// ignore_for_file: camel_case_types
// ignore_for_file: subtype_of_sealed_class
class _FakeProfileModel_0 extends _i1.SmartFake implements _i2.ProfileModel {
_FakeProfileModel_0(
Object parent,
Invocation parentInvocation,
) : super(
parent,
parentInvocation,
);
}
class _FakeProfileDetailsModel_1 extends _i1.SmartFake
implements _i2.ProfileDetailsModel {
_FakeProfileDetailsModel_1(
Object parent,
Invocation parentInvocation,
) : super(
parent,
parentInvocation,
);
}
class _FakeSubPaginationModel_2 extends _i1.SmartFake
implements _i3.SubPaginationModel {
_FakeSubPaginationModel_2(
Object parent,
Invocation parentInvocation,
) : super(
parent,
parentInvocation,
);
}
/// A class which mocks [ProfileService].
///
/// See the documentation for Mockito's code generation for more information.
class MockProfileService extends _i1.Mock implements _i4.ProfileService {
@override
_i5.Future<_i2.ProfileModel> getProfileBySlug({required String? slug}) =>
(super.noSuchMethod(
Invocation.method(
#getProfileBySlug,
[],
{#slug: slug},
),
returnValue: _i5.Future<_i2.ProfileModel>.value(_FakeProfileModel_0(
this,
Invocation.method(
#getProfileBySlug,
[],
{#slug: slug},
),
)),
returnValueForMissingStub:
_i5.Future<_i2.ProfileModel>.value(_FakeProfileModel_0(
this,
Invocation.method(
#getProfileBySlug,
[],
{#slug: slug},
),
)),
) as _i5.Future<_i2.ProfileModel>);
@override
_i5.Future<_i2.ProfileModel> getMyProfile() => (super.noSuchMethod(
Invocation.method(
#getMyProfile,
[],
),
returnValue: _i5.Future<_i2.ProfileModel>.value(_FakeProfileModel_0(
this,
Invocation.method(
#getMyProfile,
[],
),
)),
returnValueForMissingStub:
_i5.Future<_i2.ProfileModel>.value(_FakeProfileModel_0(
this,
Invocation.method(
#getMyProfile,
[],
),
)),
) as _i5.Future<_i2.ProfileModel>);
@override
_i5.Future<_i2.ProfileDetailsModel> getMyProfileDetails() =>
(super.noSuchMethod(
Invocation.method(
#getMyProfileDetails,
[],
),
returnValue: _i5.Future<_i2.ProfileDetailsModel>.value(
_FakeProfileDetailsModel_1(
this,
Invocation.method(
#getMyProfileDetails,
[],
),
)),
returnValueForMissingStub: _i5.Future<_i2.ProfileDetailsModel>.value(
_FakeProfileDetailsModel_1(
this,
Invocation.method(
#getMyProfileDetails,
[],
),
)),
) as _i5.Future<_i2.ProfileDetailsModel>);
@override
_i5.Future<_i2.ProfileDetailsModel> getProfileDetailsBySlug(
{required String? slug}) =>
(super.noSuchMethod(
Invocation.method(
#getProfileDetailsBySlug,
[],
{#slug: slug},
),
returnValue: _i5.Future<_i2.ProfileDetailsModel>.value(
_FakeProfileDetailsModel_1(
this,
Invocation.method(
#getProfileDetailsBySlug,
[],
{#slug: slug},
),
)),
returnValueForMissingStub: _i5.Future<_i2.ProfileDetailsModel>.value(
_FakeProfileDetailsModel_1(
this,
Invocation.method(
#getProfileDetailsBySlug,
[],
{#slug: slug},
),
)),
) as _i5.Future<_i2.ProfileDetailsModel>);
@override
_i5.Future<void> addCircumference({
required int? chestCircumference,
required int? waistCircumference,
required int? hipCircumference,
}) =>
(super.noSuchMethod(
Invocation.method(
#addCircumference,
[],
{
#chestCircumference: chestCircumference,
#waistCircumference: waistCircumference,
#hipCircumference: hipCircumference,
},
),
returnValue: _i5.Future<void>.value(),
returnValueForMissingStub: _i5.Future<void>.value(),
) as _i5.Future<void>);
@override
_i5.Future<void> addWeight({required double? weight}) => (super.noSuchMethod(
Invocation.method(
#addWeight,
[],
{#weight: weight},
),
returnValue: _i5.Future<void>.value(),
returnValueForMissingStub: _i5.Future<void>.value(),
) as _i5.Future<void>);
@override
_i5.Future<List<_i6.FeedBlogPostModel>> getBlogPostByAuthorSlug(
{required String? slug}) =>
(super.noSuchMethod(
Invocation.method(
#getBlogPostByAuthorSlug,
[],
{#slug: slug},
),
returnValue: _i5.Future<List<_i6.FeedBlogPostModel>>.value(
<_i6.FeedBlogPostModel>[]),
returnValueForMissingStub:
_i5.Future<List<_i6.FeedBlogPostModel>>.value(
<_i6.FeedBlogPostModel>[]),
) as _i5.Future<List<_i6.FeedBlogPostModel>>);
@override
_i5.Future<List<_i7.WeightModel>> getWeight({required String? period}) =>
(super.noSuchMethod(
Invocation.method(
#getWeight,
[],
{#period: period},
),
returnValue:
_i5.Future<List<_i7.WeightModel>>.value(<_i7.WeightModel>[]),
returnValueForMissingStub:
_i5.Future<List<_i7.WeightModel>>.value(<_i7.WeightModel>[]),
) as _i5.Future<List<_i7.WeightModel>>);
@override
_i5.Future<List<_i7.WeightModel>> getWeightBySlug({
required String? period,
required String? slug,
}) =>
(super.noSuchMethod(
Invocation.method(
#getWeightBySlug,
[],
{
#period: period,
#slug: slug,
},
),
returnValue:
_i5.Future<List<_i7.WeightModel>>.value(<_i7.WeightModel>[]),
returnValueForMissingStub:
_i5.Future<List<_i7.WeightModel>>.value(<_i7.WeightModel>[]),
) as _i5.Future<List<_i7.WeightModel>>);
@override
_i5.Future<List<_i8.CircumferenceModel>> getCircumferences(
{required String? period}) =>
(super.noSuchMethod(
Invocation.method(
#getCircumferences,
[],
{#period: period},
),
returnValue: _i5.Future<List<_i8.CircumferenceModel>>.value(
<_i8.CircumferenceModel>[]),
returnValueForMissingStub:
_i5.Future<List<_i8.CircumferenceModel>>.value(
<_i8.CircumferenceModel>[]),
) as _i5.Future<List<_i8.CircumferenceModel>>);
@override
_i5.Future<List<_i8.CircumferenceModel>> getCircumferencesBySlug({
required String? period,
required String? slug,
}) =>
(super.noSuchMethod(
Invocation.method(
#getCircumferencesBySlug,
[],
{
#period: period,
#slug: slug,
},
),
returnValue: _i5.Future<List<_i8.CircumferenceModel>>.value(
<_i8.CircumferenceModel>[]),
returnValueForMissingStub:
_i5.Future<List<_i8.CircumferenceModel>>.value(
<_i8.CircumferenceModel>[]),
) as _i5.Future<List<_i8.CircumferenceModel>>);
@override
_i5.Future<_i3.SubPaginationModel> getSubscribers({
required String? slug,
String? query,
}) =>
(super.noSuchMethod(
Invocation.method(
#getSubscribers,
[],
{
#slug: slug,
#query: query,
},
),
returnValue:
_i5.Future<_i3.SubPaginationModel>.value(_FakeSubPaginationModel_2(
this,
Invocation.method(
#getSubscribers,
[],
{
#slug: slug,
#query: query,
},
),
)),
returnValueForMissingStub:
_i5.Future<_i3.SubPaginationModel>.value(_FakeSubPaginationModel_2(
this,
Invocation.method(
#getSubscribers,
[],
{
#slug: slug,
#query: query,
},
),
)),
) as _i5.Future<_i3.SubPaginationModel>);
@override
_i5.Future<_i3.SubPaginationModel> getSubscriptions({
required String? slug,
String? query,
}) =>
(super.noSuchMethod(
Invocation.method(
#getSubscriptions,
[],
{
#slug: slug,
#query: query,
},
),
returnValue:
_i5.Future<_i3.SubPaginationModel>.value(_FakeSubPaginationModel_2(
this,
Invocation.method(
#getSubscriptions,
[],
{
#slug: slug,
#query: query,
},
),
)),
returnValueForMissingStub:
_i5.Future<_i3.SubPaginationModel>.value(_FakeSubPaginationModel_2(
this,
Invocation.method(
#getSubscriptions,
[],
{
#slug: slug,
#query: query,
},
),
)),
) as _i5.Future<_i3.SubPaginationModel>);
@override
_i5.Future<void> subscribe({required String? slug}) => (super.noSuchMethod(
Invocation.method(
#subscribe,
[],
{#slug: slug},
),
returnValue: _i5.Future<void>.value(),
returnValueForMissingStub: _i5.Future<void>.value(),
) as _i5.Future<void>);
@override
_i5.Future<void> unsubscribe({required String? slug}) => (super.noSuchMethod(
Invocation.method(
#unsubscribe,
[],
{#slug: slug},
),
returnValue: _i5.Future<void>.value(),
returnValueForMissingStub: _i5.Future<void>.value(),
) as _i5.Future<void>);
@override
_i5.Future<void> uploadPhoto({required _i9.File? photo}) =>
(super.noSuchMethod(
Invocation.method(
#uploadPhoto,
[],
{#photo: photo},
),
returnValue: _i5.Future<void>.value(),
returnValueForMissingStub: _i5.Future<void>.value(),
) as _i5.Future<void>);
@override
_i5.Future<void> deletePhoto() => (super.noSuchMethod(
Invocation.method(
#deletePhoto,
[],
),
returnValue: _i5.Future<void>.value(),
returnValueForMissingStub: _i5.Future<void>.value(),
) as _i5.Future<void>);
}