Browse Source

action use water

master
daivph 5 years ago
parent
commit
2482a27470
8 changed files with 136 additions and 31 deletions
  1. +5
    -0
      lib/data/api/dio_provider.dart
  2. +4
    -0
      lib/data/api/rest_client.dart
  3. +20
    -0
      lib/data/api/rest_client.g.dart
  4. +10
    -0
      lib/data/repository/repository.dart
  5. +88
    -30
      lib/presentation/screens/actions/use_water/sc_edit_action_user_water.dart
  6. +1
    -1
      lib/utils/const_common.dart
  7. +7
    -0
      pubspec.lock
  8. +1
    -0
      pubspec.yaml

+ 5
- 0
lib/data/api/dio_provider.dart View File

import 'dart:convert';
import 'dart:developer'; import 'dart:developer';


import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:dio_http_cache/dio_http_cache.dart';
import 'package:farm_tpf/utils/const_common.dart';
import 'package:farm_tpf/utils/pref.dart'; import 'package:farm_tpf/utils/pref.dart';


class DioProvider { class DioProvider {


// dio.interceptors.add(AuthInterceptor()); // dio.interceptors.add(AuthInterceptor());
dio.interceptors.add(HttpLogInterceptor()); dio.interceptors.add(HttpLogInterceptor());
dio.interceptors.add(
DioCacheManager(CacheConfig(baseUrl: ConstCommon.baseUrl)).interceptor);


return dio; return dio;
} }

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

import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:farm_tpf/custom_model/CropPlot.dart'; import 'package:farm_tpf/custom_model/CropPlot.dart';
import 'package:farm_tpf/custom_model/Device.dart'; import 'package:farm_tpf/custom_model/Device.dart';
import 'package:farm_tpf/custom_model/WaterType.dart';
import 'package:farm_tpf/custom_model/account.dart'; import 'package:farm_tpf/custom_model/account.dart';
import 'package:farm_tpf/custom_model/password.dart'; import 'package:farm_tpf/custom_model/password.dart';
import 'package:farm_tpf/custom_model/user.dart'; import 'package:farm_tpf/custom_model/user.dart';
@GET("/api/listActivityTypesOther") @GET("/api/listActivityTypesOther")
Future<List<ActionType>> getActionTypes(); Future<List<ActionType>> getActionTypes();


@GET("/api/water-types")
Future<List<WaterType>> getWaterTypes();

//Crop //Crop
@GET( @GET(
"/api/tb-crops-detail-for-app/{cropId}?page={page}&size={size}&sort=executeDate,DESC") "/api/tb-crops-detail-for-app/{cropId}?page={page}&size={size}&sort=executeDate,DESC")

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

return value; return value;
} }


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

@override @override
getCropDetail(cropId, {page = 0, size = 20}) async { getCropDetail(cropId, {page = 0, size = 20}) async {
ArgumentError.checkNotNull(cropId, 'cropId'); ArgumentError.checkNotNull(cropId, 'cropId');

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

import 'dart:io'; import 'dart:io';


import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:dio_http_cache/dio_http_cache.dart';
import 'package:farm_tpf/custom_model/CropPlot.dart'; import 'package:farm_tpf/custom_model/CropPlot.dart';
import 'package:farm_tpf/custom_model/Device.dart'; import 'package:farm_tpf/custom_model/Device.dart';
import 'package:farm_tpf/custom_model/WaterType.dart';
import 'package:farm_tpf/custom_model/user.dart'; import 'package:farm_tpf/custom_model/user.dart';
import 'package:farm_tpf/custom_model/user_request.dart'; import 'package:farm_tpf/custom_model/user_request.dart';
import 'package:farm_tpf/data/api/app_exception.dart'; import 'package:farm_tpf/data/api/app_exception.dart';
import 'package:farm_tpf/models/Supply.dart'; import 'package:farm_tpf/models/Supply.dart';
import 'package:farm_tpf/models/index.dart'; import 'package:farm_tpf/models/index.dart';
import 'package:farm_tpf/utils/const_common.dart'; import 'package:farm_tpf/utils/const_common.dart';
import 'package:flutter/material.dart';


class Repository { class Repository {
final dio = DioProvider.instance(); final dio = DioProvider.instance();
return client.getActionTypes(); return client.getActionTypes();
} }


Future<List<WaterType>> getWaterTypes() {
final client = RestClient(dio);
var op = buildConfigurableCacheOptions(
forceRefresh: true, maxAge: Duration(days: 7));
return client.getWaterTypes();
}

Future<CropPlot> getPlotDetail(int cropId, {int page, int size}) { Future<CropPlot> getPlotDetail(int cropId, {int page, int size}) {
final client = RestClient(dio); final client = RestClient(dio);
return client.getCropDetail(cropId, page: page, size: size); return client.getCropDetail(cropId, page: page, size: size);

+ 88
- 30
lib/presentation/screens/actions/use_water/sc_edit_action_user_water.dart View File

bool _autoValidate = false; bool _autoValidate = false;
UseWater _useWater = UseWater(); UseWater _useWater = UseWater();
var pref = LocalPref(); var pref = LocalPref();

TextEditingController _waterTypeController = TextEditingController(); TextEditingController _waterTypeController = TextEditingController();
TextEditingController _amountController = TextEditingController(); TextEditingController _amountController = TextEditingController();
TextEditingController _descriptionController = TextEditingController(); TextEditingController _descriptionController = TextEditingController();
DateTime executeTime = DateTime.now(); DateTime executeTime = DateTime.now();
List<String> filePaths = List<String>(); List<String> filePaths = List<String>();
var changeFileController = Get.put(ChangeFileController()); var changeFileController = Get.put(ChangeFileController());
var changeRadio = Get.put(ChangeRadioButton());


@override @override
void initState() { void initState() {
super.initState(); super.initState();
changeFileController.initValue(); changeFileController.initValue();
changeRadio.init(widget.isEdit);
var parsedExecuteDate = var parsedExecuteDate =
DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(executeTime); DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(executeTime);
_useWater.executeDate = "$parsedExecuteDate"; _useWater.executeDate = "$parsedExecuteDate";
} }


Widget _typeWater() { Widget _typeWater() {
var waterTypes = List<WaterType>();
waterTypes.add(WaterType()
..waterTypeName = "name"
..waterTypeDescription = "description");
waterTypes.add(WaterType()
..waterTypeName = "name1"
..waterTypeDescription = "description1");
waterTypes.add(WaterType()
..waterTypeName = "name2"
..waterTypeDescription = "description2");
return Container(
height: 150,
child: ListView.builder(
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemBuilder: (context, index) {
return GestureDetector(
child: RadioListTile(
title: Text(waterTypes[index].waterTypeDescription ?? ""),
value: waterTypes[index],
groupValue: 1 == 1 ? null : waterTypes[0],
onChanged: (WaterType value) {
print("selected value: ${value.waterTypeName}");
}),
onTap: () {});
},
itemCount: waterTypes.length,
),
return GetBuilder<ChangeRadioButton>(
builder: (value) {
if (value._waterTypes.length > 0) {
return Container(
height: 150,
child: ListView.builder(
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemBuilder: (context, index) {
return GestureDetector(
child: RadioListTile(
title: Text(
value._waterTypes[index].waterTypeDescription ??
""),
value: value._waterTypes[index],
groupValue: value.selectedWaterType == null
? null
: value.selectedWaterType,
onChanged: (WaterType value) {
changeRadio.changeSelected(value);
_useWater.waterType = value.waterTypeName;
print("selected value: ${value.waterTypeName}");
}),
onTap: () {});
},
itemCount: value._waterTypes.length,
),
);
} else {
return Container();
}
},
); );
} }


executeTime = executeTime =
DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'") DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")
.parse(_useWater.executeDate); .parse(_useWater.executeDate);
executeTimeView = DateFormat("dd/MM/yyyy HH:mm")
.format(executeTime);
} catch (_) {} } catch (_) {}
executeTimeView = DateFormat("dd/MM/yyyy HH:mm")
.format(executeTime);

changeRadio
.initWithSelectedByName(_useWater.waterType);

//Show media //Show media
if (_useWater.media != null) { if (_useWater.media != null) {
await UtilAction.cacheFiles(_useWater.media) await UtilAction.cacheFiles(_useWater.media)
super.dispose(); super.dispose();
} }
} }

class ChangeRadioButton extends GetxController {
List<WaterType> _waterTypes;
WaterType selectedWaterType;
Future<void> init(bool isEditScreen) async {
//init if is NOT edit screen
if (!isEditScreen) {
selectedWaterType = WaterType();
_waterTypes = List<WaterType>();
//Get action types
Repository _repo = Repository();
try {
var response = await _repo.getWaterTypes();
if (response.length != null) {
_waterTypes = response;
update();
}
} catch (error) {
print(error.toString());
}
}
}

void changeSelected(WaterType selected) {
selectedWaterType = selected;
update();
}

//init and selected item
Future<void> initWithSelectedByName(String waterTypeName) async {
Repository _repo = Repository();
try {
var response = await _repo.getWaterTypes();
if (response.length != null) {
_waterTypes = response;
_waterTypes.forEach((element) {
if (element.waterTypeName == waterTypeName) {
selectedWaterType = element;
}
});
update();
}
} catch (error) {
print(error.toString());
}
}
}

+ 1
- 1
lib/utils/const_common.dart View File

static int kExpiredTime = 12 * 60 * 60 * 1000; //24h static int kExpiredTime = 12 * 60 * 60 * 1000; //24h
static int kFileSize = 1000000; //1M = 1000.000 bytes static int kFileSize = 1000000; //1M = 1000.000 bytes
static const String baseUrl = "http://tpf.aztrace.vn"; static const String baseUrl = "http://tpf.aztrace.vn";
static const String baseImageUrl = "http://s3.tpf.aztrace.vn/upload/";
static const String baseImageUrl = "http://s3tpf.aztrace.vn/upload/";


static const String apiDetailNursery = "api/activity-nursery"; static const String apiDetailNursery = "api/activity-nursery";
static const String apiDetailCropStatus = "api/activity-crop-status"; static const String apiDetailCropStatus = "api/activity-crop-status";

+ 7
- 0
pubspec.lock View File

url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.0.9" version: "3.0.9"
dio_http_cache:
dependency: "direct main"
description:
name: dio_http_cache
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.9"
equatable: equatable:
dependency: "direct main" dependency: "direct main"
description: description:

+ 1
- 0
pubspec.yaml View File

flutter_bloc: ^6.0.1 flutter_bloc: ^6.0.1
equatable: ^1.2.0 equatable: ^1.2.0
dio: 3.0.9 dio: 3.0.9
dio_http_cache: ^0.2.9
formz: ^0.3.0 formz: ^0.3.0
keyboard_dismisser: ^1.0.2 keyboard_dismisser: ^1.0.2
fluttertoast: ^6.0.1 fluttertoast: ^6.0.1

Loading…
Cancel
Save