API's Modifications 1.4
@ -0,0 +1,11 @@
|
||||
<svg id="Group_761" data-name="Group 761" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="21.545" height="22.965" viewBox="0 0 21.545 22.965">
|
||||
<defs>
|
||||
<clipPath id="clip-path">
|
||||
<rect id="Rectangle_1484" data-name="Rectangle 1484" width="21.545" height="22.965" fill="#2699fb"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g id="Group_761-2" data-name="Group 761" clip-path="url(#clip-path)">
|
||||
<path id="Path_663" data-name="Path 663" d="M21.3,136.849l-1.91-.49-.881.734c0-.049-1.812-4.7-1.714-4.407a1.879,1.879,0,0,0-1.567-1.175,53.565,53.565,0,0,0-8.863,0A1.857,1.857,0,0,0,4.8,132.687c0,.049-1.812,4.7-1.714,4.407l-.881-.734-1.91.49a.42.42,0,0,0-.294.343v.441a.573.573,0,0,0,.392.539l1.861.783-.245.343a2.372,2.372,0,0,0-.343,1.273v5.876a1.547,1.547,0,0,0,1.567,1.567H4.456a1.547,1.547,0,0,0,1.567-1.567v-.832h9.646v.832a1.578,1.578,0,0,0,1.567,1.567H18.46a1.547,1.547,0,0,0,1.567-1.567V140.57a2.908,2.908,0,0,0-.343-1.273l-.294-.343,1.763-.734a.573.573,0,0,0,.392-.539v-.441A.388.388,0,0,0,21.3,136.849Zm-15.718,4.6-.734,1.518a.3.3,0,0,1-.294.2H2.938a.335.335,0,0,1-.343-.343V141.3a.335.335,0,0,1,.343-.343h2.3a.345.345,0,0,1,.343.49m-1.763-3.428,1.273-3.33c.588-.049,1.567-.147,3.183-.2a61.5,61.5,0,0,1,8.226.2l1.273,3.33h-.686a2.88,2.88,0,0,0-5.68,0Zm8.667,0a1.9,1.9,0,0,1,1.861-1.42,1.939,1.939,0,0,1,1.861,1.42ZM14,143.557H7.737a.579.579,0,0,1-.539-.832l.783-1.812a.6.6,0,0,1,.539-.343h4.75a.6.6,0,0,1,.539.343l.783,1.812a.623.623,0,0,1-.588.832m5.043-.734a.335.335,0,0,1-.343.343H17.138a.331.331,0,0,1-.294-.2l-.734-1.518a.337.337,0,0,1,.294-.49h2.3a.335.335,0,0,1,.343.343Z" transform="translate(0 -125.048)" fill="#2699fb"/>
|
||||
<path id="Path_664" data-name="Path 664" d="M123.925,3.085a1.986,1.986,0,0,1,2.008,2.008h3.134V4.7a.477.477,0,0,0-.392-.49l-.93-.147a5.837,5.837,0,0,0-.392-.979l.539-.734a.4.4,0,0,0-.049-.588l-.539-.588a.519.519,0,0,0-.637-.049l-.734.539a2.428,2.428,0,0,0-.979-.392l-.147-.881a.477.477,0,0,0-.49-.392h-.783a.527.527,0,0,0-.49.392l-.147.881a5.836,5.836,0,0,0-.979.392l-.734-.539a.518.518,0,0,0-.637.049l-.539.588a.513.513,0,0,0-.049.637l.539.686a2.428,2.428,0,0,0-.392.979l-.93.147a.477.477,0,0,0-.392.49v.392h3.134A2.017,2.017,0,0,1,123.925,3.085Z" transform="translate(-113.104)" fill="#2699fb"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 480 B |
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="13.412" height="17.882" viewBox="0 0 13.412 17.882">
|
||||
<path id="Path_665" data-name="Path 665" d="M11.735,7.265V5.029a5.029,5.029,0,0,0-10.059,0V7.265A1.647,1.647,0,0,0,0,8.941v7.265a1.681,1.681,0,0,0,1.676,1.676H11.735a1.681,1.681,0,0,0,1.676-1.676V8.941a1.646,1.646,0,0,0-1.676-1.676M2.794,5.029a3.912,3.912,0,0,1,7.823,0V7.265H2.794ZM7.265,13.3v1.229a.559.559,0,1,1-1.118,0V13.3a1.628,1.628,0,0,1-1.118-1.565,1.676,1.676,0,0,1,3.353,0A1.628,1.628,0,0,1,7.265,13.3" fill="#2699fb"/>
|
||||
</svg>
|
After Width: | Height: | Size: 540 B |
@ -0,0 +1,11 @@
|
||||
<svg id="Group_773" data-name="Group 773" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="19.6" height="16" viewBox="0 0 19.6 16">
|
||||
<defs>
|
||||
<clipPath id="clip-path">
|
||||
<rect id="Rectangle_1471" data-name="Rectangle 1471" width="19.6" height="16" fill="#2699fb"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g id="Group_18" data-name="Group 18" clip-path="url(#clip-path)">
|
||||
<path id="Path_649" data-name="Path 649" d="M8,14.8a.325.325,0,0,1-.025-.169c.008-.046-.021-.083-.087-.112s-.1-.052-.1-.069-.048-.029-.144-.037L7.5,14.4H3.6a1.925,1.925,0,0,1-1.413-.588A1.926,1.926,0,0,1,1.6,12.4V3.6a1.926,1.926,0,0,1,.587-1.412A1.926,1.926,0,0,1,3.6,1.6h4a.378.378,0,0,0,.256-.081.415.415,0,0,0,.125-.244A2.1,2.1,0,0,0,8.019.981,3.11,3.11,0,0,0,8.012.65Q8,.45,8,.4A.385.385,0,0,0,7.881.119.385.385,0,0,0,7.6,0h-4A3.468,3.468,0,0,0,1.056,1.056,3.467,3.467,0,0,0,0,3.6v8.8a3.467,3.467,0,0,0,1.056,2.544A3.467,3.467,0,0,0,3.6,16h4a.379.379,0,0,0,.256-.081.415.415,0,0,0,.125-.244,2.108,2.108,0,0,0,.038-.294,3.107,3.107,0,0,0-.006-.331Q8,14.85,8,14.8" fill="#2699fb"/>
|
||||
<path id="Path_650" data-name="Path 650" d="M124.2,16.169l-6.8-6.8a.8.8,0,0,0-1.363.563v3.6h-5.6a.811.811,0,0,0-.8.8v4.8a.811.811,0,0,0,.8.8h5.6v3.6a.8.8,0,0,0,1.363.562l6.8-6.8a.785.785,0,0,0,0-1.125" transform="translate(-104.833 -8.731)" fill="#2699fb"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
@ -0,0 +1,10 @@
|
||||
<svg id="Group_775" data-name="Group 775" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="13" height="23.853" viewBox="0 0 13 23.853">
|
||||
<defs>
|
||||
<clipPath id="clip-path">
|
||||
<rect id="Rectangle_1493" data-name="Rectangle 1493" width="13" height="23.853" fill="#2699fb"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g id="Group_774" data-name="Group 774" clip-path="url(#clip-path)">
|
||||
<path id="Path_689" data-name="Path 689" d="M11.306,0H1.67A1.675,1.675,0,0,0,0,1.67V22.183a1.675,1.675,0,0,0,1.67,1.67H11.33A1.675,1.675,0,0,0,13,22.183V1.67A1.7,1.7,0,0,0,11.306,0M6.488,1.312a.477.477,0,1,1-.477.477.479.479,0,0,1,.477-.477M7.919,22.541H5.057v-.954H7.919Zm4.1-2.29H.93V3.6H12.022Z" fill="#2699fb"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 745 B |
@ -0,0 +1,12 @@
|
||||
<svg id="Group_766" data-name="Group 766" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="15" height="16.406" viewBox="0 0 15 16.406">
|
||||
<defs>
|
||||
<clipPath id="clip-path">
|
||||
<rect id="Rectangle_1486" data-name="Rectangle 1486" width="15" height="16.406" fill="#2699fb"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g id="Group_765" data-name="Group 765" clip-path="url(#clip-path)">
|
||||
<path id="Path_666" data-name="Path 666" d="M2.813,6.094H13.125V.937A.938.938,0,0,0,12.187,0H.937A.937.937,0,0,0,0,.937V15a.937.937,0,0,0,.937.937H8.906V12.656H2.813a.469.469,0,0,1,0-.938H8.325a3.924,3.924,0,0,1-.356-1.641V9.844H2.813a.469.469,0,0,1,0-.938h5.33A4.013,4.013,0,0,1,9.375,7.031H2.813a.469.469,0,1,1,0-.938m0-3.75H6.094a.469.469,0,0,1,0,.937H2.813a.469.469,0,1,1,0-.937" fill="#2699fb"/>
|
||||
<path id="Path_667" data-name="Path 667" d="M205.714,160a3.047,3.047,0,1,1-3.047,3.047A3.047,3.047,0,0,1,205.714,160" transform="translate(-193.761 -152.969)" fill="#2699fb"/>
|
||||
<path id="Path_668" data-name="Path 668" d="M228.219,306.24a3.98,3.98,0,0,1-4.219,0v2.948l2.109-.937,2.109.938Z" transform="translate(-214.156 -292.782)" fill="#2699fb"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
@ -0,0 +1,4 @@
|
||||
<svg id="Notifications" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<rect id="Rectangle_479" data-name="Rectangle 479" width="16" height="16" fill="none"/>
|
||||
<path id="Path_1" data-name="Path 1" d="M15,14H10a2,2,0,0,1-4,0H1a.961.961,0,0,1-.9-.7,1.068,1.068,0,0,1,.3-1.1A4.026,4.026,0,0,0,2,9V6A6,6,0,0,1,14,6V9a4.026,4.026,0,0,0,1.6,3.2.947.947,0,0,1,.3,1.1A.961.961,0,0,1,15,14Z" transform="translate(-0.063)" fill="#2699fb"/>
|
||||
</svg>
|
After Width: | Height: | Size: 472 B |
After Width: | Height: | Size: 675 B |
@ -0,0 +1,40 @@
|
||||
import 'dart:async';
|
||||
import 'package:car_provider_app/classes/app_state.dart';
|
||||
import 'package:car_provider_app/models/profile/document.dart';
|
||||
import 'package:car_provider_app/models/user/country.dart';
|
||||
import 'package:car_provider_app/models/user/role.dart';
|
||||
import 'package:http/http.dart';
|
||||
import 'package:car_provider_app/classes/consts.dart';
|
||||
import 'package:car_provider_app/models/content_info_model.dart';
|
||||
import 'package:car_provider_app/models/member_model.dart';
|
||||
import 'package:car_provider_app/models/surah_model.dart';
|
||||
import 'package:car_provider_app/models/user/basic_otp.dart';
|
||||
import 'package:car_provider_app/models/user/register_user.dart';
|
||||
|
||||
import '../api_client.dart';
|
||||
|
||||
class ProfileApiClent {
|
||||
static final ProfileApiClent _instance = ProfileApiClent._internal();
|
||||
|
||||
ProfileApiClent._internal();
|
||||
|
||||
factory ProfileApiClent() => _instance;
|
||||
|
||||
Future<Document> getServiceProviderDocument(dynamic userId) async {
|
||||
var queryParameters = {
|
||||
"ServiceProviderID": userId.toString(),
|
||||
};
|
||||
String? token = AppState().getUser.data?.accessToken;
|
||||
print(token);
|
||||
return await ApiClient().getJsonForObject((json) => Document.fromJson(json), ApiConsts.GetProviderDocument, queryParameters: queryParameters, token: AppState().getUser.data!.accessToken ?? "");
|
||||
}
|
||||
|
||||
Future<RegisterUser> basicVerify(String phoneNo, String otp, String userToken) async {
|
||||
var postParams = {
|
||||
"userMobileNo": phoneNo,
|
||||
"userOTP": otp,
|
||||
"userToken": userToken,
|
||||
};
|
||||
return await ApiClient().postJsonForObject((json) => RegisterUser.fromJson(json), ApiConsts.BasicVerify, postParams);
|
||||
}
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
|
||||
class LoginApiClient {
|
||||
static final LoginApiClient _instance = LoginApiClient._internal();
|
||||
|
||||
LoginApiClient._internal();
|
||||
|
||||
factory LoginApiClient() => _instance;
|
||||
|
||||
// Future<CheckMobileAppVersionModel> checkMobileAppVersion() async {
|
||||
// String url = "${ApiConsts.utilitiesRest}CheckMobileAppVersion";
|
||||
// Map<String, dynamic> postParams = {};
|
||||
// postParams.addAll(AppState().postParamsJson);
|
||||
// return await ApiClient().postJsonForObject((json) => CheckMobileAppVersionModel.fromJson(json), url, postParams);
|
||||
// }
|
||||
//
|
||||
// Future<MemberLoginListModel?> memberLogin(String username, String password) async {
|
||||
// String url = "${ApiConsts.erpRest}MemberLogin";
|
||||
// Map<String, dynamic> postParams = {"P_APP_VERSION": "CS", "P_LANGUAGE": "US", "P_PASSWORD": password, "P_USER_NAME": username};
|
||||
// postParams.addAll(AppState().postParamsJson);
|
||||
// return await ApiClient().postJsonForObject((json) {
|
||||
// GenericResponseModel responseData = GenericResponseModel.fromJson(json);
|
||||
// AppState().postParamsObject?.setLogInTokenID = responseData.logInTokenID;
|
||||
// return responseData.memberLoginList;
|
||||
// }, url, postParams);
|
||||
// }
|
||||
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:car_provider_app/classes/consts.dart';
|
||||
import 'package:car_provider_app/models/content_info_model.dart';
|
||||
import 'package:car_provider_app/models/member_model.dart';
|
||||
import 'package:car_provider_app/models/surah_model.dart';
|
||||
|
||||
import 'api_client.dart';
|
||||
|
||||
class TangheemUserApiClient {
|
||||
static final TangheemUserApiClient _instance = TangheemUserApiClient._internal();
|
||||
|
||||
TangheemUserApiClient._internal();
|
||||
|
||||
factory TangheemUserApiClient() => _instance;
|
||||
|
||||
Future<SurahModel> getSurahs() async {
|
||||
String url = "${ApiConsts.baseUrl}AlSuar_Get";
|
||||
var postParams = {};
|
||||
return await ApiClient().postJsonForObject((json) => SurahModel.fromJson(json), url, postParams);
|
||||
}
|
||||
|
||||
Future<MemberModel> getMembers() async {
|
||||
String url = "${ApiConsts.baseUrl}Committee_Get";
|
||||
var postParams = {};
|
||||
return await ApiClient().postJsonForObject((json) => MemberModel.fromJson(json), url, postParams);
|
||||
}
|
||||
|
||||
Future<ContentInfoModel> getContentInfo(int contentId) async {
|
||||
String url = "${ApiConsts.baseUrl}ContentInfo_Get";
|
||||
var postParams = {"contentTypeId": contentId};
|
||||
return await ApiClient().postJsonForObject((json) => ContentInfoModel.fromJson(json), url, postParams);
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
import 'package:car_provider_app/models/user/user.dart';
|
||||
|
||||
class AppState {
|
||||
static final AppState _instance = AppState._internal();
|
||||
|
||||
AppState._internal();
|
||||
|
||||
factory AppState() => _instance;
|
||||
|
||||
bool isLogged = false;
|
||||
|
||||
set setLogged(v) => isLogged = v;
|
||||
|
||||
bool? get getIsLogged => isLogged;
|
||||
|
||||
User? _user = null;
|
||||
|
||||
set setUser(v) => _user = v;
|
||||
|
||||
User get getUser => _user??User();
|
||||
}
|
@ -0,0 +1,80 @@
|
||||
// To parse this JSON data, do
|
||||
//
|
||||
// final document = documentFromJson(jsonString);
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
Document documentFromJson(String str) => Document.fromJson(json.decode(str));
|
||||
|
||||
String documentToJson(Document data) => json.encode(data.toJson());
|
||||
|
||||
class Document {
|
||||
Document({
|
||||
this.totalItemsCount,
|
||||
this.data,
|
||||
this.messageStatus,
|
||||
this.message,
|
||||
});
|
||||
|
||||
int? totalItemsCount;
|
||||
List<Datum>? data;
|
||||
int? messageStatus;
|
||||
String? message;
|
||||
|
||||
factory Document.fromJson(Map<String, dynamic> json) => Document(
|
||||
totalItemsCount: json["totalItemsCount"] == null ? null : json["totalItemsCount"],
|
||||
data: json["data"] == null ? null : List<Datum>.from(json["data"].map((x) => Datum.fromJson(x))),
|
||||
messageStatus: json["messageStatus"] == null ? null : json["messageStatus"],
|
||||
message: json["message"] == null ? null : json["message"],
|
||||
);
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
"totalItemsCount": totalItemsCount == null ? null : totalItemsCount,
|
||||
"data": data == null ? null : List<dynamic>.from(data!.map((x) => x.toJson())),
|
||||
"messageStatus": messageStatus == null ? null : messageStatus,
|
||||
"message": message == null ? null : message,
|
||||
};
|
||||
}
|
||||
|
||||
class Datum {
|
||||
Datum({
|
||||
this.id,
|
||||
this.serviceProviderId,
|
||||
this.documentId,
|
||||
this.documentUrl,
|
||||
this.status,
|
||||
this.comment,
|
||||
this.isActive,
|
||||
this.document,
|
||||
});
|
||||
|
||||
int? id;
|
||||
int? serviceProviderId;
|
||||
int? documentId;
|
||||
dynamic? documentUrl;
|
||||
int? status;
|
||||
dynamic? comment;
|
||||
bool? isActive;
|
||||
String? document;
|
||||
|
||||
factory Datum.fromJson(Map<String, dynamic> json) => Datum(
|
||||
id: json["id"] == null ? null : json["id"],
|
||||
serviceProviderId: json["serviceProviderID"] == null ? null : json["serviceProviderID"],
|
||||
documentId: json["documentID"] == null ? null : json["documentID"],
|
||||
documentUrl: json["documentURL"],
|
||||
status: json["status"] == null ? null : json["status"],
|
||||
comment: json["comment"],
|
||||
isActive: json["isActive"] == null ? null : json["isActive"],
|
||||
document: null,
|
||||
);
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
"id": id == null ? null : id,
|
||||
"serviceProviderID": serviceProviderId == null ? null : serviceProviderId,
|
||||
"documentID": documentId == null ? null : documentId,
|
||||
"documentURL": documentUrl,
|
||||
"status": status == null ? null : status,
|
||||
"comment": comment,
|
||||
"isActive": isActive == null ? null : isActive,
|
||||
};
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
class User {
|
||||
int id;
|
||||
|
||||
User(this.id, this.userName, this.userImage, this.createdDate);
|
||||
|
||||
String userName;
|
||||
String userImage;
|
||||
String createdDate;
|
||||
}
|
@ -0,0 +1,81 @@
|
||||
// To parse this JSON data, do
|
||||
//
|
||||
// final country = countryFromJson(jsonString);
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
Country countryFromJson(String str) => Country.fromJson(json.decode(str));
|
||||
|
||||
String countryToJson(Country data) => json.encode(data.toJson());
|
||||
|
||||
class Country {
|
||||
Country({
|
||||
this.totalItemsCount,
|
||||
this.data,
|
||||
this.messageStatus,
|
||||
this.message,
|
||||
});
|
||||
|
||||
int? totalItemsCount;
|
||||
List<CountryData>? data;
|
||||
int? messageStatus;
|
||||
String? message;
|
||||
|
||||
factory Country.fromJson(Map<String, dynamic> json) => Country(
|
||||
totalItemsCount: json["totalItemsCount"] == null ? null : json["totalItemsCount"],
|
||||
data: json["data"] == null ? null : List<CountryData>.from(json["data"].map((x) => CountryData.fromJson(x))),
|
||||
messageStatus: json["messageStatus"] == null ? null : json["messageStatus"],
|
||||
message: json["message"] == null ? null : json["message"],
|
||||
);
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
"totalItemsCount": totalItemsCount == null ? null : totalItemsCount,
|
||||
"data": data == null ? null : List<dynamic>.from(data!.map((x) => x.toJson())),
|
||||
"messageStatus": messageStatus == null ? null : messageStatus,
|
||||
"message": message == null ? null : message,
|
||||
};
|
||||
}
|
||||
|
||||
class CountryData {
|
||||
CountryData({
|
||||
this.id,
|
||||
this.countryName,
|
||||
this.countryNameN,
|
||||
this.nationality,
|
||||
this.nationalityN,
|
||||
this.countryCode,
|
||||
this.alpha2Code,
|
||||
this.alpha3Code,
|
||||
});
|
||||
|
||||
int? id;
|
||||
String? countryName;
|
||||
String? countryNameN;
|
||||
String? nationality;
|
||||
String? nationalityN;
|
||||
String? countryCode;
|
||||
String? alpha2Code;
|
||||
String? alpha3Code;
|
||||
|
||||
factory CountryData.fromJson(Map<String, dynamic> json) => CountryData(
|
||||
id: json["id"] == null ? null : json["id"],
|
||||
countryName: json["countryName"] == null ? null : json["countryName"],
|
||||
countryNameN: json["countryNameN"] == null ? null : json["countryNameN"],
|
||||
nationality: json["nationality"] == null ? null : json["nationality"],
|
||||
nationalityN: json["nationalityN"] == null ? null : json["nationalityN"],
|
||||
countryCode: json["countryCode"] == null ? null : json["countryCode"],
|
||||
alpha2Code: json["alpha2Code"] == null ? null : json["alpha2Code"],
|
||||
alpha3Code: json["alpha3Code"] == null ? null : json["alpha3Code"],
|
||||
);
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
"id": id == null ? null : id,
|
||||
"countryName": countryName == null ? null : countryName,
|
||||
"countryNameN": countryNameN == null ? null : countryNameN,
|
||||
"nationality": nationality == null ? null : nationality,
|
||||
"nationalityN": nationalityN == null ? null : nationalityN,
|
||||
"countryCode": countryCode == null ? null : countryCode,
|
||||
"alpha2Code": alpha2Code == null ? null : alpha2Code,
|
||||
"alpha3Code": alpha3Code == null ? null : alpha3Code,
|
||||
};
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
// To parse this JSON data, do
|
||||
//
|
||||
// final role = roleFromJson(jsonString);
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
Role roleFromJson(String str) => Role.fromJson(json.decode(str));
|
||||
|
||||
String roleToJson(Role data) => json.encode(data.toJson());
|
||||
|
||||
class Role {
|
||||
Role({
|
||||
this.totalItemsCount,
|
||||
this.data,
|
||||
this.messageStatus,
|
||||
this.message,
|
||||
});
|
||||
|
||||
int? totalItemsCount;
|
||||
List<RoleData>? data;
|
||||
int? messageStatus;
|
||||
String? message;
|
||||
|
||||
factory Role.fromJson(Map<String, dynamic> json) => Role(
|
||||
totalItemsCount: json["totalItemsCount"] == null ? null : json["totalItemsCount"],
|
||||
data: json["data"] == null ? null : List<RoleData>.from(json["data"].map((x) => RoleData.fromJson(x))),
|
||||
messageStatus: json["messageStatus"] == null ? null : json["messageStatus"],
|
||||
message: json["message"] == null ? null : json["message"],
|
||||
);
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
"totalItemsCount": totalItemsCount == null ? null : totalItemsCount,
|
||||
"data": data == null ? null : List<dynamic>.from(data!.map((x) => x.toJson())),
|
||||
"messageStatus": messageStatus == null ? null : messageStatus,
|
||||
"message": message == null ? null : message,
|
||||
};
|
||||
}
|
||||
|
||||
class RoleData {
|
||||
RoleData({
|
||||
this.id,
|
||||
this.roleName,
|
||||
this.roleNameN,
|
||||
this.isActive,
|
||||
});
|
||||
|
||||
int? id;
|
||||
String? roleName;
|
||||
String? roleNameN;
|
||||
bool? isActive;
|
||||
|
||||
factory RoleData.fromJson(Map<String, dynamic> json) => RoleData(
|
||||
id: json["id"] == null ? null : json["id"],
|
||||
roleName: json["roleName"] == null ? null : json["roleName"],
|
||||
roleNameN: json["roleNameN"] == null ? null : json["roleNameN"],
|
||||
isActive: json["isActive"] == null ? null : json["isActive"],
|
||||
);
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
"id": id == null ? null : id,
|
||||
"roleName": roleName == null ? null : roleName,
|
||||
"roleNameN": roleNameN == null ? null : roleNameN,
|
||||
"isActive": isActive == null ? null : isActive,
|
||||
};
|
||||
}
|
@ -0,0 +1,96 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:car_provider_app/api/client/profile_api_client.dart';
|
||||
import 'package:car_provider_app/classes/app_state.dart';
|
||||
import 'package:car_provider_app/models/profile/document.dart';
|
||||
import 'package:car_provider_app/widgets/txt_field.dart';
|
||||
import 'package:file_picker/file_picker.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:car_provider_app/extensions/int_extensions.dart';
|
||||
|
||||
class DefineLicensePage extends StatefulWidget {
|
||||
@override
|
||||
State<DefineLicensePage> createState() => _DefineLicensePageState();
|
||||
}
|
||||
|
||||
class _DefineLicensePageState extends State<DefineLicensePage> {
|
||||
Document? document;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
// TODO: implement initState
|
||||
super.initState();
|
||||
getDocuments();
|
||||
}
|
||||
|
||||
getDocuments() async {
|
||||
document = await ProfileApiClent().getServiceProviderDocument(AppState().getUser.data!.userInfo!.providerId ?? 0);
|
||||
setState(() {});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text("Define Licenses"),
|
||||
),
|
||||
body: Container(
|
||||
width: double.infinity,
|
||||
height: double.infinity,
|
||||
child: showWidget(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget showWidget() {
|
||||
if (document != null) {
|
||||
return document!.data!.length == 0
|
||||
? Text("Something went wrong")
|
||||
: ListView.separated(
|
||||
itemBuilder: (context, index) {
|
||||
return Row(
|
||||
children: [
|
||||
Flexible(
|
||||
child: TxtField(
|
||||
hint: "Select Attachment",
|
||||
value: document?.data![index].documentUrl ?? "",
|
||||
isNeedClickAll: true,
|
||||
maxLines: 2,
|
||||
),
|
||||
),
|
||||
IconButton(
|
||||
onPressed: () {
|
||||
selectFile(index);
|
||||
},
|
||||
icon: Icon(Icons.insert_link_rounded),
|
||||
)
|
||||
],
|
||||
);
|
||||
},
|
||||
separatorBuilder: (context, index) {
|
||||
return 12.height;
|
||||
},
|
||||
padding: EdgeInsets.all(12),
|
||||
itemCount: document!.data!.length,
|
||||
);
|
||||
} else {
|
||||
return Center(
|
||||
child: CircularProgressIndicator(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
selectFile(int index) async {
|
||||
FilePickerResult? result = await FilePicker.platform.pickFiles(type: FileType.custom, allowedExtensions: ['png', 'pdf', 'jpeg']);
|
||||
|
||||
if (result != null) {
|
||||
File file = File(result.files.single.path ?? "");
|
||||
|
||||
setState(() {
|
||||
document!.data![index].documentUrl = result.files.single.path ?? "";
|
||||
});
|
||||
} else {
|
||||
// User canceled the picker
|
||||
}
|
||||
}
|
||||
}
|