| @@ -0,0 +1,87 @@ | |||
| class ActionUIField { | |||
| int id; | |||
| String name; | |||
| String unit; | |||
| String description; | |||
| int activityTypeId; | |||
| int tbCustomerId; | |||
| int tbControlTypeId; | |||
| String tbControlTypeName; | |||
| int tbActivityExtendTypeId; | |||
| String tbActivityExtendTypeName; | |||
| String tbActivityExtendTypeExternalTable; | |||
| String tbActivityExtendTypeObjectType; | |||
| String tbActivityExtendTypeCondition; | |||
| String relationTable; | |||
| String foreignKey; | |||
| int isGuidelineUsing; | |||
| int isMandatory; | |||
| String groupName; | |||
| ActionUIField( | |||
| {this.id, | |||
| this.name, | |||
| this.unit, | |||
| this.description, | |||
| this.activityTypeId, | |||
| this.tbCustomerId, | |||
| this.tbControlTypeId, | |||
| this.tbControlTypeName, | |||
| this.tbActivityExtendTypeId, | |||
| this.tbActivityExtendTypeName, | |||
| this.tbActivityExtendTypeExternalTable, | |||
| this.tbActivityExtendTypeObjectType, | |||
| this.tbActivityExtendTypeCondition, | |||
| this.relationTable, | |||
| this.foreignKey, | |||
| this.isGuidelineUsing, | |||
| this.isMandatory, | |||
| this.groupName}); | |||
| ActionUIField.fromJson(Map<String, dynamic> json) { | |||
| id = json['id']; | |||
| name = json['name']; | |||
| unit = json['unit']; | |||
| description = json['description']; | |||
| activityTypeId = json['activityTypeId']; | |||
| tbCustomerId = json['tbCustomerId']; | |||
| tbControlTypeId = json['tbControlTypeId']; | |||
| tbControlTypeName = json['tbControlTypeName']; | |||
| tbActivityExtendTypeId = json['tbActivityExtendTypeId']; | |||
| tbActivityExtendTypeName = json['tbActivityExtendTypeName']; | |||
| tbActivityExtendTypeExternalTable = | |||
| json['tbActivityExtendTypeExternalTable']; | |||
| tbActivityExtendTypeObjectType = json['tbActivityExtendTypeObjectType']; | |||
| tbActivityExtendTypeCondition = json['tbActivityExtendTypeCondition']; | |||
| relationTable = json['relationTable']; | |||
| foreignKey = json['foreignKey']; | |||
| isGuidelineUsing = json['isGuidelineUsing']; | |||
| isMandatory = json['isMandatory']; | |||
| groupName = json['groupName']; | |||
| } | |||
| Map<String, dynamic> toJson() { | |||
| final Map<String, dynamic> data = new Map<String, dynamic>(); | |||
| data['id'] = this.id; | |||
| data['name'] = this.name; | |||
| data['unit'] = this.unit; | |||
| data['description'] = this.description; | |||
| data['activityTypeId'] = this.activityTypeId; | |||
| data['tbCustomerId'] = this.tbCustomerId; | |||
| data['tbControlTypeId'] = this.tbControlTypeId; | |||
| data['tbControlTypeName'] = this.tbControlTypeName; | |||
| data['tbActivityExtendTypeId'] = this.tbActivityExtendTypeId; | |||
| data['tbActivityExtendTypeName'] = this.tbActivityExtendTypeName; | |||
| data['tbActivityExtendTypeExternalTable'] = | |||
| this.tbActivityExtendTypeExternalTable; | |||
| data['tbActivityExtendTypeObjectType'] = | |||
| this.tbActivityExtendTypeObjectType; | |||
| data['tbActivityExtendTypeCondition'] = this.tbActivityExtendTypeCondition; | |||
| data['relationTable'] = this.relationTable; | |||
| data['foreignKey'] = this.foreignKey; | |||
| data['isGuidelineUsing'] = this.isGuidelineUsing; | |||
| data['isMandatory'] = this.isMandatory; | |||
| data['groupName'] = this.groupName; | |||
| return data; | |||
| } | |||
| } | |||
| @@ -0,0 +1,37 @@ | |||
| import 'ActionUIField.dart'; | |||
| import 'ActionUISupply.dart'; | |||
| class ActionUIForm { | |||
| List<ActionUIField> objectParameterDTOList; | |||
| List<ActionUISupply> activityExtendTypeDTOList; | |||
| ActionUIForm({this.objectParameterDTOList, this.activityExtendTypeDTOList}); | |||
| ActionUIForm.fromJson(Map<String, dynamic> json) { | |||
| if (json['objectParameterDTOList'] != null) { | |||
| objectParameterDTOList = new List<ActionUIField>(); | |||
| json['objectParameterDTOList'].forEach((v) { | |||
| objectParameterDTOList.add(new ActionUIField.fromJson(v)); | |||
| }); | |||
| } | |||
| if (json['activityExtendTypeDTOList'] != null) { | |||
| activityExtendTypeDTOList = new List<ActionUISupply>(); | |||
| json['activityExtendTypeDTOList'].forEach((v) { | |||
| activityExtendTypeDTOList.add(new ActionUISupply.fromJson(v)); | |||
| }); | |||
| } | |||
| } | |||
| Map<String, dynamic> toJson() { | |||
| final Map<String, dynamic> data = new Map<String, dynamic>(); | |||
| if (this.objectParameterDTOList != null) { | |||
| data['objectParameterDTOList'] = | |||
| this.objectParameterDTOList.map((v) => v.toJson()).toList(); | |||
| } | |||
| if (this.activityExtendTypeDTOList != null) { | |||
| data['activityExtendTypeDTOList'] = | |||
| this.activityExtendTypeDTOList.map((v) => v.toJson()).toList(); | |||
| } | |||
| return data; | |||
| } | |||
| } | |||
| @@ -0,0 +1,36 @@ | |||
| class ActionUISupply { | |||
| int id; | |||
| String name; | |||
| String externalTable; | |||
| int objectType; | |||
| String condition; | |||
| int activityTypeId; | |||
| ActionUISupply( | |||
| {this.id, | |||
| this.name, | |||
| this.externalTable, | |||
| this.objectType, | |||
| this.condition, | |||
| this.activityTypeId}); | |||
| ActionUISupply.fromJson(Map<String, dynamic> json) { | |||
| id = json['id']; | |||
| name = json['name']; | |||
| externalTable = json['externalTable']; | |||
| objectType = json['objectType']; | |||
| condition = json['condition']; | |||
| activityTypeId = json['activityTypeId']; | |||
| } | |||
| Map<String, dynamic> toJson() { | |||
| final Map<String, dynamic> data = new Map<String, dynamic>(); | |||
| data['id'] = this.id; | |||
| data['name'] = this.name; | |||
| data['externalTable'] = this.externalTable; | |||
| data['objectType'] = this.objectType; | |||
| data['condition'] = this.condition; | |||
| data['activityTypeId'] = this.activityTypeId; | |||
| return data; | |||
| } | |||
| } | |||
| @@ -10,6 +10,7 @@ import 'package:farm_tpf/custom_model/TbCropDTO.dart'; | |||
| import 'package:farm_tpf/custom_model/UpdateNoti.dart'; | |||
| import 'package:farm_tpf/custom_model/WaterType.dart'; | |||
| import 'package:farm_tpf/custom_model/account.dart'; | |||
| import 'package:farm_tpf/custom_model/action_form/ActionUIForm.dart'; | |||
| import 'package:farm_tpf/custom_model/password.dart'; | |||
| import 'package:farm_tpf/custom_model/user.dart'; | |||
| import 'package:farm_tpf/custom_model/user_request.dart'; | |||
| @@ -128,4 +129,8 @@ abstract class RestClient { | |||
| @Path() int cropId, | |||
| {@Path() int page = 0, | |||
| @Path() int size = 20}); | |||
| //NEW Activity implement | |||
| @GET('/api/display-object-param-dynamic-form/{idAction}') | |||
| Future<ActionUIForm> getActionUIForm( | |||
| @Path() idAction, @DioOptions() Options options); | |||
| } | |||
| @@ -9,7 +9,7 @@ part of 'rest_client.dart'; | |||
| class _RestClient implements RestClient { | |||
| _RestClient(this._dio, {this.baseUrl}) { | |||
| ArgumentError.checkNotNull(_dio, '_dio'); | |||
| this.baseUrl ??= 'https://smf.aztrace.vn'; | |||
| baseUrl ??= 'https://smf.aztrace.vn'; | |||
| } | |||
| final Dio _dio; | |||
| @@ -17,13 +17,14 @@ class _RestClient implements RestClient { | |||
| String baseUrl; | |||
| @override | |||
| login(userRequest) async { | |||
| Future<User> login(userRequest) async { | |||
| ArgumentError.checkNotNull(userRequest, 'userRequest'); | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| final _data = <String, dynamic>{}; | |||
| _data.addAll(userRequest?.toJson() ?? <String, dynamic>{}); | |||
| final Response<Map<String, dynamic>> _result = await _dio.request( | |||
| _data.removeWhere((k, v) => v == null); | |||
| final _result = await _dio.request<Map<String, dynamic>>( | |||
| '/api/authenticate', | |||
| queryParameters: queryParameters, | |||
| options: RequestOptions( | |||
| @@ -37,12 +38,11 @@ class _RestClient implements RestClient { | |||
| } | |||
| @override | |||
| getMe() async { | |||
| Future<Account> getMe() async { | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| final _data = <String, dynamic>{}; | |||
| final Response<Map<String, dynamic>> _result = await _dio.request( | |||
| '/api/account', | |||
| final _result = await _dio.request<Map<String, dynamic>>('/api/account', | |||
| queryParameters: queryParameters, | |||
| options: RequestOptions( | |||
| method: 'GET', | |||
| @@ -55,7 +55,7 @@ class _RestClient implements RestClient { | |||
| } | |||
| @override | |||
| forgotPassword(email) async { | |||
| Future<void> forgotPassword(email) async { | |||
| ArgumentError.checkNotNull(email, 'email'); | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| @@ -72,12 +72,13 @@ class _RestClient implements RestClient { | |||
| } | |||
| @override | |||
| resetPassword(password) async { | |||
| Future<void> resetPassword(password) async { | |||
| ArgumentError.checkNotNull(password, 'password'); | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| final _data = <String, dynamic>{}; | |||
| _data.addAll(password?.toJson() ?? <String, dynamic>{}); | |||
| _data.removeWhere((k, v) => v == null); | |||
| await _dio.request<void>('/api/account/reset-password/finish', | |||
| queryParameters: queryParameters, | |||
| options: RequestOptions( | |||
| @@ -90,12 +91,13 @@ class _RestClient implements RestClient { | |||
| } | |||
| @override | |||
| changePassword(password) async { | |||
| Future<void> changePassword(password) async { | |||
| ArgumentError.checkNotNull(password, 'password'); | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| final _data = <String, dynamic>{}; | |||
| _data.addAll(password?.toJson() ?? <String, dynamic>{}); | |||
| _data.removeWhere((k, v) => v == null); | |||
| await _dio.request<void>('/api/account/change-password', | |||
| queryParameters: queryParameters, | |||
| options: RequestOptions( | |||
| @@ -108,13 +110,14 @@ class _RestClient implements RestClient { | |||
| } | |||
| @override | |||
| updateProfile(account) async { | |||
| Future<Account> updateProfile(account) async { | |||
| ArgumentError.checkNotNull(account, 'account'); | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| final _data = <String, dynamic>{}; | |||
| _data.addAll(account?.toJson() ?? <String, dynamic>{}); | |||
| final Response<Map<String, dynamic>> _result = await _dio.request( | |||
| _data.removeWhere((k, v) => v == null); | |||
| final _result = await _dio.request<Map<String, dynamic>>( | |||
| '/api/update-my-profile', | |||
| queryParameters: queryParameters, | |||
| options: RequestOptions( | |||
| @@ -128,7 +131,7 @@ class _RestClient implements RestClient { | |||
| } | |||
| @override | |||
| getSupplies(type, {options, query = ""}) async { | |||
| Future<List<Supply>> getSupplies(type, {options, query = ""}) async { | |||
| ArgumentError.checkNotNull(type, 'type'); | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| @@ -137,7 +140,7 @@ class _RestClient implements RestClient { | |||
| final newOptions = newRequestOptions(options); | |||
| newOptions.extra.addAll(_extra); | |||
| newOptions.headers.addAll(<String, dynamic>{}); | |||
| final Response<List<dynamic>> _result = await _dio.request( | |||
| final _result = await _dio.request<List<dynamic>>( | |||
| '/api/list-supplies-in-warehouses/$type?q=$query', | |||
| queryParameters: queryParameters, | |||
| options: newOptions.merge(method: 'GET', baseUrl: baseUrl), | |||
| @@ -149,7 +152,7 @@ class _RestClient implements RestClient { | |||
| } | |||
| @override | |||
| updateFcmToken(token) async { | |||
| Future<void> updateFcmToken(token) async { | |||
| ArgumentError.checkNotNull(token, 'token'); | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| @@ -166,7 +169,7 @@ class _RestClient implements RestClient { | |||
| } | |||
| @override | |||
| deleteFcmToken(token) async { | |||
| Future<void> deleteFcmToken(token) async { | |||
| ArgumentError.checkNotNull(token, 'token'); | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| @@ -183,12 +186,12 @@ class _RestClient implements RestClient { | |||
| } | |||
| @override | |||
| getPlots({page = 0, size = 20, query = ""}) async { | |||
| Future<List<TbCropDTO>> getPlots({page = 0, size = 20, query = ""}) async { | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| queryParameters.removeWhere((k, v) => v == null); | |||
| final _data = <String, dynamic>{}; | |||
| final Response<List<dynamic>> _result = await _dio.request( | |||
| final _result = await _dio.request<List<dynamic>>( | |||
| '/api/tb-crops?page=$page&size=$size&sort=id,asc&query=$query', | |||
| queryParameters: queryParameters, | |||
| options: RequestOptions( | |||
| @@ -204,7 +207,7 @@ class _RestClient implements RestClient { | |||
| } | |||
| @override | |||
| getActionTypes({options}) async { | |||
| Future<List<ActionType>> getActionTypes({options}) async { | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| queryParameters.removeWhere((k, v) => v == null); | |||
| @@ -212,7 +215,7 @@ class _RestClient implements RestClient { | |||
| final newOptions = newRequestOptions(options); | |||
| newOptions.extra.addAll(_extra); | |||
| newOptions.headers.addAll(<String, dynamic>{}); | |||
| final Response<List<dynamic>> _result = await _dio.request( | |||
| final _result = await _dio.request<List<dynamic>>( | |||
| '/api/listActivityTypesOther', | |||
| queryParameters: queryParameters, | |||
| options: newOptions.merge(method: 'GET', baseUrl: baseUrl), | |||
| @@ -224,7 +227,7 @@ class _RestClient implements RestClient { | |||
| } | |||
| @override | |||
| getWaterTypes({options}) async { | |||
| Future<List<WaterType>> getWaterTypes({options}) async { | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| queryParameters.removeWhere((k, v) => v == null); | |||
| @@ -232,8 +235,7 @@ class _RestClient implements RestClient { | |||
| final newOptions = newRequestOptions(options); | |||
| newOptions.extra.addAll(_extra); | |||
| newOptions.headers.addAll(<String, dynamic>{}); | |||
| final Response<List<dynamic>> _result = await _dio.request( | |||
| '/api/water-types', | |||
| final _result = await _dio.request<List<dynamic>>('/api/water-types', | |||
| queryParameters: queryParameters, | |||
| options: newOptions.merge(method: 'GET', baseUrl: baseUrl), | |||
| data: _data); | |||
| @@ -244,7 +246,7 @@ class _RestClient implements RestClient { | |||
| } | |||
| @override | |||
| getHarvests({options}) async { | |||
| Future<List<Harvest>> getHarvests({options}) async { | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| queryParameters.removeWhere((k, v) => v == null); | |||
| @@ -252,8 +254,7 @@ class _RestClient implements RestClient { | |||
| final newOptions = newRequestOptions(options); | |||
| newOptions.extra.addAll(_extra); | |||
| newOptions.headers.addAll(<String, dynamic>{}); | |||
| final Response<List<dynamic>> _result = await _dio.request( | |||
| '/api/tb-harvests', | |||
| final _result = await _dio.request<List<dynamic>>('/api/tb-harvests', | |||
| queryParameters: queryParameters, | |||
| options: newOptions.merge(method: 'GET', baseUrl: baseUrl), | |||
| data: _data); | |||
| @@ -264,7 +265,7 @@ class _RestClient implements RestClient { | |||
| } | |||
| @override | |||
| getDeviceForActivity({options}) async { | |||
| Future<List<Device>> getDeviceForActivity({options}) async { | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| queryParameters.removeWhere((k, v) => v == null); | |||
| @@ -272,7 +273,7 @@ class _RestClient implements RestClient { | |||
| final newOptions = newRequestOptions(options); | |||
| newOptions.extra.addAll(_extra); | |||
| newOptions.headers.addAll(<String, dynamic>{}); | |||
| final Response<List<dynamic>> _result = await _dio.request( | |||
| final _result = await _dio.request<List<dynamic>>( | |||
| '/api/listDeviceForActivity', | |||
| queryParameters: queryParameters, | |||
| options: newOptions.merge(method: 'GET', baseUrl: baseUrl), | |||
| @@ -284,7 +285,7 @@ class _RestClient implements RestClient { | |||
| } | |||
| @override | |||
| updateAllNotification(status) async { | |||
| Future<void> updateAllNotification(status) async { | |||
| ArgumentError.checkNotNull(status, 'status'); | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| @@ -301,12 +302,13 @@ class _RestClient implements RestClient { | |||
| } | |||
| @override | |||
| updateNoti(updateNoti) async { | |||
| Future<void> updateNoti(updateNoti) async { | |||
| ArgumentError.checkNotNull(updateNoti, 'updateNoti'); | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| final _data = <String, dynamic>{}; | |||
| _data.addAll(updateNoti?.toJson() ?? <String, dynamic>{}); | |||
| _data.removeWhere((k, v) => v == null); | |||
| await _dio.request<void>('/api/notifications/update', | |||
| queryParameters: queryParameters, | |||
| options: RequestOptions( | |||
| @@ -319,7 +321,8 @@ class _RestClient implements RestClient { | |||
| } | |||
| @override | |||
| getCountries({page = 0, size = 400, query = '', options}) async { | |||
| Future<List<LocationUnit>> getCountries( | |||
| {page = 0, size = 400, query = '', options}) async { | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| queryParameters.removeWhere((k, v) => v == null); | |||
| @@ -327,7 +330,7 @@ class _RestClient implements RestClient { | |||
| final newOptions = newRequestOptions(options); | |||
| newOptions.extra.addAll(_extra); | |||
| newOptions.headers.addAll(<String, dynamic>{}); | |||
| final Response<List<dynamic>> _result = await _dio.request( | |||
| final _result = await _dio.request<List<dynamic>>( | |||
| '/api/tb-countries?page=$page&size=$size&query=$query&&sort=name,ASC', | |||
| queryParameters: queryParameters, | |||
| options: newOptions.merge(method: 'GET', baseUrl: baseUrl), | |||
| @@ -339,7 +342,8 @@ class _RestClient implements RestClient { | |||
| } | |||
| @override | |||
| getProvinces(countryId, {page = 0, size = 20, query = '', options}) async { | |||
| Future<List<LocationUnit>> getProvinces(countryId, | |||
| {page = 0, size = 20, query = '', options}) async { | |||
| ArgumentError.checkNotNull(countryId, 'countryId'); | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| @@ -348,7 +352,7 @@ class _RestClient implements RestClient { | |||
| final newOptions = newRequestOptions(options); | |||
| newOptions.extra.addAll(_extra); | |||
| newOptions.headers.addAll(<String, dynamic>{}); | |||
| final Response<List<dynamic>> _result = await _dio.request( | |||
| final _result = await _dio.request<List<dynamic>>( | |||
| '/api/tb-cities-by-country/$countryId?page=$page&size=$size&query=$query&&sort=name,ASC', | |||
| queryParameters: queryParameters, | |||
| options: newOptions.merge(method: 'GET', baseUrl: baseUrl), | |||
| @@ -360,7 +364,8 @@ class _RestClient implements RestClient { | |||
| } | |||
| @override | |||
| getDistricts(provinceId, {page = 0, size = 20, query = '', options}) async { | |||
| Future<List<LocationUnit>> getDistricts(provinceId, | |||
| {page = 0, size = 20, query = '', options}) async { | |||
| ArgumentError.checkNotNull(provinceId, 'provinceId'); | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| @@ -369,7 +374,7 @@ class _RestClient implements RestClient { | |||
| final newOptions = newRequestOptions(options); | |||
| newOptions.extra.addAll(_extra); | |||
| newOptions.headers.addAll(<String, dynamic>{}); | |||
| final Response<List<dynamic>> _result = await _dio.request( | |||
| final _result = await _dio.request<List<dynamic>>( | |||
| '/api/tb-districts-by-city/$provinceId?page=$page&size=$size&query=$query&&sort=name,ASC', | |||
| queryParameters: queryParameters, | |||
| options: newOptions.merge(method: 'GET', baseUrl: baseUrl), | |||
| @@ -381,7 +386,8 @@ class _RestClient implements RestClient { | |||
| } | |||
| @override | |||
| getWards(districtId, {page = 0, size = 20, query = '', options}) async { | |||
| Future<List<LocationUnit>> getWards(districtId, | |||
| {page = 0, size = 20, query = '', options}) async { | |||
| ArgumentError.checkNotNull(districtId, 'districtId'); | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| @@ -390,7 +396,7 @@ class _RestClient implements RestClient { | |||
| final newOptions = newRequestOptions(options); | |||
| newOptions.extra.addAll(_extra); | |||
| newOptions.headers.addAll(<String, dynamic>{}); | |||
| final Response<List<dynamic>> _result = await _dio.request( | |||
| final _result = await _dio.request<List<dynamic>>( | |||
| '/api/tb-wards-by-district/$districtId?page=$page&size=$size&query=$query&&sort=name,ASC', | |||
| queryParameters: queryParameters, | |||
| options: newOptions.merge(method: 'GET', baseUrl: baseUrl), | |||
| @@ -402,13 +408,13 @@ class _RestClient implements RestClient { | |||
| } | |||
| @override | |||
| getCropDetail(cropId, {page = 0, size = 20}) async { | |||
| Future<CropPlot> getCropDetail(cropId, {page = 0, size = 20}) async { | |||
| ArgumentError.checkNotNull(cropId, 'cropId'); | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| queryParameters.removeWhere((k, v) => v == null); | |||
| final _data = <String, dynamic>{}; | |||
| final Response<Map<String, dynamic>> _result = await _dio.request( | |||
| final _result = await _dio.request<Map<String, dynamic>>( | |||
| '/api/tb-crops-detail-for-app/$cropId?page=$page&size=$size&sort=executeDate,DESC', | |||
| queryParameters: queryParameters, | |||
| options: RequestOptions( | |||
| @@ -422,13 +428,13 @@ class _RestClient implements RestClient { | |||
| } | |||
| @override | |||
| getCropDetailByCode(cropCode, {page = 0, size = 20}) async { | |||
| Future<CropPlot> getCropDetailByCode(cropCode, {page = 0, size = 20}) async { | |||
| ArgumentError.checkNotNull(cropCode, 'cropCode'); | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| queryParameters.removeWhere((k, v) => v == null); | |||
| final _data = <String, dynamic>{}; | |||
| final Response<Map<String, dynamic>> _result = await _dio.request( | |||
| final _result = await _dio.request<Map<String, dynamic>>( | |||
| '/api/tb-crops-scan-qrCode/$cropCode?page=$page&size=$size&sort=executeDate,DESC', | |||
| queryParameters: queryParameters, | |||
| options: RequestOptions( | |||
| @@ -442,12 +448,13 @@ class _RestClient implements RestClient { | |||
| } | |||
| @override | |||
| updateCrop(crop) async { | |||
| Future<void> updateCrop(crop) async { | |||
| ArgumentError.checkNotNull(crop, 'crop'); | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| final _data = <String, dynamic>{}; | |||
| _data.addAll(crop?.toJson() ?? <String, dynamic>{}); | |||
| _data.removeWhere((k, v) => v == null); | |||
| await _dio.request<void>('/api/tb-crops', | |||
| queryParameters: queryParameters, | |||
| options: RequestOptions( | |||
| @@ -460,11 +467,12 @@ class _RestClient implements RestClient { | |||
| } | |||
| @override | |||
| getDevices({query}) async { | |||
| Future<List<Device>> getDevices({query}) async { | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| queryParameters.removeWhere((k, v) => v == null); | |||
| final _data = <String, dynamic>{}; | |||
| final Response<List<dynamic>> _result = await _dio.request( | |||
| final _result = await _dio.request<List<dynamic>>( | |||
| '/api/listDeviceOfUserCustomers?query=$query', | |||
| queryParameters: queryParameters, | |||
| options: RequestOptions( | |||
| @@ -480,13 +488,14 @@ class _RestClient implements RestClient { | |||
| } | |||
| @override | |||
| getEnvironmentParameters(cropId, {page = 0, size = 20}) async { | |||
| Future<List<EnvironmentParameter>> getEnvironmentParameters(cropId, | |||
| {page = 0, size = 20}) async { | |||
| ArgumentError.checkNotNull(cropId, 'cropId'); | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| queryParameters.removeWhere((k, v) => v == null); | |||
| final _data = <String, dynamic>{}; | |||
| final Response<List<dynamic>> _result = await _dio.request( | |||
| final _result = await _dio.request<List<dynamic>>( | |||
| '/api/list-environment-updates-display/$cropId?page=$page&size=$size', | |||
| queryParameters: queryParameters, | |||
| options: RequestOptions( | |||
| @@ -502,6 +511,25 @@ class _RestClient implements RestClient { | |||
| return value; | |||
| } | |||
| @override | |||
| Future<ActionUIForm> getActionUIForm(idAction, options) async { | |||
| ArgumentError.checkNotNull(idAction, 'idAction'); | |||
| ArgumentError.checkNotNull(options, 'options'); | |||
| const _extra = <String, dynamic>{}; | |||
| final queryParameters = <String, dynamic>{}; | |||
| final _data = <String, dynamic>{}; | |||
| final newOptions = newRequestOptions(options); | |||
| newOptions.extra.addAll(_extra); | |||
| newOptions.headers.addAll(<String, dynamic>{}); | |||
| final _result = await _dio.request<Map<String, dynamic>>( | |||
| '/api/display-object-param-dynamic-form/$idAction', | |||
| queryParameters: queryParameters, | |||
| options: newOptions.merge(method: 'GET', baseUrl: baseUrl), | |||
| data: _data); | |||
| final value = ActionUIForm.fromJson(_result.data); | |||
| return value; | |||
| } | |||
| RequestOptions newRequestOptions(Options options) { | |||
| if (options is RequestOptions) { | |||
| return options; | |||
| @@ -13,6 +13,7 @@ import 'package:farm_tpf/custom_model/Supply.dart'; | |||
| import 'package:farm_tpf/custom_model/TbCropDTO.dart'; | |||
| import 'package:farm_tpf/custom_model/UpdateNoti.dart'; | |||
| import 'package:farm_tpf/custom_model/WaterType.dart'; | |||
| import 'package:farm_tpf/custom_model/action_form/ActionUIForm.dart'; | |||
| import 'package:farm_tpf/custom_model/user.dart'; | |||
| import 'package:farm_tpf/custom_model/user_request.dart'; | |||
| import 'package:farm_tpf/data/api/dio_provider.dart'; | |||
| @@ -226,4 +227,11 @@ class Repository { | |||
| onError(e); | |||
| } | |||
| } | |||
| Future<ActionUIForm> getActionUIForm({@required int idAction}) { | |||
| final client = RestClient(dio); | |||
| var op = buildConfigurableCacheOptions( | |||
| forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache)); | |||
| return client.getActionUIForm(idAction, op); | |||
| } | |||
| } | |||
| @@ -0,0 +1,23 @@ | |||
| import 'package:bloc/bloc.dart'; | |||
| import 'package:dio/dio.dart'; | |||
| import 'package:equatable/equatable.dart'; | |||
| import 'package:farm_tpf/data/api/app_exception.dart'; | |||
| import 'package:farm_tpf/data/repository/repository.dart'; | |||
| import 'package:meta/meta.dart'; | |||
| part 'action_ui_state.dart'; | |||
| class ActionUiCubit extends Cubit<ActionUiState> { | |||
| final Repository repository; | |||
| ActionUiCubit({@required this.repository}) : super(ActionUiInitial()); | |||
| Future<void> getActionUIForm(int idAction) async { | |||
| try { | |||
| emit(ActionUiLoading()); | |||
| var result = await repository.getActionUIForm(idAction: idAction); | |||
| emit(ActionUiSuccess(item: result)); | |||
| } on DioError catch (e) { | |||
| emit(ActionUiFailure(errorString: AppException.handleError(e))); | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,26 @@ | |||
| part of 'action_ui_cubit.dart'; | |||
| abstract class ActionUiState extends Equatable { | |||
| const ActionUiState(); | |||
| @override | |||
| List<Object> get props => []; | |||
| } | |||
| class ActionUiInitial extends ActionUiState {} | |||
| class ActionUiLoading extends ActionUiState {} | |||
| class ActionUiFailure extends ActionUiState { | |||
| final String errorString; | |||
| ActionUiFailure({@required this.errorString}); | |||
| } | |||
| class ActionUiSuccess<T> extends ActionUiState { | |||
| final T item; | |||
| ActionUiSuccess({this.item}); | |||
| @override | |||
| List<Object> get props => [item]; | |||
| } | |||
| @@ -0,0 +1,202 @@ | |||
| import 'package:farm_tpf/data/repository/repository.dart'; | |||
| import 'package:farm_tpf/presentation/custom_widgets/app_bar_widget.dart'; | |||
| import 'package:farm_tpf/presentation/custom_widgets/bloc/media_helper_bloc.dart'; | |||
| import 'package:farm_tpf/presentation/custom_widgets/button_widget.dart'; | |||
| import 'package:farm_tpf/presentation/custom_widgets/widget_field_time_picker.dart'; | |||
| import 'package:farm_tpf/presentation/custom_widgets/widget_loading.dart'; | |||
| import 'package:farm_tpf/presentation/custom_widgets/widget_media_picker.dart'; | |||
| import 'package:farm_tpf/presentation/screens/actions/cubit/action_ui_cubit.dart'; | |||
| import 'package:farm_tpf/utils/pref.dart'; | |||
| import 'package:farm_tpf/utils/validators.dart'; | |||
| import 'package:flutter/material.dart'; | |||
| import 'package:flutter_bloc/flutter_bloc.dart'; | |||
| import 'package:get/get.dart'; | |||
| import 'package:keyboard_dismisser/keyboard_dismisser.dart'; | |||
| import 'state_management_helper/change_file_controller.dart'; | |||
| class ActionScreen extends StatefulWidget { | |||
| final int idAction; | |||
| final String title; | |||
| ActionScreen({@required this.idAction, @required this.title}); | |||
| @override | |||
| _ActionScreenState createState() => _ActionScreenState(); | |||
| } | |||
| class _ActionScreenState extends State<ActionScreen> { | |||
| final _scaffoldKey = GlobalKey<ScaffoldState>(); | |||
| var _formKey = GlobalKey<FormState>(); | |||
| var pref = LocalPref(); | |||
| final _executeByController = TextEditingController(); | |||
| DateTime executeTime = DateTime.now(); | |||
| List<String> filePaths = List<String>(); | |||
| var changeFileController = Get.put(ChangeFileController()); | |||
| Future<Null> getSharedPrefs() async { | |||
| var currentFullName = await pref.getString(DATA_CONST.CURRENT_FULL_NAME); | |||
| _executeByController.text = currentFullName ?? ""; | |||
| } | |||
| @override | |||
| void initState() { | |||
| super.initState(); | |||
| getSharedPrefs(); | |||
| } | |||
| _validateInputs() async { | |||
| if (_formKey.currentState.validate()) { | |||
| _formKey.currentState.save(); | |||
| LoadingDialog.showLoadingDialog(context); | |||
| filePaths = Get.find<ChangeFileController>().newFiles; | |||
| //Create request general model | |||
| try { | |||
| //ADD NEW | |||
| //Update | |||
| } catch (e) { | |||
| LoadingDialog.hideLoadingDialog(context); | |||
| print(e.toString()); | |||
| } | |||
| } else { | |||
| // | |||
| } | |||
| } | |||
| Widget _btnExecuteTimePicker() { | |||
| return WidgetFieldDateTimePicker( | |||
| initDateTime: executeTime, | |||
| onUpdateDateTime: (selectedDate) { | |||
| // | |||
| }); | |||
| } | |||
| Widget _executeByField() { | |||
| return TextFormField( | |||
| keyboardType: TextInputType.text, | |||
| decoration: InputDecoration(labelText: "Người thực hiện"), | |||
| enabled: false, | |||
| controller: _executeByController, | |||
| onSaved: (newValue) {}, | |||
| ); | |||
| } | |||
| @override | |||
| Widget build(BuildContext context) => KeyboardDismisser( | |||
| gestures: [ | |||
| GestureType.onTap, | |||
| GestureType.onPanUpdateDownDirection, | |||
| ], | |||
| child: Scaffold( | |||
| backgroundColor: Colors.white, | |||
| key: _scaffoldKey, | |||
| appBar: AppBarWidget( | |||
| isBack: true, | |||
| action: InkWell( | |||
| child: Text( | |||
| 'Lưu', | |||
| style: TextStyle( | |||
| color: Colors.red, fontWeight: FontWeight.normal), | |||
| ), | |||
| onTap: () {}, | |||
| ), | |||
| ), | |||
| body: KeyboardDismisser( | |||
| child: MultiBlocProvider( | |||
| providers: [ | |||
| BlocProvider<ActionUiCubit>( | |||
| create: (context) => | |||
| ActionUiCubit(repository: Repository()) | |||
| ..getActionUIForm(widget.idAction)), | |||
| BlocProvider<MediaHelperBloc>( | |||
| create: (context) => | |||
| MediaHelperBloc()..add(ChangeListMedia(items: [])), | |||
| ) | |||
| ], | |||
| child: Form( | |||
| key: _formKey, | |||
| child: SafeArea( | |||
| child: SingleChildScrollView( | |||
| child: BlocConsumer<ActionUiCubit, ActionUiState>( | |||
| listener: (context, state) async { | |||
| if (state is ActionUiLoading) { | |||
| LoadingDialog.hideLoadingDialog(context); | |||
| } else if (state is ActionUiSuccess) { | |||
| LoadingDialog.hideLoadingDialog(context); | |||
| } else if (state is ActionUiFailure) { | |||
| LoadingDialog.showLoadingDialog(context); | |||
| } | |||
| }, | |||
| builder: (context, state) { | |||
| return Column( | |||
| children: [ | |||
| Padding( | |||
| padding: const EdgeInsets.all(8.0), | |||
| child: Column( | |||
| children: <Widget>[ | |||
| Container( | |||
| width: double.infinity, | |||
| child: Text( | |||
| "Ngày thực hiện *", | |||
| style: TextStyle( | |||
| color: Colors.black54, | |||
| fontSize: 13.0), | |||
| ), | |||
| ), | |||
| _btnExecuteTimePicker(), | |||
| SizedBox( | |||
| height: 8.0, | |||
| ), | |||
| _executeByField(), | |||
| SizedBox( | |||
| height: 8.0, | |||
| ), | |||
| ], | |||
| ), | |||
| ), | |||
| Container( | |||
| width: double.infinity, | |||
| height: 16, | |||
| color: Colors.grey[200], | |||
| ), | |||
| BlocBuilder<MediaHelperBloc, MediaHelperState>( | |||
| builder: (context, state) { | |||
| if (state is MediaHelperSuccess) { | |||
| return WidgetMediaPicker( | |||
| currentItems: state.items, | |||
| onChangeFiles: (newPathFiles, | |||
| deletePathFiles) async { | |||
| Get.find<ChangeFileController>() | |||
| .change(newPathFiles, | |||
| deletePathFiles); | |||
| }); | |||
| } else { | |||
| return Center( | |||
| child: CircularProgressIndicator()); | |||
| } | |||
| }), | |||
| Padding( | |||
| padding: const EdgeInsets.all(8.0), | |||
| child: ButtonWidget( | |||
| title: 'CẬP NHẬT', | |||
| onPressed: () { | |||
| FocusScopeNode currentFocus = | |||
| FocusScope.of(context); | |||
| if (!currentFocus.hasPrimaryFocus) { | |||
| currentFocus.unfocus(); | |||
| } | |||
| _validateInputs(); | |||
| }), | |||
| ), | |||
| ], | |||
| ); | |||
| }, | |||
| ), | |||
| ), | |||
| )), | |||
| )))); | |||
| @override | |||
| void dispose() { | |||
| _executeByController.dispose(); | |||
| super.dispose(); | |||
| } | |||
| } | |||
| @@ -3,6 +3,7 @@ import 'package:farm_tpf/custom_model/ActionType.dart'; | |||
| import 'package:farm_tpf/data/repository/repository.dart'; | |||
| import 'package:farm_tpf/models/index.dart'; | |||
| import 'package:farm_tpf/presentation/custom_widgets/loading_list_page.dart'; | |||
| import 'package:farm_tpf/presentation/screens/actions/sc_action.dart'; | |||
| import 'package:farm_tpf/presentation/screens/plot_detail/bloc/cubit/plot_action_type_cubit.dart'; | |||
| import 'package:farm_tpf/utils/const_assets.dart'; | |||
| import 'package:farm_tpf/utils/const_color.dart'; | |||
| @@ -111,8 +112,8 @@ class _PlotActionScreenState extends State<PlotActionScreen> | |||
| Widget _createActionButtons(ActionType actionType, BuildContext _context) { | |||
| return GestureDetector( | |||
| onTap: () { | |||
| // Navigator.of(context).push( | |||
| // MaterialPageRoute(builder: (context) => actionType.listScreen)); | |||
| Get.to(ActionScreen( | |||
| idAction: actionType.id, title: actionType.description)); | |||
| }, | |||
| child: Container( | |||
| margin: EdgeInsets.all(8), | |||
| @@ -7,14 +7,14 @@ packages: | |||
| name: _fe_analyzer_shared | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "6.0.0" | |||
| version: "14.0.0" | |||
| analyzer: | |||
| dependency: transitive | |||
| description: | |||
| name: analyzer | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.39.14" | |||
| version: "0.41.1" | |||
| args: | |||
| dependency: transitive | |||
| description: | |||
| @@ -35,7 +35,7 @@ packages: | |||
| name: badges | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "1.1.3" | |||
| version: "1.1.6" | |||
| barcode_scan: | |||
| dependency: "direct main" | |||
| description: | |||
| @@ -49,7 +49,7 @@ packages: | |||
| name: bloc | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "6.0.3" | |||
| version: "6.1.1" | |||
| boolean_selector: | |||
| dependency: transitive | |||
| description: | |||
| @@ -63,14 +63,14 @@ packages: | |||
| name: build | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "1.3.0" | |||
| version: "1.6.0" | |||
| build_config: | |||
| dependency: transitive | |||
| description: | |||
| name: build_config | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.4.2" | |||
| version: "0.4.5" | |||
| build_daemon: | |||
| dependency: transitive | |||
| description: | |||
| @@ -84,21 +84,21 @@ packages: | |||
| name: build_resolvers | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "1.3.11" | |||
| version: "1.5.1" | |||
| build_runner: | |||
| dependency: "direct dev" | |||
| description: | |||
| name: build_runner | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "1.10.1" | |||
| version: "1.10.11" | |||
| build_runner_core: | |||
| dependency: transitive | |||
| description: | |||
| name: build_runner_core | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "6.0.1" | |||
| version: "6.1.5" | |||
| built_collection: | |||
| dependency: transitive | |||
| description: | |||
| @@ -119,14 +119,14 @@ packages: | |||
| name: cached_network_image | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "2.3.2+1" | |||
| version: "2.3.3" | |||
| camera: | |||
| dependency: "direct main" | |||
| description: | |||
| name: camera | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.5.8+5" | |||
| version: "0.5.8+17" | |||
| change_app_package_name: | |||
| dependency: "direct main" | |||
| description: | |||
| @@ -154,14 +154,14 @@ packages: | |||
| name: checked_yaml | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "1.0.2" | |||
| version: "1.0.4" | |||
| cli_util: | |||
| dependency: transitive | |||
| description: | |||
| name: cli_util | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.1.4" | |||
| version: "0.2.0" | |||
| clock: | |||
| dependency: transitive | |||
| description: | |||
| @@ -175,7 +175,7 @@ packages: | |||
| name: code_builder | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "3.4.1" | |||
| version: "3.5.0" | |||
| collection: | |||
| dependency: transitive | |||
| description: | |||
| @@ -197,13 +197,6 @@ packages: | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "2.1.5" | |||
| csslib: | |||
| dependency: transitive | |||
| description: | |||
| name: csslib | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.16.2" | |||
| cupertino_icons: | |||
| dependency: "direct main" | |||
| description: | |||
| @@ -217,7 +210,7 @@ packages: | |||
| name: dart_style | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "1.3.6" | |||
| version: "1.3.10" | |||
| dio: | |||
| dependency: "direct main" | |||
| description: | |||
| @@ -231,7 +224,7 @@ packages: | |||
| name: dio_http_cache | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.2.9" | |||
| version: "0.2.11" | |||
| equatable: | |||
| dependency: "direct main" | |||
| description: | |||
| @@ -246,6 +239,13 @@ packages: | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "1.2.0-nullsafety.1" | |||
| ffi: | |||
| dependency: transitive | |||
| description: | |||
| name: ffi | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.1.3" | |||
| file: | |||
| dependency: transitive | |||
| description: | |||
| @@ -259,42 +259,35 @@ packages: | |||
| name: file_picker | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "2.0.7" | |||
| firebase: | |||
| dependency: transitive | |||
| description: | |||
| name: firebase | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "7.3.0" | |||
| version: "2.1.5" | |||
| firebase_core: | |||
| dependency: transitive | |||
| description: | |||
| name: firebase_core | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.5.0" | |||
| version: "0.5.3" | |||
| firebase_core_platform_interface: | |||
| dependency: transitive | |||
| description: | |||
| name: firebase_core_platform_interface | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "2.0.0" | |||
| version: "2.1.0" | |||
| firebase_core_web: | |||
| dependency: transitive | |||
| description: | |||
| name: firebase_core_web | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.2.0" | |||
| version: "0.2.1+1" | |||
| firebase_messaging: | |||
| dependency: "direct main" | |||
| description: | |||
| name: firebase_messaging | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "7.0.0" | |||
| version: "7.0.3" | |||
| fixnum: | |||
| dependency: transitive | |||
| description: | |||
| @@ -313,7 +306,7 @@ packages: | |||
| name: flutter_bloc | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "6.0.5" | |||
| version: "6.1.1" | |||
| flutter_blurhash: | |||
| dependency: transitive | |||
| description: | |||
| @@ -348,7 +341,7 @@ packages: | |||
| name: flutter_plugin_android_lifecycle | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "1.0.8" | |||
| version: "1.0.11" | |||
| flutter_svg: | |||
| dependency: "direct main" | |||
| description: | |||
| @@ -372,21 +365,21 @@ packages: | |||
| name: font_awesome_flutter | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "8.8.1" | |||
| version: "8.11.0" | |||
| formz: | |||
| dependency: "direct main" | |||
| description: | |||
| name: formz | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.3.0" | |||
| version: "0.3.2" | |||
| get: | |||
| dependency: "direct main" | |||
| description: | |||
| name: get | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "3.10.1" | |||
| version: "3.24.0" | |||
| glob: | |||
| dependency: transitive | |||
| description: | |||
| @@ -408,13 +401,6 @@ packages: | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.2.0" | |||
| html: | |||
| dependency: transitive | |||
| description: | |||
| name: html | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.14.0+3" | |||
| http: | |||
| dependency: "direct main" | |||
| description: | |||
| @@ -463,14 +449,14 @@ packages: | |||
| name: json_annotation | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "3.0.1" | |||
| version: "3.1.1" | |||
| json_serializable: | |||
| dependency: "direct dev" | |||
| description: | |||
| name: json_serializable | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "3.4.1" | |||
| version: "3.5.1" | |||
| keyboard_dismisser: | |||
| dependency: "direct main" | |||
| description: | |||
| @@ -519,14 +505,14 @@ packages: | |||
| name: node_interop | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "1.1.1" | |||
| version: "1.2.1" | |||
| node_io: | |||
| dependency: transitive | |||
| description: | |||
| name: node_io | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "1.1.1" | |||
| version: "1.2.0" | |||
| octo_image: | |||
| dependency: transitive | |||
| description: | |||
| @@ -547,7 +533,7 @@ packages: | |||
| name: package_info | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.4.3" | |||
| version: "0.4.3+2" | |||
| path: | |||
| dependency: transitive | |||
| description: | |||
| @@ -575,7 +561,7 @@ packages: | |||
| name: path_provider | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "1.6.14" | |||
| version: "1.6.24" | |||
| path_provider_linux: | |||
| dependency: transitive | |||
| description: | |||
| @@ -589,14 +575,21 @@ packages: | |||
| name: path_provider_macos | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.0.4+4" | |||
| version: "0.0.4+6" | |||
| path_provider_platform_interface: | |||
| dependency: transitive | |||
| description: | |||
| name: path_provider_platform_interface | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "1.0.3" | |||
| version: "1.0.4" | |||
| path_provider_windows: | |||
| dependency: transitive | |||
| description: | |||
| name: path_provider_windows | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.0.4+3" | |||
| pattern_formatter: | |||
| dependency: "direct main" | |||
| description: | |||
| @@ -610,7 +603,7 @@ packages: | |||
| name: pedantic | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "1.9.0" | |||
| version: "1.9.2" | |||
| petitparser: | |||
| dependency: transitive | |||
| description: | |||
| @@ -631,7 +624,7 @@ packages: | |||
| name: plugin_platform_interface | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "1.0.2" | |||
| version: "1.0.3" | |||
| pool: | |||
| dependency: transitive | |||
| description: | |||
| @@ -652,14 +645,14 @@ packages: | |||
| name: protobuf | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "1.0.1" | |||
| version: "1.1.0" | |||
| provider: | |||
| dependency: transitive | |||
| description: | |||
| name: provider | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "4.3.2+2" | |||
| version: "4.3.2+3" | |||
| pub_semver: | |||
| dependency: transitive | |||
| description: | |||
| @@ -673,28 +666,28 @@ packages: | |||
| name: pubspec_parse | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.1.5" | |||
| version: "0.1.7" | |||
| quiver: | |||
| dependency: transitive | |||
| description: | |||
| name: quiver | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "2.1.3" | |||
| version: "2.1.5" | |||
| retrofit: | |||
| dependency: transitive | |||
| description: | |||
| name: retrofit | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "1.3.4" | |||
| version: "1.3.4+1" | |||
| retrofit_generator: | |||
| dependency: "direct dev" | |||
| description: | |||
| name: retrofit_generator | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "1.3.7+6" | |||
| version: "1.4.1+1" | |||
| rflutter_alert: | |||
| dependency: "direct main" | |||
| description: | |||
| @@ -715,21 +708,21 @@ packages: | |||
| name: shared_preferences | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.5.10" | |||
| version: "0.5.12+4" | |||
| shared_preferences_linux: | |||
| dependency: transitive | |||
| description: | |||
| name: shared_preferences_linux | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.0.2+2" | |||
| version: "0.0.2+4" | |||
| shared_preferences_macos: | |||
| dependency: transitive | |||
| description: | |||
| name: shared_preferences_macos | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.0.1+10" | |||
| version: "0.0.1+11" | |||
| shared_preferences_platform_interface: | |||
| dependency: transitive | |||
| description: | |||
| @@ -744,6 +737,13 @@ packages: | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.1.2+7" | |||
| shared_preferences_windows: | |||
| dependency: transitive | |||
| description: | |||
| name: shared_preferences_windows | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.0.1+3" | |||
| shelf: | |||
| dependency: transitive | |||
| description: | |||
| @@ -764,7 +764,7 @@ packages: | |||
| name: shimmer | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "1.1.1" | |||
| version: "1.1.2" | |||
| sky_engine: | |||
| dependency: transitive | |||
| description: flutter | |||
| @@ -776,7 +776,7 @@ packages: | |||
| name: source_gen | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.9.6" | |||
| version: "0.9.10+1" | |||
| source_span: | |||
| dependency: transitive | |||
| description: | |||
| @@ -790,7 +790,7 @@ packages: | |||
| name: sqflite | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "1.3.1+1" | |||
| version: "1.3.2+1" | |||
| sqflite_common: | |||
| dependency: transitive | |||
| description: | |||
| @@ -853,7 +853,7 @@ packages: | |||
| name: timing | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.1.1+2" | |||
| version: "0.1.1+3" | |||
| tuple: | |||
| dependency: transitive | |||
| description: | |||
| @@ -888,21 +888,21 @@ packages: | |||
| name: video_player | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.10.12+2" | |||
| version: "0.10.12+5" | |||
| video_player_platform_interface: | |||
| dependency: transitive | |||
| description: | |||
| name: video_player_platform_interface | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "2.1.1" | |||
| version: "2.2.0" | |||
| video_player_web: | |||
| dependency: transitive | |||
| description: | |||
| name: video_player_web | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.1.3+2" | |||
| version: "0.1.4+1" | |||
| watcher: | |||
| dependency: transitive | |||
| description: | |||
| @@ -917,13 +917,20 @@ packages: | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "1.1.0" | |||
| win32: | |||
| dependency: transitive | |||
| description: | |||
| name: win32 | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "1.7.4" | |||
| xdg_directories: | |||
| dependency: transitive | |||
| description: | |||
| name: xdg_directories | |||
| url: "https://pub.dartlang.org" | |||
| source: hosted | |||
| version: "0.1.0" | |||
| version: "0.1.2" | |||
| xml: | |||
| dependency: transitive | |||
| description: | |||
| @@ -939,5 +946,5 @@ packages: | |||
| source: hosted | |||
| version: "2.2.1" | |||
| sdks: | |||
| dart: ">=2.10.0-110 <2.11.0" | |||
| flutter: ">=1.20.0 <2.0.0" | |||
| dart: ">=2.10.2 <2.11.0" | |||
| flutter: ">=1.22.2 <2.0.0" | |||