Browse Source

update plot

master
daivph 5 years ago
parent
commit
1945dff4b1
12 changed files with 340 additions and 56 deletions
  1. +1
    -0
      ios/Flutter/.last_build_id
  2. +0
    -3
      ios/Runner.xcodeproj/project.pbxproj
  3. +3
    -0
      lib/data/api/rest_client.dart
  4. +246
    -0
      lib/data/api/rest_client.g.dart
  5. +5
    -0
      lib/data/repository/repository.dart
  6. +1
    -1
      lib/models/ActionType.g.dart
  7. +1
    -1
      lib/models/Crop.g.dart
  8. +1
    -1
      lib/models/OtherAction.g.dart
  9. +2
    -2
      lib/presentation/custom_widgets/widget_toast.dart
  10. +38
    -2
      lib/presentation/screens/plot_detail/sc_plot_information.dart
  11. +3
    -0
      lib/utils/const_string.dart
  12. +39
    -46
      pubspec.lock

+ 1
- 0
ios/Flutter/.last_build_id View File

@@ -0,0 +1 @@
eb141365fb69a4e0decadd2584d53516

+ 0
- 3
ios/Runner.xcodeproj/project.pbxproj View File

@@ -314,7 +314,6 @@
/* Begin XCBuildConfiguration section */
249021D3217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
@@ -396,7 +395,6 @@
};
97C147031CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
@@ -452,7 +450,6 @@
};
97C147041CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;

+ 3
- 0
lib/data/api/rest_client.dart View File

@@ -51,4 +51,7 @@ abstract class RestClient {
"/api/tb-crops-detail/{cropId}?page={page}&size={size}&sort=executeDate,DESC")
Future<CropPlot> getCropDetail(@Path() int cropId,
{@Path() int page = 0, @Path() int size = 20});

@PUT("/api/tb-crops")
Future<void> updateCrop(@Body() TbCropDTO crop);
}

+ 246
- 0
lib/data/api/rest_client.g.dart View File

@@ -0,0 +1,246 @@
// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'rest_client.dart';

// **************************************************************************
// RetrofitGenerator
// **************************************************************************

class _RestClient implements RestClient {
_RestClient(this._dio, {this.baseUrl}) {
ArgumentError.checkNotNull(_dio, '_dio');
this.baseUrl ??= 'http://tpf.aztrace.vn';
}

final Dio _dio;

String baseUrl;

@override
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(
'/api/authenticate',
queryParameters: queryParameters,
options: RequestOptions(
method: 'POST',
headers: <String, dynamic>{},
extra: _extra,
baseUrl: baseUrl),
data: _data);
final value = User.fromJson(_result.data);
return value;
}

@override
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',
queryParameters: queryParameters,
options: RequestOptions(
method: 'GET',
headers: <String, dynamic>{},
extra: _extra,
baseUrl: baseUrl),
data: _data);
final value = Account.fromJson(_result.data);
return value;
}

@override
forgotPassword(email) async {
ArgumentError.checkNotNull(email, 'email');
const _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{};
final _data = email;
await _dio.request<void>('/api/account/reset-password/init',
queryParameters: queryParameters,
options: RequestOptions(
method: 'POST',
headers: <String, dynamic>{},
extra: _extra,
baseUrl: baseUrl),
data: _data);
return null;
}

@override
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>{});
await _dio.request<void>('/api/account/reset-password/finish',
queryParameters: queryParameters,
options: RequestOptions(
method: 'POST',
headers: <String, dynamic>{},
extra: _extra,
baseUrl: baseUrl),
data: _data);
return null;
}

@override
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>{});
await _dio.request<void>('/api/account/change-password',
queryParameters: queryParameters,
options: RequestOptions(
method: 'POST',
headers: <String, dynamic>{},
extra: _extra,
baseUrl: baseUrl),
data: _data);
return null;
}

@override
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(
'/api/update-my-profile',
queryParameters: queryParameters,
options: RequestOptions(
method: 'PUT',
headers: <String, dynamic>{},
extra: _extra,
baseUrl: baseUrl),
data: _data);
final value = Account.fromJson(_result.data);
return value;
}

@override
getSupplies(type) async {
ArgumentError.checkNotNull(type, 'type');
const _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{};
final _data = <String, dynamic>{};
final Response<List<dynamic>> _result = await _dio.request(
'/api/tb-supplies-by-type/$type',
queryParameters: queryParameters,
options: RequestOptions(
method: 'GET',
headers: <String, dynamic>{},
extra: _extra,
baseUrl: baseUrl),
data: _data);
var value = _result.data
.map((dynamic i) => Supply.fromJson(i as Map<String, dynamic>))
.toList();
return value;
}

@override
updateFcmToken(token) async {
ArgumentError.checkNotNull(token, 'token');
const _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{};
final _data = token;
await _dio.request<void>('/api/update-fcmToken',
queryParameters: queryParameters,
options: RequestOptions(
method: 'PUT',
headers: <String, dynamic>{},
extra: _extra,
baseUrl: baseUrl),
data: _data);
return null;
}

@override
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(
'/api/tb-crops?page=$page&size=$size&query=$query',
queryParameters: queryParameters,
options: RequestOptions(
method: 'GET',
headers: <String, dynamic>{},
extra: _extra,
baseUrl: baseUrl),
data: _data);
var value = _result.data
.map((dynamic i) => Crop.fromJson(i as Map<String, dynamic>))
.toList();
return value;
}

@override
getActionTypes() async {
const _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{};
final _data = <String, dynamic>{};
final Response<List<dynamic>> _result = await _dio.request(
'/api/listActivityTypesOther',
queryParameters: queryParameters,
options: RequestOptions(
method: 'GET',
headers: <String, dynamic>{},
extra: _extra,
baseUrl: baseUrl),
data: _data);
var value = _result.data
.map((dynamic i) => ActionType.fromJson(i as Map<String, dynamic>))
.toList();
return value;
}

@override
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(
'/api/tb-crops-detail/$cropId?page=$page&size=$size&sort=executeDate,DESC',
queryParameters: queryParameters,
options: RequestOptions(
method: 'GET',
headers: <String, dynamic>{},
extra: _extra,
baseUrl: baseUrl),
data: _data);
final value = CropPlot.fromJson(_result.data);
return value;
}

@override
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>{});
await _dio.request<void>('/api/tb-crops',
queryParameters: queryParameters,
options: RequestOptions(
method: 'PUT',
headers: <String, dynamic>{},
extra: _extra,
baseUrl: baseUrl),
data: _data);
return null;
}
}

+ 5
- 0
lib/data/repository/repository.dart View File

@@ -26,6 +26,11 @@ class Repository {
return client.getPlots(page: page, size: size, query: searchString);
}

Future<void> updatePlot(TbCropDTO tbCropDTO) {
final client = RestClient(dio);
return client.updateCrop(tbCropDTO);
}

Future<User> signInWithCredentials(String username, String password) {
final client = RestClient(dio);
return client.login(UserRequest(username: username, password: password));

+ 1
- 1
lib/models/ActionType.g.dart View File

@@ -17,5 +17,5 @@ Map<String, dynamic> _$ActionTypeToJson(ActionType instance) =>
<String, dynamic>{
'id': instance.id,
'name': instance.name,
'description': instance.description
'description': instance.description,
};

+ 1
- 1
lib/models/Crop.g.dart View File

@@ -44,5 +44,5 @@ Map<String, dynamic> _$CropToJson(Crop instance) => <String, dynamic>{
'netHouseId': instance.netHouseId,
'netHouseName': instance.netHouseName,
'areaId': instance.areaId,
'area': instance.area
'area': instance.area,
};

+ 1
- 1
lib/models/OtherAction.g.dart View File

@@ -23,5 +23,5 @@ Map<String, dynamic> _$OtherActionToJson(OtherAction instance) =>
'executeDate': instance.executeDate,
'description': instance.description,
'activityTypeName': instance.activityTypeName,
'workerName': instance.workerName
'workerName': instance.workerName,
};

+ 2
- 2
lib/presentation/custom_widgets/widget_toast.dart View File

@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';

class WidgetToast extends StatelessWidget {
String message;
Color color = Colors.greenAccent;
Color color = Colors.green;
WidgetToast({@required this.message, this.color});

@override
@@ -11,7 +11,7 @@ class WidgetToast extends StatelessWidget {
padding: const EdgeInsets.symmetric(horizontal: 24.0, vertical: 12.0),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(25.0),
color: color,
color: Colors.green,
),
child: Row(
mainAxisSize: MainAxisSize.min,

+ 38
- 2
lib/presentation/screens/plot_detail/sc_plot_information.dart View File

@@ -1,9 +1,14 @@
import 'package:farm_tpf/custom_model/CropPlot.dart';
import 'package:farm_tpf/data/api/app_exception.dart';
import 'package:farm_tpf/data/repository/repository.dart';
import 'package:farm_tpf/presentation/custom_widgets/loading_list_page.dart';
import 'package:farm_tpf/presentation/custom_widgets/widget_loading.dart';
import 'package:farm_tpf/presentation/custom_widgets/widget_toast.dart';
import 'package:farm_tpf/presentation/screens/plot_detail/bloc_plot_information.dart';
import 'package:farm_tpf/utils/const_color.dart';
import 'package:farm_tpf/utils/const_string.dart';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:get/get.dart';
import 'package:keyboard_dismisser/keyboard_dismisser.dart';
import 'package:farm_tpf/utils/formatter.dart';
@@ -32,13 +37,16 @@ class _PlotInformationScreenState extends State<PlotInformationScreen> {
TextEditingController _areaController = TextEditingController();
TextEditingController _descriptionController = TextEditingController();

FlutterToast flutterToast;
bool _autoValidate = false;
TbCropDTO _crop = TbCropDTO();
final controller = Get.put(DescriptionChangeControler());
Repository _repository = Repository();

@override
void initState() {
super.initState();
flutterToast = FlutterToast(context);
getPlotInfoBloc.getPlotInfo(widget.cropId, (data) {
var result = data as CropPlot;
_crop = result.tbCropDTO;
@@ -59,13 +67,33 @@ class _PlotInformationScreenState extends State<PlotInformationScreen> {
_codeController.text = _crop.code.toString();
_supplyNameController.text = _crop.suppliesName.toString();
_areaController.text = _crop.areaM2.formatNumtoStringDecimal();
_crop.description = "";
_descriptionController.text =
_crop.description == null ? "" : _crop.description.toString();
}, (err) {});
}

_validateInputs() async {
if (_formKey.currentState.validate()) {
_formKey.currentState.save();
LoadingDialog.showLoadingDialog(context);
_repository.updatePlot(_crop).then((value) {
LoadingDialog.hideLoadingDialog(context);
flutterToast.showToast(
child: WidgetToast(message: label_update_success));
}).catchError((error) {
_scaffoldKey.currentState.showSnackBar(SnackBar(
content: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Flexible(child: Text(AppException.handleError(error))),
Icon(Icons.error),
],
),
backgroundColor: Colors.red,
duration: Duration(seconds: 3),
));
LoadingDialog.hideLoadingDialog(context);
});
} else {
_autoValidate = true;
}
@@ -178,7 +206,15 @@ class _PlotInformationScreenState extends State<PlotInformationScreen> {
Icons.done,
),
disabledColor: Colors.grey,
onPressed: controller.isChanged == false ? null : () {},
onPressed: controller.isChanged == false
? null
: () {
FocusScopeNode currentFocus = FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus();
}
_validateInputs();
},
);
},
)

+ 3
- 0
lib/utils/const_string.dart View File

@@ -29,6 +29,9 @@ const String label_cancel = "Huỷ";
const String label_list_empty = "Dữ liệu rỗng";
const String label_error_get_data = "Lỗi tải dữ liệu";

const String label_update_success = "Cập nhật thành công";
const String label_add_success = "Thêm thành công";

//Exception
const String exception_common = "Đã có lỗi xảy ra";
const String exception_dio_cancle = "Truy vấn đến máy chủ bị huỷ";

+ 39
- 46
pubspec.lock View File

@@ -7,21 +7,14 @@ packages:
name: _fe_analyzer_shared
url: "https://pub.dartlang.org"
source: hosted
version: "7.0.0"
version: "6.0.0"
analyzer:
dependency: transitive
description:
name: analyzer
url: "https://pub.dartlang.org"
source: hosted
version: "0.39.17"
archive:
dependency: transitive
description:
name: archive
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.13"
version: "0.39.14"
args:
dependency: transitive
description:
@@ -35,7 +28,7 @@ packages:
name: async
url: "https://pub.dartlang.org"
source: hosted
version: "2.4.1"
version: "2.4.2"
barcode_scan:
dependency: "direct main"
description:
@@ -63,14 +56,14 @@ packages:
name: build
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.2"
version: "1.3.0"
build_config:
dependency: transitive
description:
name: build_config
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.1+1"
version: "0.4.2"
build_daemon:
dependency: transitive
description:
@@ -84,21 +77,21 @@ packages:
name: build_resolvers
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.7"
version: "1.3.11"
build_runner:
dependency: "direct dev"
description:
name: build_runner
url: "https://pub.dartlang.org"
source: hosted
version: "1.7.4"
version: "1.10.1"
build_runner_core:
dependency: transitive
description:
name: build_runner_core
url: "https://pub.dartlang.org"
source: hosted
version: "4.3.0"
version: "6.0.1"
built_collection:
dependency: transitive
description:
@@ -120,6 +113,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.2"
characters:
dependency: transitive
description:
name: characters
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
charcode:
dependency: transitive
description:
@@ -140,7 +140,14 @@ packages:
name: cli_util
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.0"
version: "0.1.4"
clock:
dependency: transitive
description:
name: clock
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.1"
code_builder:
dependency: transitive
description:
@@ -154,7 +161,7 @@ packages:
name: collection
url: "https://pub.dartlang.org"
source: hosted
version: "1.14.12"
version: "1.14.13"
convert:
dependency: transitive
description:
@@ -168,7 +175,7 @@ packages:
name: crypto
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.4"
version: "2.1.5"
csslib:
dependency: transitive
description:
@@ -204,6 +211,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.5"
fake_async:
dependency: transitive
description:
name: fake_async
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
file:
dependency: transitive
description:
@@ -359,13 +373,6 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.4"
image:
dependency: transitive
description:
name: image
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.12"
image_picker:
dependency: "direct main"
description:
@@ -435,7 +442,7 @@ packages:
name: matcher
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.6"
version: "0.12.8"
meta:
dependency: "direct main"
description:
@@ -491,7 +498,7 @@ packages:
name: path
url: "https://pub.dartlang.org"
source: hosted
version: "1.6.4"
version: "1.7.0"
path_provider_linux:
dependency: transitive
description:
@@ -520,13 +527,6 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.9.0"
petitparser:
dependency: transitive
description:
name: petitparser
url: "https://pub.dartlang.org"
source: hosted
version: "2.4.0"
platform:
dependency: transitive
description:
@@ -692,7 +692,7 @@ packages:
name: stack_trace
url: "https://pub.dartlang.org"
source: hosted
version: "1.9.3"
version: "1.9.5"
stream_channel:
dependency: transitive
description:
@@ -706,7 +706,7 @@ packages:
name: stream_transform
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.20"
version: "1.2.0"
string_scanner:
dependency: transitive
description:
@@ -727,7 +727,7 @@ packages:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.15"
version: "0.2.17"
timing:
dependency: transitive
description:
@@ -748,7 +748,7 @@ packages:
name: typed_data
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.6"
version: "1.2.0"
vector_math:
dependency: transitive
description:
@@ -798,13 +798,6 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.0"
xml:
dependency: transitive
description:
name: xml
url: "https://pub.dartlang.org"
source: hosted
version: "3.6.1"
yaml:
dependency: transitive
description:
@@ -813,5 +806,5 @@ packages:
source: hosted
version: "2.2.1"
sdks:
dart: ">=2.8.0 <3.0.0"
dart: ">=2.9.0-14.0.dev <3.0.0"
flutter: ">=1.16.0 <2.0.0"

Loading…
Cancel
Save