ИНвентаризация

null-safety-migration
suvaysov 2022-11-11 12:47:28 +06:00
parent d01366fced
commit 94db86ee66
18 changed files with 544 additions and 172 deletions

View File

@ -32,7 +32,7 @@ if (keystorePropertiesFile.exists()) {
}
android {
compileSdkVersion 31
compileSdkVersion 33
sourceSets {
main.java.srcDirs += 'src/main/kotlin'

View File

@ -1,60 +0,0 @@
import 'package:json_annotation/json_annotation.dart';
import 'dart:convert';
part 'dict_response_entity.g.dart';
@JsonSerializable()
class DictResponseEntity {
factory DictResponseEntity.fromJson(Map<String, dynamic> json) =>
_$DictResponseEntityFromJson(json);
DictResponseEntity();
late DictResponseHeaders headers;
late DictResponseOriginal original;
String? exception;
Map<String, dynamic> toJson() => _$DictResponseEntityToJson(this);
@override
String toString() {
return jsonEncode(this);
}
}
@JsonSerializable()
class DictResponseHeaders {
DictResponseHeaders();
factory DictResponseHeaders.fromJson(Map<String, dynamic> json) =>
_$DictResponseHeadersFromJson(json);
Map<String, dynamic> toJson() => _$DictResponseHeadersToJson(this);
@override
String toString() {
return jsonEncode(this);
}
}
@JsonSerializable()
class DictResponseOriginal {
factory DictResponseOriginal.fromJson(Map<String, dynamic> json) =>
_$DictResponseOriginalFromJson(json);
DictResponseOriginal();
int? overall;
int? page;
int? perpage;
List<dynamic>? data;
Map<String, List<String>>? errors;
String? message;
Map<String, dynamic> toJson() => _$DictResponseOriginalToJson(this);
@override
String toString() {
return jsonEncode(this);
}
}

View File

@ -0,0 +1,45 @@
import 'package:json_annotation/json_annotation.dart';
@JsonSerializable()
part 'inventarization_response.g.dart';
@JsonSerializable(explicitToJson: true)
class InventarizationResponse {
InventarizationResponse(
{required this.id,
required this.appCompanyId,
required this.inventoryDate,
required this.docNumber,
required this.molUserId,
required this.refInvoiceStatus,
required this.createdAt,
required this.updatedAt,
this.deletedAt,
this.act});
int id;
@JsonKey(name: 'app_company_id')
int appCompanyId;
@JsonKey(name: 'inventory_date')
DateTime inventoryDate;
@JsonKey(name: 'doc_number')
int docNumber;
@JsonKey(name: 'mol_user_id')
int molUserId;
@JsonKey(name: 'act')
int? act;
@JsonKey(name: 'ref_invoice_status')
int refInvoiceStatus;
@JsonKey(name: 'created_at')
DateTime createdAt;
@JsonKey(name: 'updated_at')
DateTime updatedAt;
@JsonKey(name: 'deleted_at')
DateTime? deletedAt;
factory InventarizationResponse.fromJson(Map<String, dynamic> json) =>
_$InventarizationResponseFromJson(json);
Map<String, dynamic> toJson() => _$InventarizationResponseToJson(this);
}

View File

@ -0,0 +1,39 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'inventarization_response.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
InventarizationResponse _$InventarizationResponseFromJson(
Map<String, dynamic> json) =>
InventarizationResponse(
id: json['id'] as int,
appCompanyId: json['app_company_id'] as int,
inventoryDate: DateTime.parse(json['inventory_date'] as String),
docNumber: json['doc_number'] as int,
molUserId: json['mol_user_id'] as int,
refInvoiceStatus: json['ref_invoice_status'] as int,
createdAt: DateTime.parse(json['created_at'] as String),
updatedAt: DateTime.parse(json['updated_at'] as String),
deletedAt: json['deleted_at'] == null
? null
: DateTime.parse(json['deleted_at'] as String),
act: json['act'] as int?,
);
Map<String, dynamic> _$InventarizationResponseToJson(
InventarizationResponse instance) =>
<String, dynamic>{
'id': instance.id,
'app_company_id': instance.appCompanyId,
'inventory_date': instance.inventoryDate.toIso8601String(),
'doc_number': instance.docNumber,
'mol_user_id': instance.molUserId,
'act': instance.act,
'ref_invoice_status': instance.refInvoiceStatus,
'created_at': instance.createdAt.toIso8601String(),
'updated_at': instance.updatedAt.toIso8601String(),
'deleted_at': instance.deletedAt?.toIso8601String(),
};

View File

@ -0,0 +1,60 @@
import 'package:json_annotation/json_annotation.dart';
import 'dart:convert';
part 'response_entity.g.dart';
@JsonSerializable()
class ResponseEntity {
factory ResponseEntity.fromJson(Map<String, dynamic> json) =>
_$ResponseEntityFromJson(json);
ResponseEntity();
late ResponseHeaders headers;
late ResponseOriginal original;
String? exception;
Map<String, dynamic> toJson() => _$ResponseEntityToJson(this);
@override
String toString() {
return jsonEncode(this);
}
}
@JsonSerializable()
class ResponseHeaders {
ResponseHeaders();
factory ResponseHeaders.fromJson(Map<String, dynamic> json) =>
_$ResponseHeadersFromJson(json);
Map<String, dynamic> toJson() => _$ResponseHeadersToJson(this);
@override
String toString() {
return jsonEncode(this);
}
}
@JsonSerializable()
class ResponseOriginal {
factory ResponseOriginal.fromJson(Map<String, dynamic> json) =>
_$ResponseOriginalFromJson(json);
ResponseOriginal();
int? overall;
int? page;
int? perpage;
List<dynamic>? data;
Map<String, List<String>>? errors;
String? message;
Map<String, dynamic> toJson() => _$ResponseOriginalToJson(this);
@override
String toString() {
return jsonEncode(this);
}
}

View File

@ -1,36 +1,34 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'dict_response_entity.dart';
part of 'response_entity.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
DictResponseEntity _$DictResponseEntityFromJson(Map<String, dynamic> json) =>
DictResponseEntity()
ResponseEntity _$ResponseEntityFromJson(Map<String, dynamic> json) =>
ResponseEntity()
..headers =
DictResponseHeaders.fromJson(json['headers'] as Map<String, dynamic>)
..original = DictResponseOriginal.fromJson(
json['original'] as Map<String, dynamic>)
ResponseHeaders.fromJson(json['headers'] as Map<String, dynamic>)
..original =
ResponseOriginal.fromJson(json['original'] as Map<String, dynamic>)
..exception = json['exception'] as String?;
Map<String, dynamic> _$DictResponseEntityToJson(DictResponseEntity instance) =>
Map<String, dynamic> _$ResponseEntityToJson(ResponseEntity instance) =>
<String, dynamic>{
'headers': instance.headers,
'original': instance.original,
'exception': instance.exception,
};
DictResponseHeaders _$DictResponseHeadersFromJson(Map<String, dynamic> json) =>
DictResponseHeaders();
ResponseHeaders _$ResponseHeadersFromJson(Map<String, dynamic> json) =>
ResponseHeaders();
Map<String, dynamic> _$DictResponseHeadersToJson(
DictResponseHeaders instance) =>
Map<String, dynamic> _$ResponseHeadersToJson(ResponseHeaders instance) =>
<String, dynamic>{};
DictResponseOriginal _$DictResponseOriginalFromJson(
Map<String, dynamic> json) =>
DictResponseOriginal()
ResponseOriginal _$ResponseOriginalFromJson(Map<String, dynamic> json) =>
ResponseOriginal()
..overall = json['overall'] as int?
..page = json['page'] as int?
..perpage = json['perpage'] as int?
@ -41,8 +39,7 @@ DictResponseOriginal _$DictResponseOriginalFromJson(
)
..message = json['message'] as String?;
Map<String, dynamic> _$DictResponseOriginalToJson(
DictResponseOriginal instance) =>
Map<String, dynamic> _$ResponseOriginalToJson(ResponseOriginal instance) =>
<String, dynamic>{
'overall': instance.overall,
'page': instance.page,

View File

@ -4,7 +4,7 @@ import 'dart:io';
import 'package:satu/core/base/base_service.dart';
import 'package:http/http.dart' as http;
import 'package:satu/core/models/auth/auth_response.dart';
import 'package:satu/core/models/dictionary/response/dict_response_entity.dart';
import 'package:satu/core/models/response/response_entity.dart';
import 'package:satu/core/models/flow/analytics/analytics_bean.dart';
import 'package:satu/core/models/flow/sell_request.dart';
import 'package:satu/core/models/flow/sell_response.dart';
@ -44,15 +44,16 @@ class ApiService extends BaseService {
headers.addAll(header);
}
final String url = '$endpoint$point';
if (requestBody != null) {
//log.i(host);
//log.i(url);
//log.i(headers);
log.i(jsonEncode(requestBody));
}
final response = await http.post(Uri.https(host, url),
body: jsonEncode(requestBody), headers: headers);
if (requestBody != null) {
// log.i(host);
// log.i(url);
// log.i(headers);
log.i(jsonEncode(requestBody));
log.i(jsonEncode(response.body));
}
return response.body;
}
@ -124,9 +125,9 @@ class ApiService extends BaseService {
return result;
}
Future<DictResponseEntity> dictionaries(String target,
Future<ResponseEntity> postRequest(String target,
{Map<String, dynamic>? requestBody}) async {
DictResponseEntity result;
ResponseEntity result;
try {
final Map<String, String> headers = <String, String>{
HttpHeaders.authorizationHeader: 'Bearer $token'
@ -134,27 +135,27 @@ class ApiService extends BaseService {
final String response =
await _post(target, header: headers, requestBody: requestBody);
result = DictResponseEntity.fromJson(json.decode(response));
result = ResponseEntity.fromJson(json.decode(response));
} catch (e, stack) {
log.e('dictionaries', e, stack);
result = DictResponseEntity()..exception = e.toString();
log.e('postRequest', e, stack);
result = ResponseEntity()..exception = e.toString();
}
return result;
}
Future<DictResponseEntity> dictionarySave(
Future<ResponseEntity> dictionarySave(
String target, Map<String, dynamic>? body) async {
DictResponseEntity response;
ResponseEntity response;
try {
final Map<String, String> headers = <String, String>{
HttpHeaders.authorizationHeader: 'Bearer $token'
};
final String responseBody =
await _post(target, header: headers, requestBody: body);
response = DictResponseEntity.fromJson(json.decode(responseBody));
response = ResponseEntity.fromJson(json.decode(responseBody));
} catch (e, stack) {
log.e('dictionarySave', e, stack);
response = DictResponseEntity()..exception = e.toString();
response = ResponseEntity()..exception = e.toString();
}
return response;
}

View File

@ -4,7 +4,7 @@ import 'package:satu/core/entity/goods_entity.dart';
import 'package:satu/core/models/dictionary/category/category_response.dart';
import 'package:satu/core/models/dictionary/contragent/contragent_response_entity.dart';
import 'package:satu/core/models/dictionary/good/good_response_entity.dart';
import 'package:satu/core/models/dictionary/response/dict_response_entity.dart';
import 'package:satu/core/models/response/response_entity.dart';
import 'package:satu/core/redux/store.dart';
import 'package:satu/core/utils/locator.dart';
@ -132,8 +132,8 @@ class DictionaryService extends BaseService {
'filter': [filter]
};
DictResponseEntity categories = await _api
.dictionaries('/goods_categories_get', requestBody: requestBody);
ResponseEntity categories = await _api
.postRequest('/goods_categories_get', requestBody: requestBody);
if (categories.original.data != null &&
categories.original.data!.isNotEmpty) {
for (final dynamic map in categories.original.data!) {
@ -148,7 +148,7 @@ class DictionaryService extends BaseService {
}
Future<String?> saveCategory(CategoryResponse category) async {
DictResponseEntity? status;
ResponseEntity? status;
log.i(category.toJson());
if (category.id != null) {
status = await _api.dictionarySave(
@ -163,7 +163,7 @@ class DictionaryService extends BaseService {
}
Future<String?> deleteCategory(CategoryResponse category) async {
DictResponseEntity status = await _api.dictionarySave(
ResponseEntity status = await _api.dictionarySave(
'/goods_categories_delete', category.toJson());
String? message = getErrorMsg(status);
return message;
@ -179,8 +179,8 @@ class DictionaryService extends BaseService {
'filter': [filter]
};
DictResponseEntity categories =
await _api.dictionaries('/goods_goods_get', requestBody: requestBody);
ResponseEntity categories =
await _api.postRequest('/goods_goods_get', requestBody: requestBody);
if (categories.original.data != null &&
categories.original.data!.isNotEmpty) {
for (final dynamic map in categories.original.data!) {
@ -195,7 +195,7 @@ class DictionaryService extends BaseService {
}
Future<String?> saveGood(GoodResponseEntity good) async {
DictResponseEntity? status;
ResponseEntity? status;
if (good.id != null) {
status = await _api.dictionarySave('/goods_goods_edit', good.toJson());
} else {
@ -207,7 +207,7 @@ class DictionaryService extends BaseService {
}
Future<String?> deleteGood(GoodResponseEntity good) async {
DictResponseEntity status =
ResponseEntity status =
await _api.dictionarySave('/goods_goods_delete', good.toJson());
String? message = getErrorMsg(status);
return message;
@ -224,8 +224,8 @@ class DictionaryService extends BaseService {
{'col': 'name', 'action': 'like', 'val': query ?? ''}
]
};
final DictResponseEntity contragents = await _api
.dictionaries('/general_contragents_get', requestBody: requestBody);
final ResponseEntity contragents = await _api
.postRequest('/general_contragents_get', requestBody: requestBody);
if (contragents.original.data != null) {
if (contragents.original.data!.isNotEmpty) {
for (dynamic map in contragents.original.data!) {
@ -240,7 +240,7 @@ class DictionaryService extends BaseService {
}
Future<String?> saveContragent(ContragentResponseEntity contragent) async {
DictResponseEntity? status;
ResponseEntity? status;
if (contragent.id != null) {
status = await _api.dictionarySave(
'/general_contragents_edit', contragent.toJson());
@ -254,13 +254,13 @@ class DictionaryService extends BaseService {
}
Future<String?> deleteContragent(ContragentResponseEntity contragent) async {
DictResponseEntity status = await _api.dictionarySave(
ResponseEntity status = await _api.dictionarySave(
'/general_contragents_delete', contragent.toJson());
String? message = getErrorMsg(status);
return message;
}
String? getErrorMsg(DictResponseEntity status) {
String? getErrorMsg(ResponseEntity status) {
String? message;
if (status.exception != null) {

View File

@ -0,0 +1,35 @@
import 'package:satu/core/base/base_service.dart';
import 'package:satu/core/models/inventarization/inventarization_response.dart';
import 'package:satu/core/utils/locator.dart';
import '../models/response/response_entity.dart';
import 'api_service.dart';
class InventarizationService extends BaseService {
final ApiService _api = locator<ApiService>();
Future<List<InventarizationResponse>> getList(
{required int page, required int perpage, dynamic filter}) async {
List<InventarizationResponse> list = [];
try {
final Map<String, dynamic> requestBody = <String, dynamic>{
'page': page,
'perpage': perpage
};
ResponseEntity categories = await _api
.postRequest('/goods_inventory_get', requestBody: requestBody);
if (categories.original.data != null &&
categories.original.data!.isNotEmpty) {
for (final dynamic map in categories.original.data!) {
final InventarizationResponse item = InventarizationResponse.fromJson(map);
list.add(item);
}
}
} catch (e, stack) {
log.e('getList', e, stack);
}
return list;
}
}

View File

@ -7,6 +7,7 @@ import 'package:satu/core/services/data_service.dart';
import 'package:satu/core/services/db_service.dart';
import 'package:satu/core/services/dialog_service.dart';
import 'package:satu/core/services/dictionary_service.dart';
import 'package:satu/core/services/inventarization_service.dart';
import 'package:satu/core/services/navigator_service.dart';
import 'logger.dart';
@ -26,13 +27,14 @@ class LocatorInjector {
_log.d('Initializing DbService Service');
locator.registerLazySingleton<DbService>(() => DbService.instance);
// depencies
_log.d('Initializing DataService Service');
locator.registerLazySingleton<DataService>(() => DataService());
_log.d('Initializing DictionaryService Service');
locator.registerLazySingleton<DictionaryService>(() => DictionaryService());
_log.d('Initializing InventarizationService Service');
locator.registerLazySingleton<InventarizationService>(
() => InventarizationService());
}
}
}

View File

@ -7,6 +7,7 @@ const Color dangerColor = Color.fromRGBO(243, 98, 88, 1);
const Color successColor = Color.fromRGBO(39, 174, 96, 1);
const Color whiteColor = Color.fromRGBO(255, 255, 255, 1);
const Color blackColor = Color.fromRGBO(35, 35, 35, 1);
const Color blueColor = Color.fromRGBO(17, 103, 217, 1);
const Color shadowColor = Color.fromRGBO(72, 72, 72, 0.25);

View File

@ -30,6 +30,10 @@ EdgeInsets largeFieldPadding =
const TextStyle dropDownTradeTypeTextStyle =
TextStyle(color: Colors.black54, fontWeight: FontWeight.bold, fontSize: 24);
const TextStyle textGray11Style =
TextStyle(color: placeholderColor, fontWeight: FontWeight.w400, fontSize: 11);
// Box Shadow
BoxShadow buttonShadowBox =
const BoxShadow(blurRadius: 10, color: shadowColor, offset: Offset(0, 4));

View File

@ -0,0 +1,123 @@
import 'package:flutter/material.dart';
import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart';
import 'package:satu/core/models/inventarization/inventarization_response.dart';
import 'package:satu/core/services/inventarization_service.dart';
import 'package:satu/core/utils/locator.dart';
import 'package:satu/shared/app_colors.dart';
import 'package:satu/shared/shared_styles.dart';
import 'package:satu/shared/ui_helpers.dart';
import 'package:satu/views/inventarization/widget/inventarization_list_tile.dart';
import '../../../widgets/bar/products_app_bar.dart';
class InventarizationView extends StatefulWidget {
const InventarizationView({Key? key}) : super(key: key);
@override
State<InventarizationView> createState() => _InventarizationViewState();
}
class _InventarizationViewState extends State<InventarizationView> {
final InventarizationService _service = locator<InventarizationService>();
static const _pageSize = 20;
final PagingController<int, InventarizationResponse> _pagingController =
PagingController(firstPageKey: 1);
@override
void initState() {
_pagingController.addPageRequestListener((pageKey) {
_fetchData(pageKey, _pageSize);
});
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: const ProductsAppBar(
title: 'Инвентаризация',
drawerShow: true,
),
body: Column(
children: [
verticalSpaceSmall,
Padding(
padding: const EdgeInsets.only( left: 15.0),
child: SizedBox(
width: double.infinity,
child: Row(
children: [
Expanded(
flex: 2,
child: Text(
'Номер документа',
style: textGray11Style,
),
),
Expanded(
flex: 2,
child: Text(
'Дата создания',
style: textGray11Style,
),
),
Expanded(
flex: 1,
child: Text(
'Акты',
style: textGray11Style,
),
),
],
),
),
),
verticalSpaceSmall,
Expanded(
child: PagedListView<int, InventarizationResponse>.separated(
physics: const BouncingScrollPhysics(),
separatorBuilder: (BuildContext context, int index) {
return const Divider(
height: 1.0,
color: disableColor,
);
},
pagingController: _pagingController,
builderDelegate: PagedChildBuilderDelegate<InventarizationResponse>(
itemBuilder: (BuildContext context, InventarizationResponse item,
int index) {
return InventarizationListTile(
key: Key('category_${item.id}'),
// onPress: () async {
// final dynamic result = await _navigatorService
// .push(categoryEditRoute, arguments: item);
// if (result != null && true == (result as bool)) {
// _pagingController.refresh();
// }
// },
item: item,
);
},
),
),
)
],
),
);
}
Future<void> _fetchData(int pageKey, int perPage) async {
final List<InventarizationResponse> newItems = await _service
.getList(page: pageKey, perpage: perPage);
final isLastPage = newItems.length < _pageSize;
if (isLastPage) {
_pagingController.appendLastPage(newItems);
} else {
final nextPageKey = pageKey + 1;
_pagingController.appendPage(newItems, nextPageKey);
}
}
}

View File

@ -0,0 +1,94 @@
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:satu/core/models/inventarization/inventarization_response.dart';
import 'package:satu/shared/app_colors.dart';
class InventarizationListTile extends StatefulWidget {
const InventarizationListTile({required this.item, Key? key})
: super(key: key);
final InventarizationResponse item;
@override
State<InventarizationListTile> createState() =>
_InventarizationListTileState();
}
class _InventarizationListTileState extends State<InventarizationListTile> {
final DateFormat formatterDay = DateFormat('dd.MM.yyyy');
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(color: whiteColor),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
flex: 2,
child: InventarizationCellTile(
value: widget.item.docNumber.toString()),
),
Expanded(
flex: 2,
child: InventarizationCellTile(
value: formatterDay.format(widget.item.createdAt),
),
),
Expanded(
flex: 1,
child: InventarizationCellButton(
value: formatterDay.format(widget.item.createdAt),
),
),
],
),
);
}
}
class InventarizationCellTile extends StatelessWidget {
const InventarizationCellTile({
required this.value,
Key? key,
}) : super(key: key);
final String value;
@override
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.all(15.0),
child: Text(
value,
style: TextStyle(fontSize: 12),
),
);
}
}
class InventarizationCellButton extends StatelessWidget {
const InventarizationCellButton({
required this.value,
Key? key,
}) : super(key: key);
final String value;
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.only( right: 15.0),
child: OutlinedButton(
onPressed: () {},
child: Text(
'Акт',
style: TextStyle(fontSize: 12, color: whiteColor),
),
style: OutlinedButton.styleFrom(
backgroundColor: blueColor,
),
),
);
}
}

View File

@ -7,6 +7,7 @@ import 'package:satu/core/utils/locator.dart';
import 'package:satu/views/analytics/analytics_view.dart';
import 'package:satu/views/dictionaries/category/category_view.dart';
import 'package:satu/views/dictionaries/goods/goods_view.dart';
import 'package:satu/views/inventarization/view/inventarization_view.dart';
import 'package:satu/views/settings/setting_view.dart';
import 'package:satu/views/work/work_view.dart';
import 'package:satu/widgets/drawer/app_drawer.dart';
@ -28,6 +29,7 @@ class _MainViewState extends State<MainView> {
final _goodDictView = GoodsDictionaryView();
final _contragentDictView = ContragentsDictionaryView();
final _analyticsView = const AnalyticsView();
final _inventarizationView = InventarizationView();
Widget _body(Type viewClass) {
if(viewClass == WorkView) {
@ -39,6 +41,9 @@ class _MainViewState extends State<MainView> {
if(viewClass == CategoryDictionaryView) {
return _categoryDictView;
}
if(viewClass == InventarizationView) {
return _inventarizationView;
}
if(viewClass == GoodsDictionaryView) {
return _goodDictView;
}

View File

@ -16,6 +16,8 @@ import 'package:satu/views/dictionaries/goods/goods_view.dart';
import 'package:satu/views/settings/setting_view.dart';
import 'package:satu/views/work/work_view.dart';
import '../../views/inventarization/view/inventarization_view.dart';
class AppDrawer extends StatelessWidget {
@override
Widget build(BuildContext context) {
@ -55,7 +57,10 @@ class AppDrawer extends StatelessWidget {
_createDrawerItem(
svgFile: 'inventarization',
text: 'Инвентаризация',
disable: true,
onTap: () {
Navigator.of(context).pop();
Redux.store!.dispatch(navigateDrawer(InventarizationView));
},
),
_createDrawerSectionTitle(text: 'СПРАВОЧНИКИ'),
_createDrawerItem(

View File

@ -7,35 +7,35 @@ packages:
name: _fe_analyzer_shared
url: "https://pub.dartlang.org"
source: hosted
version: "40.0.0"
version: "47.0.0"
ai_barcode:
dependency: "direct main"
description:
name: ai_barcode
url: "https://pub.dartlang.org"
source: hosted
version: "3.2.0"
version: "3.2.4"
ai_barcode_platform_interface:
dependency: transitive
description:
name: ai_barcode_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.0"
version: "3.0.1"
ai_barcode_web:
dependency: transitive
description:
name: ai_barcode_web
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.0"
version: "3.0.1"
analyzer:
dependency: transitive
description:
name: analyzer
url: "https://pub.dartlang.org"
source: hosted
version: "4.1.0"
version: "4.7.0"
archive:
dependency: transitive
description:
@ -56,7 +56,7 @@ packages:
name: async
url: "https://pub.dartlang.org"
source: hosted
version: "2.8.2"
version: "2.9.0"
auto_size_text:
dependency: "direct main"
description:
@ -84,7 +84,7 @@ packages:
name: build_config
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
version: "1.1.1"
build_daemon:
dependency: transitive
description:
@ -105,7 +105,7 @@ packages:
name: build_runner
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.11"
version: "2.3.2"
build_runner_core:
dependency: transitive
description:
@ -133,7 +133,7 @@ packages:
name: characters
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
version: "1.2.1"
charcode:
dependency: transitive
description:
@ -161,14 +161,14 @@ packages:
name: clock
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
version: "1.1.1"
code_builder:
dependency: transitive
description:
name: code_builder
url: "https://pub.dartlang.org"
source: hosted
version: "4.1.0"
version: "4.3.0"
collection:
dependency: transitive
description:
@ -231,7 +231,7 @@ packages:
name: equatable
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.3"
version: "2.0.5"
esc_pos_bluetooth:
dependency: "direct main"
description:
@ -252,7 +252,7 @@ packages:
name: fake_async
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
version: "1.3.1"
ffi:
dependency: transitive
description:
@ -306,14 +306,14 @@ packages:
name: flutter_screenutil
url: "https://pub.dartlang.org"
source: hosted
version: "5.5.3+2"
version: "5.6.0"
flutter_svg:
dependency: "direct main"
description:
name: flutter_svg
url: "https://pub.dartlang.org"
source: hosted
version: "0.23.0+1"
version: "1.1.6"
flutter_test:
dependency: "direct dev"
description: flutter
@ -330,7 +330,7 @@ packages:
name: frontend_server_client
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.3"
version: "3.1.0"
gbk_codec:
dependency: transitive
description:
@ -386,7 +386,7 @@ packages:
name: http
url: "https://pub.dartlang.org"
source: hosted
version: "0.13.4"
version: "0.13.5"
http_multi_server:
dependency: transitive
description:
@ -407,7 +407,7 @@ packages:
name: image
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.3"
version: "3.2.2"
implicitly_animated_reorderable_list:
dependency: "direct main"
description:
@ -449,14 +449,14 @@ packages:
name: json_annotation
url: "https://pub.dartlang.org"
source: hosted
version: "4.5.0"
version: "4.7.0"
json_serializable:
dependency: "direct dev"
description:
name: json_serializable
url: "https://pub.dartlang.org"
source: hosted
version: "6.2.0"
version: "6.5.4"
lints:
dependency: transitive
description:
@ -491,28 +491,28 @@ packages:
name: mask_text_input_formatter
url: "https://pub.dartlang.org"
source: hosted
version: "2.3.0"
version: "2.4.0"
matcher:
dependency: transitive
description:
name: matcher
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.11"
version: "0.12.12"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.4"
version: "0.1.5"
material_design_icons_flutter:
dependency: "direct main"
description:
name: material_design_icons_flutter
url: "https://pub.dartlang.org"
source: hosted
version: "5.0.6595"
version: "5.0.6996"
material_floating_search_bar:
dependency: "direct main"
description:
@ -526,7 +526,7 @@ packages:
name: meta
url: "https://pub.dartlang.org"
source: hosted
version: "1.7.0"
version: "1.8.0"
mime:
dependency: transitive
description:
@ -554,21 +554,21 @@ packages:
name: path
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.1"
version: "1.8.2"
path_drawing:
dependency: transitive
description:
name: path_drawing
url: "https://pub.dartlang.org"
source: hosted
version: "0.5.1+1"
version: "1.0.1"
path_parsing:
dependency: transitive
description:
name: path_parsing
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.1"
version: "1.0.1"
path_provider:
dependency: "direct main"
description:
@ -624,21 +624,42 @@ packages:
name: permission_handler
url: "https://pub.dartlang.org"
source: hosted
version: "8.3.0"
version: "10.2.0"
permission_handler_android:
dependency: transitive
description:
name: permission_handler_android
url: "https://pub.dartlang.org"
source: hosted
version: "10.2.0"
permission_handler_apple:
dependency: transitive
description:
name: permission_handler_apple
url: "https://pub.dartlang.org"
source: hosted
version: "9.0.7"
permission_handler_platform_interface:
dependency: transitive
description:
name: permission_handler_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "3.7.0"
version: "3.9.0"
permission_handler_windows:
dependency: transitive
description:
name: permission_handler_windows
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.2"
petitparser:
dependency: transitive
description:
name: petitparser
url: "https://pub.dartlang.org"
source: hosted
version: "4.4.0"
version: "5.1.0"
platform:
dependency: transitive
description:
@ -673,7 +694,7 @@ packages:
name: provider
url: "https://pub.dartlang.org"
source: hosted
version: "6.0.3"
version: "6.0.4"
pub_semver:
dependency: transitive
description:
@ -736,7 +757,7 @@ packages:
name: responsive_builder
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.2"
version: "0.4.3"
rxdart:
dependency: transitive
description:
@ -846,21 +867,21 @@ packages:
name: source_span
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.2"
version: "1.9.0"
sqflite:
dependency: "direct main"
description:
name: sqflite
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.2+1"
version: "2.2.0+3"
sqflite_common:
dependency: transitive
description:
name: sqflite_common
url: "https://pub.dartlang.org"
source: hosted
version: "2.2.1+1"
version: "2.4.0+2"
stack_trace:
dependency: transitive
description:
@ -888,7 +909,7 @@ packages:
name: string_scanner
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
version: "1.1.1"
synchronized:
dependency: transitive
description:
@ -902,14 +923,14 @@ packages:
name: term_glyph
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
version: "1.2.1"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.9"
version: "0.4.12"
timing:
dependency: transitive
description:
@ -944,7 +965,7 @@ packages:
name: url_launcher
url: "https://pub.dartlang.org"
source: hosted
version: "6.1.3"
version: "6.1.6"
url_launcher_android:
dependency: transitive
description:
@ -979,7 +1000,7 @@ packages:
name: url_launcher_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.5"
version: "2.1.1"
url_launcher_web:
dependency: transitive
description:
@ -1042,7 +1063,7 @@ packages:
name: xml
url: "https://pub.dartlang.org"
source: hosted
version: "5.3.1"
version: "6.1.0"
yaml:
dependency: transitive
description:
@ -1051,5 +1072,5 @@ packages:
source: hosted
version: "3.1.1"
sdks:
dart: ">=2.17.3 <3.0.0"
flutter: ">=2.10.0"
dart: ">=2.18.2 <3.0.0"
flutter: ">=3.3.0"

View File

@ -19,7 +19,7 @@ version: 1.0.0+1
environment:
sdk: ">=2.17.3 <3.0.0"
sdk: ">=2.18.2 <3.0.0"
dependencies:
flutter:
@ -30,30 +30,30 @@ dependencies:
redux_thunk: ^0.4.0
redux_persist: ^0.9.0
redux_persist_flutter: ^0.9.0
responsive_builder: ^0.4.2
provider: ^6.0.3
responsive_builder: ^0.4.3
provider: ^6.0.4
logger: ^1.1.0
get_it: ^7.2.0
equatable: ^2.0.3
http: ^0.13.4
sqflite: ^2.0.2+1
equatable: ^2.0.5
http: ^0.13.5
sqflite: ^2.2.0+3
path_provider: ^2.0.11
material_design_icons_flutter: ^5.0.6295
material_design_icons_flutter: ^5.0.6996
intl: ^0.17.0
device_info: ^2.0.3
auto_size_text: ^3.0.0
url_launcher: ^6.1.3
url_launcher: ^6.1.6
qr_flutter: ^4.0.0
mask_text_input_formatter: ^2.3.0
flutter_screenutil: ^5.5.3+2
mask_text_input_formatter: ^2.4.0
flutter_screenutil: ^5.6.0
shared_preferences: ^2.0.15
material_floating_search_bar: ^0.3.7
implicitly_animated_reorderable_list: ^0.4.2
uuid: ^3.0.6
charset_converter: ^2.1.0
ai_barcode: ^3.2.0
permission_handler: ^8.3.0
flutter_svg: ^0.23.0+1
ai_barcode: ^3.2.4
permission_handler: ^10.2.0
flutter_svg: ^1.1.6
grouped_list: ^5.1.2
infinite_scroll_pagination: ^3.2.0
flutter_bluetooth_basic: ^0.1.7
@ -61,17 +61,17 @@ dependencies:
esc_pos_utils: ^1.1.0
esc_pos_bluetooth: ^0.4.1
dev_dependencies:
build_runner: ^2.1.5
build_runner: ^2.3.2
flutter_test:
sdk: flutter
json_serializable: ^6.0.1
json_serializable: ^6.5.4
# The "flutter_lints" package below contains a set of recommended lints to
# encourage good coding practices. The lint set provided by the package is
# activated in the `analysis_options.yaml` file located at the root of your
# package. See that file for information about deactivating specific lint
# rules and activating additional ones.
flutter_lints: ^2.0.0
flutter_lints: ^2.0.1
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec