| @@ -0,0 +1 @@ | |||
| eb141365fb69a4e0decadd2584d53516 | |||
| @@ -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; | |||
| @@ -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); | |||
| } | |||
| @@ -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; | |||
| } | |||
| } | |||
| @@ -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)); | |||
| @@ -17,5 +17,5 @@ Map<String, dynamic> _$ActionTypeToJson(ActionType instance) => | |||
| <String, dynamic>{ | |||
| 'id': instance.id, | |||
| 'name': instance.name, | |||
| 'description': instance.description | |||
| 'description': instance.description, | |||
| }; | |||
| @@ -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, | |||
| }; | |||
| @@ -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,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, | |||
| @@ -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(); | |||
| }, | |||
| ); | |||
| }, | |||
| ) | |||
| @@ -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ỷ"; | |||
| @@ -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" | |||