diff --git a/lib/features/diary/presentation/bloc/diary_cubit.dart b/lib/features/diary/presentation/bloc/diary_cubit.dart index 07477bd0..26092c1c 100644 --- a/lib/features/diary/presentation/bloc/diary_cubit.dart +++ b/lib/features/diary/presentation/bloc/diary_cubit.dart @@ -1,22 +1,20 @@ -/*import 'package:eatvio_app/core/app_export.dart'; +import 'package:eatvio_app/core/app_export.dart'; import 'package:eatvio_app/features/diary/presentation/bloc/diary_state.dart'; import 'package:eatvio_app/features/diary/repositories/diary_repository.dart'; class DiaryCubit extends Cubit { - final DiaryRepository blogPostRepository; + final DiaryRepository diaryRepository; - DiaryCubit({required this.blogPostRepository}) - : super(const DiaryState.loading()); + DiaryCubit({required this.diaryRepository}) : super(const DiaryState.loading()); - loadDiary(String blogPostID) async { + loadDiary(String diaryID) async { emit(const DiaryState.loading()); try { - final blogPost = await blogPostRepository.getDiary(blogPostID); - emit(DiaryState.loaded(blogPost: blogPost)); + final diary = await diaryRepository.getDiary(await diaryRepository.getDiaryID().toString()); + emit(DiaryState.loaded(diary: diary)); } catch (e) { emit(DiaryState.error(errorMessage: e.toString())); print(e); } } } -*/ \ No newline at end of file diff --git a/lib/features/diary/presentation/bloc/diary_state.dart b/lib/features/diary/presentation/bloc/diary_state.dart index d4305c8d..c673faf5 100644 --- a/lib/features/diary/presentation/bloc/diary_state.dart +++ b/lib/features/diary/presentation/bloc/diary_state.dart @@ -1,4 +1,4 @@ -/*import 'package:eatvio_app/features/diary/models/diary_model.dart'; +import 'package:eatvio_app/features/diary/models/diary_model.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; part 'diary_state.freezed.dart'; @@ -10,11 +10,10 @@ abstract class DiaryState with _$DiaryState { const factory DiaryState.loading() = DiaryStateLoading; const factory DiaryState.loaded({ - required DiaryModel blogPost, + required DiaryModel diary, }) = DiaryStateLoaded; const factory DiaryState.error({ required String errorMessage, }) = DiaryStateError; } -*/ \ No newline at end of file diff --git a/lib/features/diary/presentation/bloc/diary_state.freezed.dart b/lib/features/diary/presentation/bloc/diary_state.freezed.dart new file mode 100644 index 00000000..04256bad --- /dev/null +++ b/lib/features/diary/presentation/bloc/diary_state.freezed.dart @@ -0,0 +1,620 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// 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 'diary_state.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +T _$identity(T value) => value; + +final _privateConstructorUsedError = UnsupportedError( + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + +/// @nodoc +mixin _$DiaryState { + @optionalTypeArgs + TResult when( + TResult Function() $default, { + required TResult Function() loading, + required TResult Function(DiaryModel diary) loaded, + required TResult Function(String errorMessage) error, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult? whenOrNull( + TResult? Function()? $default, { + TResult? Function()? loading, + TResult? Function(DiaryModel diary)? loaded, + TResult? Function(String errorMessage)? error, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult maybeWhen( + TResult Function()? $default, { + TResult Function()? loading, + TResult Function(DiaryModel diary)? loaded, + TResult Function(String errorMessage)? error, + required TResult orElse(), + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult map( + TResult Function(_DiaryState value) $default, { + required TResult Function(DiaryStateLoading value) loading, + required TResult Function(DiaryStateLoaded value) loaded, + required TResult Function(DiaryStateError value) error, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult? mapOrNull( + TResult? Function(_DiaryState value)? $default, { + TResult? Function(DiaryStateLoading value)? loading, + TResult? Function(DiaryStateLoaded value)? loaded, + TResult? Function(DiaryStateError value)? error, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult maybeMap( + TResult Function(_DiaryState value)? $default, { + TResult Function(DiaryStateLoading value)? loading, + TResult Function(DiaryStateLoaded value)? loaded, + TResult Function(DiaryStateError value)? error, + required TResult orElse(), + }) => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $DiaryStateCopyWith<$Res> { + factory $DiaryStateCopyWith( + DiaryState value, $Res Function(DiaryState) then) = + _$DiaryStateCopyWithImpl<$Res, DiaryState>; +} + +/// @nodoc +class _$DiaryStateCopyWithImpl<$Res, $Val extends DiaryState> + implements $DiaryStateCopyWith<$Res> { + _$DiaryStateCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; +} + +/// @nodoc +abstract class _$$DiaryStateImplCopyWith<$Res> { + factory _$$DiaryStateImplCopyWith( + _$DiaryStateImpl value, $Res Function(_$DiaryStateImpl) then) = + __$$DiaryStateImplCopyWithImpl<$Res>; +} + +/// @nodoc +class __$$DiaryStateImplCopyWithImpl<$Res> + extends _$DiaryStateCopyWithImpl<$Res, _$DiaryStateImpl> + implements _$$DiaryStateImplCopyWith<$Res> { + __$$DiaryStateImplCopyWithImpl( + _$DiaryStateImpl _value, $Res Function(_$DiaryStateImpl) _then) + : super(_value, _then); +} + +/// @nodoc + +class _$DiaryStateImpl implements _DiaryState { + const _$DiaryStateImpl(); + + @override + String toString() { + return 'DiaryState()'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && other is _$DiaryStateImpl); + } + + @override + int get hashCode => runtimeType.hashCode; + + @override + @optionalTypeArgs + TResult when( + TResult Function() $default, { + required TResult Function() loading, + required TResult Function(DiaryModel diary) loaded, + required TResult Function(String errorMessage) error, + }) { + return $default(); + } + + @override + @optionalTypeArgs + TResult? whenOrNull( + TResult? Function()? $default, { + TResult? Function()? loading, + TResult? Function(DiaryModel diary)? loaded, + TResult? Function(String errorMessage)? error, + }) { + return $default?.call(); + } + + @override + @optionalTypeArgs + TResult maybeWhen( + TResult Function()? $default, { + TResult Function()? loading, + TResult Function(DiaryModel diary)? loaded, + TResult Function(String errorMessage)? error, + required TResult orElse(), + }) { + if ($default != null) { + return $default(); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map( + TResult Function(_DiaryState value) $default, { + required TResult Function(DiaryStateLoading value) loading, + required TResult Function(DiaryStateLoaded value) loaded, + required TResult Function(DiaryStateError value) error, + }) { + return $default(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull( + TResult? Function(_DiaryState value)? $default, { + TResult? Function(DiaryStateLoading value)? loading, + TResult? Function(DiaryStateLoaded value)? loaded, + TResult? Function(DiaryStateError value)? error, + }) { + return $default?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap( + TResult Function(_DiaryState value)? $default, { + TResult Function(DiaryStateLoading value)? loading, + TResult Function(DiaryStateLoaded value)? loaded, + TResult Function(DiaryStateError value)? error, + required TResult orElse(), + }) { + if ($default != null) { + return $default(this); + } + return orElse(); + } +} + +abstract class _DiaryState implements DiaryState { + const factory _DiaryState() = _$DiaryStateImpl; +} + +/// @nodoc +abstract class _$$DiaryStateLoadingImplCopyWith<$Res> { + factory _$$DiaryStateLoadingImplCopyWith(_$DiaryStateLoadingImpl value, + $Res Function(_$DiaryStateLoadingImpl) then) = + __$$DiaryStateLoadingImplCopyWithImpl<$Res>; +} + +/// @nodoc +class __$$DiaryStateLoadingImplCopyWithImpl<$Res> + extends _$DiaryStateCopyWithImpl<$Res, _$DiaryStateLoadingImpl> + implements _$$DiaryStateLoadingImplCopyWith<$Res> { + __$$DiaryStateLoadingImplCopyWithImpl(_$DiaryStateLoadingImpl _value, + $Res Function(_$DiaryStateLoadingImpl) _then) + : super(_value, _then); +} + +/// @nodoc + +class _$DiaryStateLoadingImpl implements DiaryStateLoading { + const _$DiaryStateLoadingImpl(); + + @override + String toString() { + return 'DiaryState.loading()'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && other is _$DiaryStateLoadingImpl); + } + + @override + int get hashCode => runtimeType.hashCode; + + @override + @optionalTypeArgs + TResult when( + TResult Function() $default, { + required TResult Function() loading, + required TResult Function(DiaryModel diary) loaded, + required TResult Function(String errorMessage) error, + }) { + return loading(); + } + + @override + @optionalTypeArgs + TResult? whenOrNull( + TResult? Function()? $default, { + TResult? Function()? loading, + TResult? Function(DiaryModel diary)? loaded, + TResult? Function(String errorMessage)? error, + }) { + return loading?.call(); + } + + @override + @optionalTypeArgs + TResult maybeWhen( + TResult Function()? $default, { + TResult Function()? loading, + TResult Function(DiaryModel diary)? loaded, + TResult Function(String errorMessage)? error, + required TResult orElse(), + }) { + if (loading != null) { + return loading(); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map( + TResult Function(_DiaryState value) $default, { + required TResult Function(DiaryStateLoading value) loading, + required TResult Function(DiaryStateLoaded value) loaded, + required TResult Function(DiaryStateError value) error, + }) { + return loading(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull( + TResult? Function(_DiaryState value)? $default, { + TResult? Function(DiaryStateLoading value)? loading, + TResult? Function(DiaryStateLoaded value)? loaded, + TResult? Function(DiaryStateError value)? error, + }) { + return loading?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap( + TResult Function(_DiaryState value)? $default, { + TResult Function(DiaryStateLoading value)? loading, + TResult Function(DiaryStateLoaded value)? loaded, + TResult Function(DiaryStateError value)? error, + required TResult orElse(), + }) { + if (loading != null) { + return loading(this); + } + return orElse(); + } +} + +abstract class DiaryStateLoading implements DiaryState { + const factory DiaryStateLoading() = _$DiaryStateLoadingImpl; +} + +/// @nodoc +abstract class _$$DiaryStateLoadedImplCopyWith<$Res> { + factory _$$DiaryStateLoadedImplCopyWith(_$DiaryStateLoadedImpl value, + $Res Function(_$DiaryStateLoadedImpl) then) = + __$$DiaryStateLoadedImplCopyWithImpl<$Res>; + @useResult + $Res call({DiaryModel diary}); + + $DiaryModelCopyWith<$Res> get diary; +} + +/// @nodoc +class __$$DiaryStateLoadedImplCopyWithImpl<$Res> + extends _$DiaryStateCopyWithImpl<$Res, _$DiaryStateLoadedImpl> + implements _$$DiaryStateLoadedImplCopyWith<$Res> { + __$$DiaryStateLoadedImplCopyWithImpl(_$DiaryStateLoadedImpl _value, + $Res Function(_$DiaryStateLoadedImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? diary = null, + }) { + return _then(_$DiaryStateLoadedImpl( + diary: null == diary + ? _value.diary + : diary // ignore: cast_nullable_to_non_nullable + as DiaryModel, + )); + } + + @override + @pragma('vm:prefer-inline') + $DiaryModelCopyWith<$Res> get diary { + return $DiaryModelCopyWith<$Res>(_value.diary, (value) { + return _then(_value.copyWith(diary: value)); + }); + } +} + +/// @nodoc + +class _$DiaryStateLoadedImpl implements DiaryStateLoaded { + const _$DiaryStateLoadedImpl({required this.diary}); + + @override + final DiaryModel diary; + + @override + String toString() { + return 'DiaryState.loaded(diary: $diary)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$DiaryStateLoadedImpl && + (identical(other.diary, diary) || other.diary == diary)); + } + + @override + int get hashCode => Object.hash(runtimeType, diary); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$DiaryStateLoadedImplCopyWith<_$DiaryStateLoadedImpl> get copyWith => + __$$DiaryStateLoadedImplCopyWithImpl<_$DiaryStateLoadedImpl>( + this, _$identity); + + @override + @optionalTypeArgs + TResult when( + TResult Function() $default, { + required TResult Function() loading, + required TResult Function(DiaryModel diary) loaded, + required TResult Function(String errorMessage) error, + }) { + return loaded(diary); + } + + @override + @optionalTypeArgs + TResult? whenOrNull( + TResult? Function()? $default, { + TResult? Function()? loading, + TResult? Function(DiaryModel diary)? loaded, + TResult? Function(String errorMessage)? error, + }) { + return loaded?.call(diary); + } + + @override + @optionalTypeArgs + TResult maybeWhen( + TResult Function()? $default, { + TResult Function()? loading, + TResult Function(DiaryModel diary)? loaded, + TResult Function(String errorMessage)? error, + required TResult orElse(), + }) { + if (loaded != null) { + return loaded(diary); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map( + TResult Function(_DiaryState value) $default, { + required TResult Function(DiaryStateLoading value) loading, + required TResult Function(DiaryStateLoaded value) loaded, + required TResult Function(DiaryStateError value) error, + }) { + return loaded(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull( + TResult? Function(_DiaryState value)? $default, { + TResult? Function(DiaryStateLoading value)? loading, + TResult? Function(DiaryStateLoaded value)? loaded, + TResult? Function(DiaryStateError value)? error, + }) { + return loaded?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap( + TResult Function(_DiaryState value)? $default, { + TResult Function(DiaryStateLoading value)? loading, + TResult Function(DiaryStateLoaded value)? loaded, + TResult Function(DiaryStateError value)? error, + required TResult orElse(), + }) { + if (loaded != null) { + return loaded(this); + } + return orElse(); + } +} + +abstract class DiaryStateLoaded implements DiaryState { + const factory DiaryStateLoaded({required final DiaryModel diary}) = + _$DiaryStateLoadedImpl; + + DiaryModel get diary; + @JsonKey(ignore: true) + _$$DiaryStateLoadedImplCopyWith<_$DiaryStateLoadedImpl> get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class _$$DiaryStateErrorImplCopyWith<$Res> { + factory _$$DiaryStateErrorImplCopyWith(_$DiaryStateErrorImpl value, + $Res Function(_$DiaryStateErrorImpl) then) = + __$$DiaryStateErrorImplCopyWithImpl<$Res>; + @useResult + $Res call({String errorMessage}); +} + +/// @nodoc +class __$$DiaryStateErrorImplCopyWithImpl<$Res> + extends _$DiaryStateCopyWithImpl<$Res, _$DiaryStateErrorImpl> + implements _$$DiaryStateErrorImplCopyWith<$Res> { + __$$DiaryStateErrorImplCopyWithImpl( + _$DiaryStateErrorImpl _value, $Res Function(_$DiaryStateErrorImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? errorMessage = null, + }) { + return _then(_$DiaryStateErrorImpl( + errorMessage: null == errorMessage + ? _value.errorMessage + : errorMessage // ignore: cast_nullable_to_non_nullable + as String, + )); + } +} + +/// @nodoc + +class _$DiaryStateErrorImpl implements DiaryStateError { + const _$DiaryStateErrorImpl({required this.errorMessage}); + + @override + final String errorMessage; + + @override + String toString() { + return 'DiaryState.error(errorMessage: $errorMessage)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$DiaryStateErrorImpl && + (identical(other.errorMessage, errorMessage) || + other.errorMessage == errorMessage)); + } + + @override + int get hashCode => Object.hash(runtimeType, errorMessage); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$DiaryStateErrorImplCopyWith<_$DiaryStateErrorImpl> get copyWith => + __$$DiaryStateErrorImplCopyWithImpl<_$DiaryStateErrorImpl>( + this, _$identity); + + @override + @optionalTypeArgs + TResult when( + TResult Function() $default, { + required TResult Function() loading, + required TResult Function(DiaryModel diary) loaded, + required TResult Function(String errorMessage) error, + }) { + return error(errorMessage); + } + + @override + @optionalTypeArgs + TResult? whenOrNull( + TResult? Function()? $default, { + TResult? Function()? loading, + TResult? Function(DiaryModel diary)? loaded, + TResult? Function(String errorMessage)? error, + }) { + return error?.call(errorMessage); + } + + @override + @optionalTypeArgs + TResult maybeWhen( + TResult Function()? $default, { + TResult Function()? loading, + TResult Function(DiaryModel diary)? loaded, + TResult Function(String errorMessage)? error, + required TResult orElse(), + }) { + if (error != null) { + return error(errorMessage); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map( + TResult Function(_DiaryState value) $default, { + required TResult Function(DiaryStateLoading value) loading, + required TResult Function(DiaryStateLoaded value) loaded, + required TResult Function(DiaryStateError value) error, + }) { + return error(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull( + TResult? Function(_DiaryState value)? $default, { + TResult? Function(DiaryStateLoading value)? loading, + TResult? Function(DiaryStateLoaded value)? loaded, + TResult? Function(DiaryStateError value)? error, + }) { + return error?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap( + TResult Function(_DiaryState value)? $default, { + TResult Function(DiaryStateLoading value)? loading, + TResult Function(DiaryStateLoaded value)? loaded, + TResult Function(DiaryStateError value)? error, + required TResult orElse(), + }) { + if (error != null) { + return error(this); + } + return orElse(); + } +} + +abstract class DiaryStateError implements DiaryState { + const factory DiaryStateError({required final String errorMessage}) = + _$DiaryStateErrorImpl; + + String get errorMessage; + @JsonKey(ignore: true) + _$$DiaryStateErrorImplCopyWith<_$DiaryStateErrorImpl> get copyWith => + throw _privateConstructorUsedError; +} diff --git a/lib/features/diary/repositories/diary_repository.dart b/lib/features/diary/repositories/diary_repository.dart index 1ae40d88..c6b1dc4e 100644 --- a/lib/features/diary/repositories/diary_repository.dart +++ b/lib/features/diary/repositories/diary_repository.dart @@ -1,17 +1,24 @@ -/*import 'package:eatvio_app/features/diary/models/diary_model.dart'; +import 'package:eatvio_app/features/diary/models/diary_model.dart'; import 'package:eatvio_app/features/diary/services/diary_service.dart'; class DiaryRepository { - final DiaryService blogPostService; + final DiaryService diaryService; - DiaryRepository({required this.blogPostService}); + DiaryRepository({required this.diaryService}); - Future getDiary(String blogPostID) async { + Future getDiaryID() async { try { - return await blogPostService.getDiary(blogPostID); + return await diaryService.getDiaryID(); + } catch (e) { + rethrow; + } + } + + Future getDiary(String diaryID) async { + try { + return await diaryService.getDiary(diaryID); } catch (e) { rethrow; } } } -*/ \ No newline at end of file diff --git a/lib/features/diary/services/diary_service.dart b/lib/features/diary/services/diary_service.dart index 6b6cb6bb..bf56e853 100644 --- a/lib/features/diary/services/diary_service.dart +++ b/lib/features/diary/services/diary_service.dart @@ -1,4 +1,4 @@ -/*import 'package:dio/dio.dart'; +import 'package:dio/dio.dart'; import 'package:eatvio_app/features/diary/models/diary_model.dart'; import 'package:retrofit/retrofit.dart'; @@ -8,7 +8,9 @@ part 'diary_service.g.dart'; abstract class DiaryService { factory DiaryService(Dio dio, {String baseUrl}) = _DiaryService; - @GET('/feed/show/{id}') + @GET('/diary/index') + Future getDiaryID(); + + @GET('/feed/{id}/show/') Future getDiary(@Path() String id); } -*/ \ No newline at end of file diff --git a/lib/features/diary/services/diary_service.g.dart b/lib/features/diary/services/diary_service.g.dart new file mode 100644 index 00000000..09ce900d --- /dev/null +++ b/lib/features/diary/services/diary_service.g.dart @@ -0,0 +1,103 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'diary_service.dart'; + +// ************************************************************************** +// RetrofitGenerator +// ************************************************************************** + +// ignore_for_file: unnecessary_brace_in_string_interps,no_leading_underscores_for_local_identifiers,unused_element + +class _DiaryService implements DiaryService { + _DiaryService( + this._dio, { + this.baseUrl, + }); + + final Dio _dio; + + String? baseUrl; + + @override + Future getDiaryID() async { + final _extra = {}; + final queryParameters = {}; + final _headers = {}; + const Map? _data = null; + final _result = await _dio.fetch(_setStreamType(Options( + method: 'GET', + headers: _headers, + extra: _extra, + ) + .compose( + _dio.options, + '/diary/index', + queryParameters: queryParameters, + data: _data, + ) + .copyWith( + baseUrl: _combineBaseUrls( + _dio.options.baseUrl, + baseUrl, + )))); + final _value = _result.data!; + return _value; + } + + @override + Future getDiary(String id) async { + final _extra = {}; + final queryParameters = {}; + final _headers = {}; + const Map? _data = null; + final _result = await _dio + .fetch>(_setStreamType(Options( + method: 'GET', + headers: _headers, + extra: _extra, + ) + .compose( + _dio.options, + '/feed/${id}/show/', + queryParameters: queryParameters, + data: _data, + ) + .copyWith( + baseUrl: _combineBaseUrls( + _dio.options.baseUrl, + baseUrl, + )))); + final _value = DiaryModel.fromJson(_result.data!); + return _value; + } + + RequestOptions _setStreamType(RequestOptions requestOptions) { + if (T != dynamic && + !(requestOptions.responseType == ResponseType.bytes || + requestOptions.responseType == ResponseType.stream)) { + if (T == String) { + requestOptions.responseType = ResponseType.plain; + } else { + requestOptions.responseType = ResponseType.json; + } + } + return requestOptions; + } + + String _combineBaseUrls( + String dioBaseUrl, + String? baseUrl, + ) { + if (baseUrl == null || baseUrl.trim().isEmpty) { + return dioBaseUrl; + } + + final url = Uri.parse(baseUrl); + + if (url.isAbsolute) { + return url.toString(); + } + + return Uri.parse(dioBaseUrl).resolveUri(url).toString(); + } +}