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

eb141365fb69a4e0decadd2584d53516

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

/* Begin XCBuildConfiguration section */ /* Begin XCBuildConfiguration section */
249021D3217E4FDB00AE95B9 /* Profile */ = { 249021D3217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
}; };
97C147031CF9000F007C117D /* Debug */ = { 97C147031CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
}; };
97C147041CF9000F007C117D /* Release */ = { 97C147041CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;

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

"/api/tb-crops-detail/{cropId}?page={page}&size={size}&sort=executeDate,DESC") "/api/tb-crops-detail/{cropId}?page={page}&size={size}&sort=executeDate,DESC")
Future<CropPlot> getCropDetail(@Path() int cropId, Future<CropPlot> getCropDetail(@Path() int cropId,
{@Path() int page = 0, @Path() int size = 20}); {@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

// 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

return client.getPlots(page: page, size: size, query: searchString); 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) { Future<User> signInWithCredentials(String username, String password) {
final client = RestClient(dio); final client = RestClient(dio);
return client.login(UserRequest(username: username, password: password)); return client.login(UserRequest(username: username, password: password));

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

<String, dynamic>{ <String, dynamic>{
'id': instance.id, 'id': instance.id,
'name': instance.name, 'name': instance.name,
'description': instance.description
'description': instance.description,
}; };

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

'netHouseId': instance.netHouseId, 'netHouseId': instance.netHouseId,
'netHouseName': instance.netHouseName, 'netHouseName': instance.netHouseName,
'areaId': instance.areaId, 'areaId': instance.areaId,
'area': instance.area
'area': instance.area,
}; };

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

'executeDate': instance.executeDate, 'executeDate': instance.executeDate,
'description': instance.description, 'description': instance.description,
'activityTypeName': instance.activityTypeName, 'activityTypeName': instance.activityTypeName,
'workerName': instance.workerName
'workerName': instance.workerName,
}; };

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



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


@override @override
padding: const EdgeInsets.symmetric(horizontal: 24.0, vertical: 12.0), padding: const EdgeInsets.symmetric(horizontal: 24.0, vertical: 12.0),
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(25.0), borderRadius: BorderRadius.circular(25.0),
color: color,
color: Colors.green,
), ),
child: Row( child: Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,

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

import 'package:farm_tpf/custom_model/CropPlot.dart'; 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/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/presentation/screens/plot_detail/bloc_plot_information.dart';
import 'package:farm_tpf/utils/const_color.dart'; import 'package:farm_tpf/utils/const_color.dart';
import 'package:farm_tpf/utils/const_string.dart'; import 'package:farm_tpf/utils/const_string.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:keyboard_dismisser/keyboard_dismisser.dart'; import 'package:keyboard_dismisser/keyboard_dismisser.dart';
import 'package:farm_tpf/utils/formatter.dart'; import 'package:farm_tpf/utils/formatter.dart';
TextEditingController _areaController = TextEditingController(); TextEditingController _areaController = TextEditingController();
TextEditingController _descriptionController = TextEditingController(); TextEditingController _descriptionController = TextEditingController();


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


@override @override
void initState() { void initState() {
super.initState(); super.initState();
flutterToast = FlutterToast(context);
getPlotInfoBloc.getPlotInfo(widget.cropId, (data) { getPlotInfoBloc.getPlotInfo(widget.cropId, (data) {
var result = data as CropPlot; var result = data as CropPlot;
_crop = result.tbCropDTO; _crop = result.tbCropDTO;
_codeController.text = _crop.code.toString(); _codeController.text = _crop.code.toString();
_supplyNameController.text = _crop.suppliesName.toString(); _supplyNameController.text = _crop.suppliesName.toString();
_areaController.text = _crop.areaM2.formatNumtoStringDecimal(); _areaController.text = _crop.areaM2.formatNumtoStringDecimal();
_crop.description = "";
_descriptionController.text =
_crop.description == null ? "" : _crop.description.toString();
}, (err) {}); }, (err) {});
} }


_validateInputs() async { _validateInputs() async {
if (_formKey.currentState.validate()) { if (_formKey.currentState.validate()) {
_formKey.currentState.save(); _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 { } else {
_autoValidate = true; _autoValidate = true;
} }
Icons.done, Icons.done,
), ),
disabledColor: Colors.grey, 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

const String label_list_empty = "Dữ liệu rỗng"; 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_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 //Exception
const String exception_common = "Đã có lỗi xảy ra"; const String exception_common = "Đã có lỗi xảy ra";
const String exception_dio_cancle = "Truy vấn đến máy chủ bị huỷ"; const String exception_dio_cancle = "Truy vấn đến máy chủ bị huỷ";

+ 39
- 46
pubspec.lock View File

name: _fe_analyzer_shared name: _fe_analyzer_shared
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "7.0.0"
version: "6.0.0"
analyzer: analyzer:
dependency: transitive dependency: transitive
description: description:
name: analyzer name: analyzer
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted 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: args:
dependency: transitive dependency: transitive
description: description:
name: async name: async
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.4.1"
version: "2.4.2"
barcode_scan: barcode_scan:
dependency: "direct main" dependency: "direct main"
description: description:
name: build name: build
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.2.2"
version: "1.3.0"
build_config: build_config:
dependency: transitive dependency: transitive
description: description:
name: build_config name: build_config
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.4.1+1"
version: "0.4.2"
build_daemon: build_daemon:
dependency: transitive dependency: transitive
description: description:
name: build_resolvers name: build_resolvers
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.3.7"
version: "1.3.11"
build_runner: build_runner:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: build_runner name: build_runner
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.7.4"
version: "1.10.1"
build_runner_core: build_runner_core:
dependency: transitive dependency: transitive
description: description:
name: build_runner_core name: build_runner_core
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "4.3.0"
version: "6.0.1"
built_collection: built_collection:
dependency: transitive dependency: transitive
description: description:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.1.2" version: "0.1.2"
characters:
dependency: transitive
description:
name: characters
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
charcode: charcode:
dependency: transitive dependency: transitive
description: description:
name: cli_util name: cli_util
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted 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: code_builder:
dependency: transitive dependency: transitive
description: description:
name: collection name: collection
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.14.12"
version: "1.14.13"
convert: convert:
dependency: transitive dependency: transitive
description: description:
name: crypto name: crypto
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.4"
version: "2.1.5"
csslib: csslib:
dependency: transitive dependency: transitive
description: description:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.2.5" version: "1.2.5"
fake_async:
dependency: transitive
description:
name: fake_async
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
file: file:
dependency: transitive dependency: transitive
description: description:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.1.4" version: "3.1.4"
image:
dependency: transitive
description:
name: image
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.12"
image_picker: image_picker:
dependency: "direct main" dependency: "direct main"
description: description:
name: matcher name: matcher
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.12.6"
version: "0.12.8"
meta: meta:
dependency: "direct main" dependency: "direct main"
description: description:
name: path name: path
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.6.4"
version: "1.7.0"
path_provider_linux: path_provider_linux:
dependency: transitive dependency: transitive
description: description:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.9.0" version: "1.9.0"
petitparser:
dependency: transitive
description:
name: petitparser
url: "https://pub.dartlang.org"
source: hosted
version: "2.4.0"
platform: platform:
dependency: transitive dependency: transitive
description: description:
name: stack_trace name: stack_trace
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.9.3"
version: "1.9.5"
stream_channel: stream_channel:
dependency: transitive dependency: transitive
description: description:
name: stream_transform name: stream_transform
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.0.20"
version: "1.2.0"
string_scanner: string_scanner:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.2.15"
version: "0.2.17"
timing: timing:
dependency: transitive dependency: transitive
description: description:
name: typed_data name: typed_data
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.6"
version: "1.2.0"
vector_math: vector_math:
dependency: transitive dependency: transitive
description: description:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.1.0" version: "0.1.0"
xml:
dependency: transitive
description:
name: xml
url: "https://pub.dartlang.org"
source: hosted
version: "3.6.1"
yaml: yaml:
dependency: transitive dependency: transitive
description: description:
source: hosted source: hosted
version: "2.2.1" version: "2.2.1"
sdks: 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" flutter: ">=1.16.0 <2.0.0"

Loading…
Cancel
Save