added approved api

This commit is contained in:
llsajjad
2025-08-19 22:22:17 +03:30
parent 343855a3ca
commit 4b0dc4cedf
15 changed files with 841 additions and 64 deletions
+1 -1
View File
@@ -41,7 +41,7 @@ List<SingleChildWidget> get apiClients {
create: (context) => TenderDetailService(networkManager: context.read()),
),
Provider(create: (context) => YourTendersService()),
Provider(create: (context) => YourTendersService(networkManager: context.read())),
Provider(
create: (context) => TendersService(networkManager: context.read()),
),
@@ -1,15 +1,12 @@
import 'package:tm_app/core/utils/result.dart';
import 'package:tm_app/data/services/model/your_tender_model_request/your_tenders_request_model.dart';
import 'package:tm_app/data/services/model/your_tender_model_response/your_tender_model_response.dart';
import 'package:tm_app/data/services/model/tender_approvals_response/tender_approvals_response.dart';
import 'package:tm_app/data/services/your_tenders_service.dart';
class YourTendersRepository {
final YourTendersService yourTendersService;
YourTendersRepository({required this.yourTendersService});
Future<Result<YourTendersResponseModel>> getYourTenders({
required YourTendersRequestModel request,
}) {
return yourTendersService.getYourTenders(request: request);
Future<Result<TenderApprovalsResponse>> getApprovedTenders() {
return yourTendersService.getApprovedTenders();
}
}
@@ -0,0 +1,24 @@
// ignore_for_file: invalid_annotation_target
import 'package:freezed_annotation/freezed_annotation.dart';
import '../tender_data/tender_data.dart';
part 'tender_approvals_data.freezed.dart';
part 'tender_approvals_data.g.dart';
@freezed
abstract class TenderApprovalsData with _$TenderApprovalsData {
const factory TenderApprovalsData({
required String? id,
required String status,
@JsonKey(name: 'tender_id') required String? tenderId,
@JsonKey(name: 'company_id') required String? companyId,
@JsonKey(name: 'submission_mode') required String? submissionMode,
@JsonKey(name: 'created_at') required int? createdAt,
required TenderData? tender,
}) = _TenderApprovalsData;
factory TenderApprovalsData.fromJson(Map<String, Object?> json) =>
_$TenderApprovalsDataFromJson(json);
}
@@ -0,0 +1,319 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
// coverage:ignore-file
// 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 'tender_approvals_data.dart';
// **************************************************************************
// FreezedGenerator
// **************************************************************************
// dart format off
T _$identity<T>(T value) => value;
/// @nodoc
mixin _$TenderApprovalsData {
String? get id; String get status;@JsonKey(name: 'tender_id') String? get tenderId;@JsonKey(name: 'company_id') String? get companyId;@JsonKey(name: 'submission_mode') String? get submissionMode;@JsonKey(name: 'created_at') int? get createdAt; TenderData? get tender;
/// Create a copy of TenderApprovalsData
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@pragma('vm:prefer-inline')
$TenderApprovalsDataCopyWith<TenderApprovalsData> get copyWith => _$TenderApprovalsDataCopyWithImpl<TenderApprovalsData>(this as TenderApprovalsData, _$identity);
/// Serializes this TenderApprovalsData to a JSON map.
Map<String, dynamic> toJson();
@override
bool operator ==(Object other) {
return identical(this, other) || (other.runtimeType == runtimeType&&other is TenderApprovalsData&&(identical(other.id, id) || other.id == id)&&(identical(other.status, status) || other.status == status)&&(identical(other.tenderId, tenderId) || other.tenderId == tenderId)&&(identical(other.companyId, companyId) || other.companyId == companyId)&&(identical(other.submissionMode, submissionMode) || other.submissionMode == submissionMode)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.tender, tender) || other.tender == tender));
}
@JsonKey(includeFromJson: false, includeToJson: false)
@override
int get hashCode => Object.hash(runtimeType,id,status,tenderId,companyId,submissionMode,createdAt,tender);
@override
String toString() {
return 'TenderApprovalsData(id: $id, status: $status, tenderId: $tenderId, companyId: $companyId, submissionMode: $submissionMode, createdAt: $createdAt, tender: $tender)';
}
}
/// @nodoc
abstract mixin class $TenderApprovalsDataCopyWith<$Res> {
factory $TenderApprovalsDataCopyWith(TenderApprovalsData value, $Res Function(TenderApprovalsData) _then) = _$TenderApprovalsDataCopyWithImpl;
@useResult
$Res call({
String? id, String status,@JsonKey(name: 'tender_id') String? tenderId,@JsonKey(name: 'company_id') String? companyId,@JsonKey(name: 'submission_mode') String? submissionMode,@JsonKey(name: 'created_at') int? createdAt, TenderData? tender
});
$TenderDataCopyWith<$Res>? get tender;
}
/// @nodoc
class _$TenderApprovalsDataCopyWithImpl<$Res>
implements $TenderApprovalsDataCopyWith<$Res> {
_$TenderApprovalsDataCopyWithImpl(this._self, this._then);
final TenderApprovalsData _self;
final $Res Function(TenderApprovalsData) _then;
/// Create a copy of TenderApprovalsData
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline') @override $Res call({Object? id = freezed,Object? status = null,Object? tenderId = freezed,Object? companyId = freezed,Object? submissionMode = freezed,Object? createdAt = freezed,Object? tender = freezed,}) {
return _then(_self.copyWith(
id: freezed == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
as String?,status: null == status ? _self.status : status // ignore: cast_nullable_to_non_nullable
as String,tenderId: freezed == tenderId ? _self.tenderId : tenderId // ignore: cast_nullable_to_non_nullable
as String?,companyId: freezed == companyId ? _self.companyId : companyId // ignore: cast_nullable_to_non_nullable
as String?,submissionMode: freezed == submissionMode ? _self.submissionMode : submissionMode // ignore: cast_nullable_to_non_nullable
as String?,createdAt: freezed == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable
as int?,tender: freezed == tender ? _self.tender : tender // ignore: cast_nullable_to_non_nullable
as TenderData?,
));
}
/// Create a copy of TenderApprovalsData
/// with the given fields replaced by the non-null parameter values.
@override
@pragma('vm:prefer-inline')
$TenderDataCopyWith<$Res>? get tender {
if (_self.tender == null) {
return null;
}
return $TenderDataCopyWith<$Res>(_self.tender!, (value) {
return _then(_self.copyWith(tender: value));
});
}
}
/// Adds pattern-matching-related methods to [TenderApprovalsData].
extension TenderApprovalsDataPatterns on TenderApprovalsData {
/// A variant of `map` that fallback to returning `orElse`.
///
/// It is equivalent to doing:
/// ```dart
/// switch (sealedClass) {
/// case final Subclass value:
/// return ...;
/// case _:
/// return orElse();
/// }
/// ```
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _TenderApprovalsData value)? $default,{required TResult orElse(),}){
final _that = this;
switch (_that) {
case _TenderApprovalsData() when $default != null:
return $default(_that);case _:
return orElse();
}
}
/// A `switch`-like method, using callbacks.
///
/// Callbacks receives the raw object, upcasted.
/// It is equivalent to doing:
/// ```dart
/// switch (sealedClass) {
/// case final Subclass value:
/// return ...;
/// case final Subclass2 value:
/// return ...;
/// }
/// ```
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _TenderApprovalsData value) $default,){
final _that = this;
switch (_that) {
case _TenderApprovalsData():
return $default(_that);case _:
throw StateError('Unexpected subclass');
}
}
/// A variant of `map` that fallback to returning `null`.
///
/// It is equivalent to doing:
/// ```dart
/// switch (sealedClass) {
/// case final Subclass value:
/// return ...;
/// case _:
/// return null;
/// }
/// ```
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _TenderApprovalsData value)? $default,){
final _that = this;
switch (_that) {
case _TenderApprovalsData() when $default != null:
return $default(_that);case _:
return null;
}
}
/// A variant of `when` that fallback to an `orElse` callback.
///
/// It is equivalent to doing:
/// ```dart
/// switch (sealedClass) {
/// case Subclass(:final field):
/// return ...;
/// case _:
/// return orElse();
/// }
/// ```
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String? id, String status, @JsonKey(name: 'tender_id') String? tenderId, @JsonKey(name: 'company_id') String? companyId, @JsonKey(name: 'submission_mode') String? submissionMode, @JsonKey(name: 'created_at') int? createdAt, TenderData? tender)? $default,{required TResult orElse(),}) {final _that = this;
switch (_that) {
case _TenderApprovalsData() when $default != null:
return $default(_that.id,_that.status,_that.tenderId,_that.companyId,_that.submissionMode,_that.createdAt,_that.tender);case _:
return orElse();
}
}
/// A `switch`-like method, using callbacks.
///
/// As opposed to `map`, this offers destructuring.
/// It is equivalent to doing:
/// ```dart
/// switch (sealedClass) {
/// case Subclass(:final field):
/// return ...;
/// case Subclass2(:final field2):
/// return ...;
/// }
/// ```
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String? id, String status, @JsonKey(name: 'tender_id') String? tenderId, @JsonKey(name: 'company_id') String? companyId, @JsonKey(name: 'submission_mode') String? submissionMode, @JsonKey(name: 'created_at') int? createdAt, TenderData? tender) $default,) {final _that = this;
switch (_that) {
case _TenderApprovalsData():
return $default(_that.id,_that.status,_that.tenderId,_that.companyId,_that.submissionMode,_that.createdAt,_that.tender);case _:
throw StateError('Unexpected subclass');
}
}
/// A variant of `when` that fallback to returning `null`
///
/// It is equivalent to doing:
/// ```dart
/// switch (sealedClass) {
/// case Subclass(:final field):
/// return ...;
/// case _:
/// return null;
/// }
/// ```
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String? id, String status, @JsonKey(name: 'tender_id') String? tenderId, @JsonKey(name: 'company_id') String? companyId, @JsonKey(name: 'submission_mode') String? submissionMode, @JsonKey(name: 'created_at') int? createdAt, TenderData? tender)? $default,) {final _that = this;
switch (_that) {
case _TenderApprovalsData() when $default != null:
return $default(_that.id,_that.status,_that.tenderId,_that.companyId,_that.submissionMode,_that.createdAt,_that.tender);case _:
return null;
}
}
}
/// @nodoc
@JsonSerializable()
class _TenderApprovalsData implements TenderApprovalsData {
const _TenderApprovalsData({required this.id, required this.status, @JsonKey(name: 'tender_id') required this.tenderId, @JsonKey(name: 'company_id') required this.companyId, @JsonKey(name: 'submission_mode') required this.submissionMode, @JsonKey(name: 'created_at') required this.createdAt, required this.tender});
factory _TenderApprovalsData.fromJson(Map<String, dynamic> json) => _$TenderApprovalsDataFromJson(json);
@override final String? id;
@override final String status;
@override@JsonKey(name: 'tender_id') final String? tenderId;
@override@JsonKey(name: 'company_id') final String? companyId;
@override@JsonKey(name: 'submission_mode') final String? submissionMode;
@override@JsonKey(name: 'created_at') final int? createdAt;
@override final TenderData? tender;
/// Create a copy of TenderApprovalsData
/// with the given fields replaced by the non-null parameter values.
@override @JsonKey(includeFromJson: false, includeToJson: false)
@pragma('vm:prefer-inline')
_$TenderApprovalsDataCopyWith<_TenderApprovalsData> get copyWith => __$TenderApprovalsDataCopyWithImpl<_TenderApprovalsData>(this, _$identity);
@override
Map<String, dynamic> toJson() {
return _$TenderApprovalsDataToJson(this, );
}
@override
bool operator ==(Object other) {
return identical(this, other) || (other.runtimeType == runtimeType&&other is _TenderApprovalsData&&(identical(other.id, id) || other.id == id)&&(identical(other.status, status) || other.status == status)&&(identical(other.tenderId, tenderId) || other.tenderId == tenderId)&&(identical(other.companyId, companyId) || other.companyId == companyId)&&(identical(other.submissionMode, submissionMode) || other.submissionMode == submissionMode)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.tender, tender) || other.tender == tender));
}
@JsonKey(includeFromJson: false, includeToJson: false)
@override
int get hashCode => Object.hash(runtimeType,id,status,tenderId,companyId,submissionMode,createdAt,tender);
@override
String toString() {
return 'TenderApprovalsData(id: $id, status: $status, tenderId: $tenderId, companyId: $companyId, submissionMode: $submissionMode, createdAt: $createdAt, tender: $tender)';
}
}
/// @nodoc
abstract mixin class _$TenderApprovalsDataCopyWith<$Res> implements $TenderApprovalsDataCopyWith<$Res> {
factory _$TenderApprovalsDataCopyWith(_TenderApprovalsData value, $Res Function(_TenderApprovalsData) _then) = __$TenderApprovalsDataCopyWithImpl;
@override @useResult
$Res call({
String? id, String status,@JsonKey(name: 'tender_id') String? tenderId,@JsonKey(name: 'company_id') String? companyId,@JsonKey(name: 'submission_mode') String? submissionMode,@JsonKey(name: 'created_at') int? createdAt, TenderData? tender
});
@override $TenderDataCopyWith<$Res>? get tender;
}
/// @nodoc
class __$TenderApprovalsDataCopyWithImpl<$Res>
implements _$TenderApprovalsDataCopyWith<$Res> {
__$TenderApprovalsDataCopyWithImpl(this._self, this._then);
final _TenderApprovalsData _self;
final $Res Function(_TenderApprovalsData) _then;
/// Create a copy of TenderApprovalsData
/// with the given fields replaced by the non-null parameter values.
@override @pragma('vm:prefer-inline') $Res call({Object? id = freezed,Object? status = null,Object? tenderId = freezed,Object? companyId = freezed,Object? submissionMode = freezed,Object? createdAt = freezed,Object? tender = freezed,}) {
return _then(_TenderApprovalsData(
id: freezed == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
as String?,status: null == status ? _self.status : status // ignore: cast_nullable_to_non_nullable
as String,tenderId: freezed == tenderId ? _self.tenderId : tenderId // ignore: cast_nullable_to_non_nullable
as String?,companyId: freezed == companyId ? _self.companyId : companyId // ignore: cast_nullable_to_non_nullable
as String?,submissionMode: freezed == submissionMode ? _self.submissionMode : submissionMode // ignore: cast_nullable_to_non_nullable
as String?,createdAt: freezed == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable
as int?,tender: freezed == tender ? _self.tender : tender // ignore: cast_nullable_to_non_nullable
as TenderData?,
));
}
/// Create a copy of TenderApprovalsData
/// with the given fields replaced by the non-null parameter values.
@override
@pragma('vm:prefer-inline')
$TenderDataCopyWith<$Res>? get tender {
if (_self.tender == null) {
return null;
}
return $TenderDataCopyWith<$Res>(_self.tender!, (value) {
return _then(_self.copyWith(tender: value));
});
}
}
// dart format on
@@ -0,0 +1,33 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'tender_approvals_data.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
_TenderApprovalsData _$TenderApprovalsDataFromJson(Map<String, dynamic> json) =>
_TenderApprovalsData(
id: json['id'] as String?,
status: json['status'] as String,
tenderId: json['tender_id'] as String?,
companyId: json['company_id'] as String?,
submissionMode: json['submission_mode'] as String?,
createdAt: (json['created_at'] as num?)?.toInt(),
tender:
json['tender'] == null
? null
: TenderData.fromJson(json['tender'] as Map<String, dynamic>),
);
Map<String, dynamic> _$TenderApprovalsDataToJson(
_TenderApprovalsData instance,
) => <String, dynamic>{
'id': instance.id,
'status': instance.status,
'tender_id': instance.tenderId,
'company_id': instance.companyId,
'submission_mode': instance.submissionMode,
'created_at': instance.createdAt,
'tender': instance.tender,
};
@@ -0,0 +1,22 @@
// ignore_for_file: invalid_annotation_target
import 'package:freezed_annotation/freezed_annotation.dart';
import '../error/error_model.dart';
import '../tender_approvals_data/tender_approvals_data.dart';
part 'tender_approvals_response.freezed.dart';
part 'tender_approvals_response.g.dart';
@freezed
abstract class TenderApprovalsResponse with _$TenderApprovalsResponse {
const factory TenderApprovalsResponse({
required String? message,
required bool? success,
required ErrorModel? error,
required List<TenderApprovalsData>? data,
}) = _TenderApprovalsResponse;
factory TenderApprovalsResponse.fromJson(Map<String, Object?> json) =>
_$TenderApprovalsResponseFromJson(json);
}
@@ -0,0 +1,318 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
// coverage:ignore-file
// 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 'tender_approvals_response.dart';
// **************************************************************************
// FreezedGenerator
// **************************************************************************
// dart format off
T _$identity<T>(T value) => value;
/// @nodoc
mixin _$TenderApprovalsResponse {
String? get message; bool? get success; ErrorModel? get error; List<TenderApprovalsData>? get data;
/// Create a copy of TenderApprovalsResponse
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@pragma('vm:prefer-inline')
$TenderApprovalsResponseCopyWith<TenderApprovalsResponse> get copyWith => _$TenderApprovalsResponseCopyWithImpl<TenderApprovalsResponse>(this as TenderApprovalsResponse, _$identity);
/// Serializes this TenderApprovalsResponse to a JSON map.
Map<String, dynamic> toJson();
@override
bool operator ==(Object other) {
return identical(this, other) || (other.runtimeType == runtimeType&&other is TenderApprovalsResponse&&(identical(other.message, message) || other.message == message)&&(identical(other.success, success) || other.success == success)&&(identical(other.error, error) || other.error == error)&&const DeepCollectionEquality().equals(other.data, data));
}
@JsonKey(includeFromJson: false, includeToJson: false)
@override
int get hashCode => Object.hash(runtimeType,message,success,error,const DeepCollectionEquality().hash(data));
@override
String toString() {
return 'TenderApprovalsResponse(message: $message, success: $success, error: $error, data: $data)';
}
}
/// @nodoc
abstract mixin class $TenderApprovalsResponseCopyWith<$Res> {
factory $TenderApprovalsResponseCopyWith(TenderApprovalsResponse value, $Res Function(TenderApprovalsResponse) _then) = _$TenderApprovalsResponseCopyWithImpl;
@useResult
$Res call({
String? message, bool? success, ErrorModel? error, List<TenderApprovalsData>? data
});
$ErrorModelCopyWith<$Res>? get error;
}
/// @nodoc
class _$TenderApprovalsResponseCopyWithImpl<$Res>
implements $TenderApprovalsResponseCopyWith<$Res> {
_$TenderApprovalsResponseCopyWithImpl(this._self, this._then);
final TenderApprovalsResponse _self;
final $Res Function(TenderApprovalsResponse) _then;
/// Create a copy of TenderApprovalsResponse
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline') @override $Res call({Object? message = freezed,Object? success = freezed,Object? error = freezed,Object? data = freezed,}) {
return _then(_self.copyWith(
message: freezed == message ? _self.message : message // ignore: cast_nullable_to_non_nullable
as String?,success: freezed == success ? _self.success : success // ignore: cast_nullable_to_non_nullable
as bool?,error: freezed == error ? _self.error : error // ignore: cast_nullable_to_non_nullable
as ErrorModel?,data: freezed == data ? _self.data : data // ignore: cast_nullable_to_non_nullable
as List<TenderApprovalsData>?,
));
}
/// Create a copy of TenderApprovalsResponse
/// with the given fields replaced by the non-null parameter values.
@override
@pragma('vm:prefer-inline')
$ErrorModelCopyWith<$Res>? get error {
if (_self.error == null) {
return null;
}
return $ErrorModelCopyWith<$Res>(_self.error!, (value) {
return _then(_self.copyWith(error: value));
});
}
}
/// Adds pattern-matching-related methods to [TenderApprovalsResponse].
extension TenderApprovalsResponsePatterns on TenderApprovalsResponse {
/// A variant of `map` that fallback to returning `orElse`.
///
/// It is equivalent to doing:
/// ```dart
/// switch (sealedClass) {
/// case final Subclass value:
/// return ...;
/// case _:
/// return orElse();
/// }
/// ```
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _TenderApprovalsResponse value)? $default,{required TResult orElse(),}){
final _that = this;
switch (_that) {
case _TenderApprovalsResponse() when $default != null:
return $default(_that);case _:
return orElse();
}
}
/// A `switch`-like method, using callbacks.
///
/// Callbacks receives the raw object, upcasted.
/// It is equivalent to doing:
/// ```dart
/// switch (sealedClass) {
/// case final Subclass value:
/// return ...;
/// case final Subclass2 value:
/// return ...;
/// }
/// ```
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _TenderApprovalsResponse value) $default,){
final _that = this;
switch (_that) {
case _TenderApprovalsResponse():
return $default(_that);case _:
throw StateError('Unexpected subclass');
}
}
/// A variant of `map` that fallback to returning `null`.
///
/// It is equivalent to doing:
/// ```dart
/// switch (sealedClass) {
/// case final Subclass value:
/// return ...;
/// case _:
/// return null;
/// }
/// ```
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _TenderApprovalsResponse value)? $default,){
final _that = this;
switch (_that) {
case _TenderApprovalsResponse() when $default != null:
return $default(_that);case _:
return null;
}
}
/// A variant of `when` that fallback to an `orElse` callback.
///
/// It is equivalent to doing:
/// ```dart
/// switch (sealedClass) {
/// case Subclass(:final field):
/// return ...;
/// case _:
/// return orElse();
/// }
/// ```
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String? message, bool? success, ErrorModel? error, List<TenderApprovalsData>? data)? $default,{required TResult orElse(),}) {final _that = this;
switch (_that) {
case _TenderApprovalsResponse() when $default != null:
return $default(_that.message,_that.success,_that.error,_that.data);case _:
return orElse();
}
}
/// A `switch`-like method, using callbacks.
///
/// As opposed to `map`, this offers destructuring.
/// It is equivalent to doing:
/// ```dart
/// switch (sealedClass) {
/// case Subclass(:final field):
/// return ...;
/// case Subclass2(:final field2):
/// return ...;
/// }
/// ```
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String? message, bool? success, ErrorModel? error, List<TenderApprovalsData>? data) $default,) {final _that = this;
switch (_that) {
case _TenderApprovalsResponse():
return $default(_that.message,_that.success,_that.error,_that.data);case _:
throw StateError('Unexpected subclass');
}
}
/// A variant of `when` that fallback to returning `null`
///
/// It is equivalent to doing:
/// ```dart
/// switch (sealedClass) {
/// case Subclass(:final field):
/// return ...;
/// case _:
/// return null;
/// }
/// ```
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String? message, bool? success, ErrorModel? error, List<TenderApprovalsData>? data)? $default,) {final _that = this;
switch (_that) {
case _TenderApprovalsResponse() when $default != null:
return $default(_that.message,_that.success,_that.error,_that.data);case _:
return null;
}
}
}
/// @nodoc
@JsonSerializable()
class _TenderApprovalsResponse implements TenderApprovalsResponse {
const _TenderApprovalsResponse({required this.message, required this.success, required this.error, required final List<TenderApprovalsData>? data}): _data = data;
factory _TenderApprovalsResponse.fromJson(Map<String, dynamic> json) => _$TenderApprovalsResponseFromJson(json);
@override final String? message;
@override final bool? success;
@override final ErrorModel? error;
final List<TenderApprovalsData>? _data;
@override List<TenderApprovalsData>? get data {
final value = _data;
if (value == null) return null;
if (_data is EqualUnmodifiableListView) return _data;
// ignore: implicit_dynamic_type
return EqualUnmodifiableListView(value);
}
/// Create a copy of TenderApprovalsResponse
/// with the given fields replaced by the non-null parameter values.
@override @JsonKey(includeFromJson: false, includeToJson: false)
@pragma('vm:prefer-inline')
_$TenderApprovalsResponseCopyWith<_TenderApprovalsResponse> get copyWith => __$TenderApprovalsResponseCopyWithImpl<_TenderApprovalsResponse>(this, _$identity);
@override
Map<String, dynamic> toJson() {
return _$TenderApprovalsResponseToJson(this, );
}
@override
bool operator ==(Object other) {
return identical(this, other) || (other.runtimeType == runtimeType&&other is _TenderApprovalsResponse&&(identical(other.message, message) || other.message == message)&&(identical(other.success, success) || other.success == success)&&(identical(other.error, error) || other.error == error)&&const DeepCollectionEquality().equals(other._data, _data));
}
@JsonKey(includeFromJson: false, includeToJson: false)
@override
int get hashCode => Object.hash(runtimeType,message,success,error,const DeepCollectionEquality().hash(_data));
@override
String toString() {
return 'TenderApprovalsResponse(message: $message, success: $success, error: $error, data: $data)';
}
}
/// @nodoc
abstract mixin class _$TenderApprovalsResponseCopyWith<$Res> implements $TenderApprovalsResponseCopyWith<$Res> {
factory _$TenderApprovalsResponseCopyWith(_TenderApprovalsResponse value, $Res Function(_TenderApprovalsResponse) _then) = __$TenderApprovalsResponseCopyWithImpl;
@override @useResult
$Res call({
String? message, bool? success, ErrorModel? error, List<TenderApprovalsData>? data
});
@override $ErrorModelCopyWith<$Res>? get error;
}
/// @nodoc
class __$TenderApprovalsResponseCopyWithImpl<$Res>
implements _$TenderApprovalsResponseCopyWith<$Res> {
__$TenderApprovalsResponseCopyWithImpl(this._self, this._then);
final _TenderApprovalsResponse _self;
final $Res Function(_TenderApprovalsResponse) _then;
/// Create a copy of TenderApprovalsResponse
/// with the given fields replaced by the non-null parameter values.
@override @pragma('vm:prefer-inline') $Res call({Object? message = freezed,Object? success = freezed,Object? error = freezed,Object? data = freezed,}) {
return _then(_TenderApprovalsResponse(
message: freezed == message ? _self.message : message // ignore: cast_nullable_to_non_nullable
as String?,success: freezed == success ? _self.success : success // ignore: cast_nullable_to_non_nullable
as bool?,error: freezed == error ? _self.error : error // ignore: cast_nullable_to_non_nullable
as ErrorModel?,data: freezed == data ? _self._data : data // ignore: cast_nullable_to_non_nullable
as List<TenderApprovalsData>?,
));
}
/// Create a copy of TenderApprovalsResponse
/// with the given fields replaced by the non-null parameter values.
@override
@pragma('vm:prefer-inline')
$ErrorModelCopyWith<$Res>? get error {
if (_self.error == null) {
return null;
}
return $ErrorModelCopyWith<$Res>(_self.error!, (value) {
return _then(_self.copyWith(error: value));
});
}
}
// dart format on
@@ -0,0 +1,31 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'tender_approvals_response.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
_TenderApprovalsResponse _$TenderApprovalsResponseFromJson(
Map<String, dynamic> json,
) => _TenderApprovalsResponse(
message: json['message'] as String?,
success: json['success'] as bool?,
error:
json['error'] == null
? null
: ErrorModel.fromJson(json['error'] as Map<String, dynamic>),
data:
(json['data'] as List<dynamic>?)
?.map((e) => TenderApprovalsData.fromJson(e as Map<String, dynamic>))
.toList(),
);
Map<String, dynamic> _$TenderApprovalsResponseToJson(
_TenderApprovalsResponse instance,
) => <String, dynamic>{
'message': instance.message,
'success': instance.success,
'error': instance.error,
'data': instance.data,
};
+25 -10
View File
@@ -1,16 +1,31 @@
import 'dart:convert';
import 'package:dio/dio.dart';
import 'package:tm_app/core/utils/logger.dart';
import 'package:tm_app/core/utils/result.dart';
import 'package:tm_app/data/services/mock_data/mock_your_tenders_data.dart';
import 'package:tm_app/data/services/model/your_tender_model_request/your_tenders_request_model.dart';
import 'package:tm_app/data/services/model/your_tender_model_response/your_tender_model_response.dart';
import 'package:tm_app/data/services/model/tender_approvals_response/tender_approvals_response.dart';
import '../../../core/network/network_manager.dart';
class YourTendersService {
Future<Result<YourTendersResponseModel>> getYourTenders({
required YourTendersRequestModel request,
}) async {
await Future.delayed(const Duration(seconds: 1));
return Result.ok(
YourTendersResponseModel.fromJson(jsonDecode(mockYourTendersData)),
YourTendersService({required NetworkManager networkManager})
: _networkManager = networkManager;
final NetworkManager _networkManager;
Future<Result<TenderApprovalsResponse>> getApprovedTenders() async {
try {
final result = await _networkManager.makeRequest(
'/api/v1/tender-approvals?status=approved',
(json) => TenderApprovalsResponse.fromJson(json),
method: 'GET',
);
return result;
} on DioException catch (e) {
appLogger.error('get approved tenders failed: $e');
return Result.error(e);
} on Exception catch (e, stackTrace) {
appLogger.error('get approved tenders failed: $e', stackTrace: stackTrace);
return Result.error(Exception(e));
}
}
}
+8 -10
View File
@@ -1,32 +1,30 @@
import 'package:flutter/material.dart';
import 'package:tm_app/core/utils/result.dart';
import 'package:tm_app/data/repositories/your_tenders_repository.dart';
import 'package:tm_app/data/services/model/your_tender_model_request/your_tenders_request_model.dart';
import 'package:tm_app/data/services/model/your_tender_model_response/your_tender_model_response.dart';
import 'package:tm_app/data/services/model/tender_approvals_response/tender_approvals_response.dart';
class YourTendersViewModel with ChangeNotifier {
final YourTendersRepository yourTendersRepository;
YourTendersViewModel({required this.yourTendersRepository}) {
getTenders();
getApprovedTenders();
}
bool isLoading = false;
String? errorMessage;
YourTendersResponseModel? data;
TenderApprovalsResponse? data;
Future<void> getTenders() async {
Future<void> getApprovedTenders() async {
isLoading = true;
notifyListeners();
final result = await yourTendersRepository.getYourTenders(
request: const YourTendersRequestModel(id: '1'),
);
final result = await yourTendersRepository.getApprovedTenders();
switch (result) {
case Ok<YourTendersResponseModel>():
case Ok<TenderApprovalsResponse>():
data = result.value;
errorMessage = null;
break;
case Error<YourTendersResponseModel>():
case Error<TenderApprovalsResponse>():
errorMessage = result.error.toString();
break;
}
@@ -25,7 +25,7 @@ class _YourTendersDesktopPageState extends State<YourTendersDesktopPage>
controller = TabController(length: 2, vsync: this);
WidgetsBinding.instance.addPostFrameCallback((_) {
context.read<YourTendersViewModel>().getTenders();
context.read<YourTendersViewModel>().getApprovedTenders();
});
}
@@ -72,12 +72,11 @@ class _YourTendersDesktopPageState extends State<YourTendersDesktopPage>
controller: controller,
children: [
ApprovedTenders(
approvedTenders:
viewModel.data?.approvedTenders ?? [],
approvedTenders: viewModel.data!,
),
TendersSubmitted(
tendersSubmitted:
viewModel.data?.tendersSubmitted ?? [],
[],
),
],
);
@@ -25,7 +25,7 @@ class _YourTendersMobilePageState extends State<YourTendersMobilePage>
controller = TabController(length: 2, vsync: this);
WidgetsBinding.instance.addPostFrameCallback((_) {
context.read<YourTendersViewModel>().getTenders();
context.read<YourTendersViewModel>().getApprovedTenders();
});
}
@@ -65,10 +65,10 @@ class _YourTendersMobilePageState extends State<YourTendersMobilePage>
controller: controller,
children: [
ApprovedTenders(
approvedTenders: viewModel.data?.approvedTenders ?? [],
approvedTenders: viewModel.data!,
),
TendersSubmitted(
tendersSubmitted: viewModel.data?.tendersSubmitted ?? [],
tendersSubmitted: [],
),
],
);
@@ -25,7 +25,7 @@ class _YourTendersTabletPageState extends State<YourTendersTabletPage>
controller = TabController(length: 2, vsync: this);
WidgetsBinding.instance.addPostFrameCallback((_) {
context.read<YourTendersViewModel>().getTenders();
context.read<YourTendersViewModel>().getApprovedTenders();
});
}
@@ -72,12 +72,10 @@ class _YourTendersTabletPageState extends State<YourTendersTabletPage>
controller: controller,
children: [
ApprovedTenders(
approvedTenders:
viewModel.data?.approvedTenders ?? [],
approvedTenders: viewModel.data!,
),
TendersSubmitted(
tendersSubmitted:
viewModel.data?.tendersSubmitted ?? [],
tendersSubmitted: [],
),
],
);
@@ -1,58 +1,57 @@
import 'package:flutter/material.dart';
import 'package:tm_app/core/constants/assets.dart';
import 'package:tm_app/core/theme/colors.dart';
import 'package:tm_app/data/services/model/tender_approvals_response/tender_approvals_response.dart';
import 'package:tm_app/views/your_tenders/widgets/tender_card.dart';
import '../../../data/services/model/your_tender_model/your_tender_model.dart';
class ApprovedTenders extends StatelessWidget {
const ApprovedTenders({required this.approvedTenders, super.key});
final List<YourTenderModel> approvedTenders;
final TenderApprovalsResponse approvedTenders;
@override
Widget build(BuildContext context) {
return ListView.builder(
padding: const EdgeInsets.only(top: 20),
itemCount: approvedTenders.length,
itemCount: approvedTenders.data!.length,
itemBuilder: (context, index) {
final tender = approvedTenders[index];
final tender = approvedTenders.data![index];
return TenderCard(
date: tender.date,
title: tender.title,
description: tender.description,
location: tender.location,
countryFlag: tender.countryFlag,
date: tender.createdAt!.toString(),
title: tender.tender!.title!,
description: tender.tender!.description!,
location: tender.tender!.countryCode!,
countryFlag: AssetsManager.seFlag,
status: tender.status,
projectStatus: tender.projectStatus,
projectStatus: tender.tender!.status!,
backgroundColor:
tender.status == 'Won'
? AppColors.green0
: tender.status == 'Completed'
: tender.status == 'approved'
? AppColors.grey0
: AppColors.red0.withValues(alpha: 0.2),
borderColor:
tender.status == 'Won'
? AppColors.green10
: tender.status == 'Completed'
: tender.status == 'approved'
? AppColors.grey30
: AppColors.red0,
statusIcon:
tender.status == 'Won'
? AssetsManager.tickCircle
: tender.status == 'Completed'
: tender.status == 'approved'
? null
: AssetsManager.closeCircle,
statusCardColor:
tender.status == 'Won'
? AppColors.green20
: tender.status == 'Completed'
: tender.status == 'approved'
? AppColors.green20
: AppColors.red0,
statusTextColor:
tender.status == 'Won'
? AppColors.green30
: tender.status == 'Completed'
: tender.status == 'approved'
? AppColors.green30
: AppColors.red10,
);
+32 -8
View File
@@ -37,10 +37,10 @@ packages:
dependency: transitive
description:
name: async
sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
url: "https://pub.dev"
source: hosted
version: "2.13.0"
version: "2.12.0"
boolean_selector:
dependency: transitive
description:
@@ -169,6 +169,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.1.2"
country_flags:
dependency: "direct main"
description:
name: country_flags
sha256: "78a7bf8aabd7ae1a90087f0c517471ac9ebfe07addc652692f58da0f0f833196"
url: "https://pub.dev"
source: hosted
version: "3.3.0"
crypto:
dependency: transitive
description:
@@ -221,10 +229,10 @@ packages:
dependency: transitive
description:
name: fake_async
sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc"
url: "https://pub.dev"
source: hosted
version: "1.3.3"
version: "1.3.2"
ffi:
dependency: transitive
description:
@@ -416,6 +424,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.5"
jovial_misc:
dependency: transitive
description:
name: jovial_misc
sha256: "4301011027d87b8b919cb862db84071a34448eadbb32cc8d40fe505424dfe69a"
url: "https://pub.dev"
source: hosted
version: "0.9.2"
jovial_svg:
dependency: transitive
description:
name: jovial_svg
sha256: "6791b1435547bdc0793081a166d41a8a313ebc61e4e5136fb7a3218781fb9e50"
url: "https://pub.dev"
source: hosted
version: "1.1.27"
js:
dependency: transitive
description:
@@ -444,10 +468,10 @@ packages:
dependency: transitive
description:
name: leak_tracker
sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
url: "https://pub.dev"
source: hosted
version: "10.0.9"
version: "10.0.8"
leak_tracker_flutter_testing:
dependency: transitive
description:
@@ -849,10 +873,10 @@ packages:
dependency: transitive
description:
name: vm_service
sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14"
url: "https://pub.dev"
source: hosted
version: "15.0.0"
version: "14.3.1"
watcher:
dependency: transitive
description: