barcode-scanner

4.4
Serik.Uvaissov 2020-09-09 16:18:18 +06:00
parent e049349a04
commit e30f1b3466
6 changed files with 340 additions and 186 deletions

View File

@ -41,6 +41,11 @@ class DataService extends BaseService {
return list.map((e) => Good.fromMap(e)).toList(); return list.map((e) => Good.fromMap(e)).toList();
} }
Future<List<Good>> getGoodsByBarcode ({ String barcode}) async {
List<Map<String, dynamic>> list = await _db.queryRowsWithWhere(Goog_tableName, ' $Goog_columnEan = ?', [barcode]);
return list.map((e) => Good.fromMap(e)).toList();
}
CheckData _transformProductsToCheckData( CheckData _transformProductsToCheckData(
{String paymentType, String tradeType, List<ProductDao> items}) { {String paymentType, String tradeType, List<ProductDao> items}) {
List<CheckItem> itemsList = []; List<CheckItem> itemsList = [];
@ -128,6 +133,8 @@ class DataService extends BaseService {
return null; return null;
} }
Future<Response<dynamic>> sellOrReturn( Future<Response<dynamic>> sellOrReturn(
{String paymentType, {String paymentType,
String tradeType, String tradeType,
@ -215,6 +222,7 @@ class DataService extends BaseService {
if (goods.body.isNotEmpty) { if (goods.body.isNotEmpty) {
for (var key in goods.body.keys) { for (var key in goods.body.keys) {
Good row = Good.fromJson(goods.body[key]); Good row = Good.fromJson(goods.body[key]);
//log.i(row.toMap());
await _db.insert(Goog_tableName, row.toMap()); await _db.insert(Goog_tableName, row.toMap());
} }
log.i('Inserted ${goods.body.length} to table $Goog_tableName'); log.i('Inserted ${goods.body.length} to table $Goog_tableName');

View File

@ -1,8 +1,11 @@
import 'package:aman_kassa_flutter/core/entity/Goods.dart';
import 'package:aman_kassa_flutter/core/locator.dart'; import 'package:aman_kassa_flutter/core/locator.dart';
import 'package:aman_kassa_flutter/core/models/product_dao.dart'; import 'package:aman_kassa_flutter/core/models/product_dao.dart';
import 'package:aman_kassa_flutter/core/route_names.dart'; import 'package:aman_kassa_flutter/core/route_names.dart';
import 'package:aman_kassa_flutter/core/services/DataService.dart';
import 'package:aman_kassa_flutter/core/services/dialog_service.dart';
import 'package:aman_kassa_flutter/core/services/navigator_service.dart'; import 'package:aman_kassa_flutter/core/services/navigator_service.dart';
import 'package:aman_kassa_flutter/redux/actions/kassa_actions.dart';
import 'package:aman_kassa_flutter/redux/constants/operation_const.dart'; import 'package:aman_kassa_flutter/redux/constants/operation_const.dart';
import 'package:aman_kassa_flutter/redux/constants/setting_const.dart'; import 'package:aman_kassa_flutter/redux/constants/setting_const.dart';
import 'package:aman_kassa_flutter/redux/state/kassa_state.dart'; import 'package:aman_kassa_flutter/redux/state/kassa_state.dart';
@ -13,12 +16,19 @@ import 'package:aman_kassa_flutter/views/home/tabs/kassaView/CatalogBottomSheet.
import 'package:aman_kassa_flutter/views/home/tabs/kassaView/ProductAddBottomSheet.dart'; import 'package:aman_kassa_flutter/views/home/tabs/kassaView/ProductAddBottomSheet.dart';
import 'package:aman_kassa_flutter/views/payment/payment_view.dart'; import 'package:aman_kassa_flutter/views/payment/payment_view.dart';
import 'package:aman_kassa_flutter/widgets/components/ProductListItem.dart'; import 'package:aman_kassa_flutter/widgets/components/ProductListItem.dart';
import 'package:barcode_scan/gen/protos/protos.pb.dart';
import 'package:barcode_scan/gen/protos/protos.pbenum.dart';
import 'package:barcode_scan/model/scan_options.dart';
import 'package:barcode_scan/platform_wrapper.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
class KassaTab extends StatelessWidget { class KassaTab extends StatelessWidget {
final NavigatorService _navigatorService = locator<NavigatorService>(); final NavigatorService _navigatorService = locator<NavigatorService>();
final DialogService _dialogService = locator<DialogService>();
final DataService _dataService = locator<DataService>();
final int index; final int index;
@ -33,107 +43,132 @@ class KassaTab extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Padding( return Scaffold(
padding: EdgeInsets.all(4), floatingActionButton: Container(
child: Column( padding: EdgeInsets.only(bottom: 65.0, left: 8.0),
children: <Widget>[ child: Align(
Row( alignment: Alignment.bottomLeft,
children: <Widget>[ child: FloatingActionButton(
Expanded( elevation: 3.0,
child: Padding( onPressed: scan,
padding: const EdgeInsets.all(4.0), child: Icon(
child: RaisedButton( MdiIcons.barcode,
padding: EdgeInsets.all(8), size: 30,
color: primaryColor,
child: Text(
"Добавить",
style: buttonBigTitleTextStyle,
),
onPressed: () { showModalBottomSheetCatalog(context, 'add');},
),
),
),
Expanded(
child: Padding(
padding: const EdgeInsets.all(4.0),
child: RaisedButton(
padding: EdgeInsets.all(8),
color: greenColor,
child: Text(
"Каталог",
style: buttonBigTitleTextStyle,
),
onPressed: () { showModalBottomSheetCatalog(context, 'catalog');},
),
),
),
],
),
Expanded(
child: Container(
child: StoreConnector<AppState, KassaState>(
converter: (store) => store.state.kassaState,
builder: (context, vm) {
return ListView.builder(
itemCount: vm.kassaItems.length,
itemBuilder: (BuildContext ctxt, int index) =>
buildItem(ctxt, index, vm.kassaItems[index]));
}
),
), ),
), ),
Divider(), ),
Container( ),
margin: const EdgeInsets.symmetric(vertical: 8), floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
child: Row( body: Padding(
mainAxisAlignment: MainAxisAlignment.end, padding: const EdgeInsets.all(4),
child: Column(
children: <Widget>[
Row(
children: <Widget>[ children: <Widget>[
StoreConnector<AppState, KassaState>( Expanded(
converter: (store) => store.state.kassaState, child: Padding(
builder: (context, vm) { padding: const EdgeInsets.all(4.0),
return Text(totalCalc(vm.kassaItems), style: TextStyle(fontSize: 25)); child: RaisedButton(
} padding: const EdgeInsets.all(8),
color: primaryColor,
child: Text(
"Добавить",
style: buttonBigTitleTextStyle,
),
onPressed: () {
showModalBottomSheetCatalog(context, 'add');
},
),
),
),
Expanded(
child: Padding(
padding: const EdgeInsets.all(4.0),
child: RaisedButton(
padding: EdgeInsets.all(8),
color: greenColor,
child: Text(
"Каталог",
style: buttonBigTitleTextStyle,
),
onPressed: () {
showModalBottomSheetCatalog(context, 'catalog');
},
),
),
), ),
], ],
), ),
), Expanded(
Row( child: Container(
children: <Widget>[ child: StoreConnector<AppState, KassaState>(
Expanded( converter: (store) => store.state.kassaState,
child: Padding( builder: (context, vm) {
padding: const EdgeInsets.all(4.0), return ListView.builder(
child: RaisedButton( itemCount: vm.kassaItems.length,
padding: EdgeInsets.all(8), itemBuilder: (BuildContext ctxt, int index) =>
color: redColor, buildItem(ctxt, index, vm.kassaItems[index]));
child: Text( }),
"возврат", ),
style: buttonBigTitleTextStyle, ),
), //Divider(),
Container(
margin: const EdgeInsets.symmetric(vertical: 8),
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
StoreConnector<AppState, KassaState>(
converter: (store) => store.state.kassaState,
builder: (context, vm) {
return Text(totalCalc(vm.kassaItems),
style: TextStyle(fontSize: 25));
}),
],
),
),
Row(
children: <Widget>[
Expanded(
child: Padding(
padding: const EdgeInsets.all(4.0),
child: RaisedButton(
padding: const EdgeInsets.all(8),
color: redColor,
child: Text(
"возврат",
style: buttonBigTitleTextStyle,
),
onPressed: () {
_navigatorService.push(PaymentViewRoute,
arguments: PaymentModel(
mode: SettingModeKassa,
operationType: OperationTypeReturn));
}),
),
),
Expanded(
child: Padding(
padding: const EdgeInsets.all(4.0),
child: RaisedButton(
padding: const EdgeInsets.all(8),
color: greenColor,
child: Text(
"оплата",
style: buttonBigTitleTextStyle,
),
onPressed: () { onPressed: () {
_navigatorService.push(PaymentViewRoute, arguments: PaymentModel(mode: SettingModeKassa, operationType: OperationTypeReturn) ); _navigatorService.push(PaymentViewRoute,
} arguments: PaymentModel(
), mode: SettingModeKassa,
), operationType: OperationTypePay));
), },
Expanded(
child: Padding(
padding: const EdgeInsets.all(4.0),
child: RaisedButton(
padding: EdgeInsets.all(8),
color: greenColor,
child: Text(
"оплата",
style: buttonBigTitleTextStyle,
), ),
onPressed: () {
_navigatorService.push(PaymentViewRoute, arguments: PaymentModel(mode: SettingModeKassa, operationType: OperationTypePay) );
},
), ),
), ),
), ],
], )
) ],
], ),
), ),
); );
} }
@ -141,32 +176,77 @@ class KassaTab extends StatelessWidget {
String totalCalc(List<ProductDao> kassaItems) { String totalCalc(List<ProductDao> kassaItems) {
num total = 0.0; num total = 0.0;
kassaItems.forEach((element) { kassaItems.forEach((element) {
total+= element.total == null ? 0.0 : element.total.toDouble(); total += element.total == null ? 0.0 : element.total.toDouble();
}); });
return total.toString(); return total.toString();
} }
void showModalBottomSheetCatalog(BuildContext context, String action) { Future<void> scan() async {
showModalBottomSheet( try {
context: context, var options = ScanOptions(strings: {
isScrollControlled: true, "cancel": 'Отмена',
backgroundColor: Colors.transparent, "flash_on": 'Вкл фонарик',
builder: (context){ "flash_off": 'Выкл фонарик',
return DraggableScrollableSheet( });
initialChildSize: 0.8, var result = await BarcodeScanner.scan(options: options);
maxChildSize: 0.95, // print(result.type); // The result type (barcode, cancelled, failed)
minChildSize: 0.5, // print(result.rawContent); // The barcode content
builder: (BuildContext context, ScrollController scrollController) { // print(result.format); // The barcode format (as enum)
if( action == 'add') { // print(result.formatNote); // If a unknown format was scanned this field contains a note
return ProductAddBottomSheet(scrollController: scrollController,); if (result.type == ResultType.Barcode &&
} else { (result.format == BarcodeFormat.ean13 ||
return CatalogBottomSheet(scrollController: scrollController,); result.format == BarcodeFormat.ean8)) {
} String barcode = result.rawContent;
}, List<Good> goods =
); await _dataService.getGoodsByBarcode(barcode: barcode);
if (goods != null && goods.isNotEmpty) {
Redux.store.dispatch(addProductToKassaItems(goods.first));
} else {
_dialogService.showDialog(
description: 'Товар не найден: ${result.rawContent}');
}
} else if (result.type == ResultType.Error) {
_dialogService.showDialog(description: 'Не верный формат QR кода');
} }
); } on PlatformException catch (e) {
var result = ScanResult.create();
result.type = ResultType.Error;
result.format = BarcodeFormat.unknown;
if (e.code == BarcodeScanner.cameraAccessDenied) {
result.rawContent = 'The user did not grant the camera permission!';
_dialogService.showDialog(
description: 'Нет доступа до камеры устройства');
} else {
result.rawContent = 'Unknown error: $e';
_dialogService.showDialog(description: 'Неизвестная ошибка: $e');
}
}
} }
void showModalBottomSheetCatalog(BuildContext context, String action) {
showModalBottomSheet(
context: context,
isScrollControlled: true,
backgroundColor: Colors.transparent,
builder: (context) {
return DraggableScrollableSheet(
initialChildSize: 0.8,
maxChildSize: 0.95,
minChildSize: 0.5,
builder: (BuildContext context, ScrollController scrollController) {
if (action == 'add') {
return ProductAddBottomSheet(
scrollController: scrollController,
);
} else {
return CatalogBottomSheet(
scrollController: scrollController,
);
}
},
);
});
}
} }

View File

@ -3,6 +3,7 @@ import 'package:aman_kassa_flutter/redux/state/user_state.dart';
import 'package:aman_kassa_flutter/redux/store.dart'; import 'package:aman_kassa_flutter/redux/store.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/screenutil.dart';
class StartUpView extends StatefulWidget { class StartUpView extends StatefulWidget {
@ -20,6 +21,7 @@ class _StartUpViewState extends State<StartUpView> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
ScreenUtil.init(context, width: 411.43, height: 683.43, allowFontScaling: false);
return StoreConnector<AppState, UserState>( return StoreConnector<AppState, UserState>(
converter: (store) => store.state.userState, converter: (store) => store.state.userState,
builder: (context, userState) { builder: (context, userState) {

View File

@ -55,14 +55,13 @@ class ProductListItem extends StatelessWidget {
//margin: const EdgeInsets.symmetric(horizontal: 4), //margin: const EdgeInsets.symmetric(horizontal: 4),
child: Row( child: Row(
children: <Widget>[ children: <Widget>[
buildClipRect(primaryColor, Icons.remove, () { buildClipRect(primaryColor, Icons.edit, () {
Redux.store.dispatch( editCountForm(context, item.count);
counterProductFromKassaItems(index, -1));
}),
buildClipRect(primaryColor, Icons.add, () {
Redux.store
.dispatch(counterProductFromKassaItems(index, 1));
}), }),
// buildClipRect(primaryColor, Icons.add, () {
// Redux.store
// .dispatch(counterProductFromKassaItems(index, 1));
// }),
Expanded( Expanded(
child: Container(), child: Container(),
), ),
@ -103,4 +102,75 @@ class ProductListItem extends StatelessWidget {
), ),
); );
} }
void editCountForm(BuildContext context, num count) {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(5.0),
),
actionsPadding: const EdgeInsets.only(right: 15, bottom: 5),
title: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
'request.title',
style: TextStyle(fontWeight: FontWeight.bold),
),
//Divider(),
],
),
content: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
//Text(request.description),
TextField(
autofocus: true,
decoration: InputDecoration(
labelText: 'request.description',
),
//controller: _controller,
onSubmitted: (value) {
},
keyboardType: TextInputType.phone,
)
],
),
actions: <Widget>[
Row(
children: [
RaisedButton(
color: redColor,
child: Text(
'Отмена',
style: TextStyle(fontSize: 18),
),
onPressed: () {
Navigator.of(context).pop();
},
),
SizedBox(
width: 5,
),
RaisedButton(
color: primaryColor,
child: Text(
'Сохранить',
style: TextStyle(fontSize: 18),
),
onPressed: () {
},
),
],
),
],
);
});
}
} }

View File

@ -1,27 +1,13 @@
# Generated by pub # Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile # See https://dart.dev/tools/pub/glossary#lockfile
packages: packages:
archive:
dependency: transitive
description:
name: archive
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.13"
args:
dependency: transitive
description:
name: args
url: "https://pub.dartlang.org"
source: hosted
version: "1.6.0"
async: async:
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"
auto_size_text: auto_size_text:
dependency: "direct main" dependency: "direct main"
description: description:
@ -43,6 +29,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.0" version: "2.0.0"
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:
@ -50,13 +43,20 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.3" version: "1.1.3"
clock:
dependency: transitive
description:
name: clock
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.1"
collection: collection:
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:
@ -70,7 +70,7 @@ packages:
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"
cupertino_icons: cupertino_icons:
dependency: "direct main" dependency: "direct main"
description: description:
@ -84,14 +84,21 @@ packages:
name: device_info name: device_info
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.4.2+4" version: "0.4.2+7"
device_info_platform_interface:
dependency: transitive
description:
name: device_info_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
equatable: equatable:
dependency: "direct main" dependency: "direct main"
description: description:
name: equatable name: equatable
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.2.3" version: "1.2.4"
esys_flutter_share: esys_flutter_share:
dependency: "direct main" dependency: "direct main"
description: description:
@ -99,6 +106,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.2" version: "1.0.2"
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:
@ -125,6 +139,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.6.0" version: "0.6.0"
flutter_screenutil:
dependency: "direct main"
description:
name: flutter_screenutil
url: "https://pub.dartlang.org"
source: hosted
version: "2.3.1"
flutter_test: flutter_test:
dependency: "direct dev" dependency: "direct dev"
description: flutter description: flutter
@ -163,13 +184,6 @@ packages:
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"
intl: intl:
dependency: "direct main" dependency: "direct main"
description: description:
@ -197,7 +211,7 @@ packages:
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"
material_design_icons_flutter: material_design_icons_flutter:
dependency: "direct main" dependency: "direct main"
description: description:
@ -225,14 +239,14 @@ packages:
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: path_provider:
dependency: "direct main" dependency: "direct main"
description: description:
name: path_provider name: path_provider
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.6.11" version: "1.6.14"
path_provider_linux: path_provider_linux:
dependency: transitive dependency: transitive
description: description:
@ -253,7 +267,7 @@ packages:
name: path_provider_platform_interface name: path_provider_platform_interface
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.2" version: "1.0.3"
pedantic: pedantic:
dependency: transitive dependency: transitive
description: description:
@ -261,13 +275,6 @@ packages:
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:
@ -309,7 +316,7 @@ packages:
name: provider name: provider
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "4.3.1" version: "4.3.2+1"
pub_semver: pub_semver:
dependency: transitive dependency: transitive
description: description:
@ -331,13 +338,6 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.2.0" version: "3.2.0"
quiver:
dependency: transitive
description:
name: quiver
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.3"
redux: redux:
dependency: "direct main" dependency: "direct main"
description: description:
@ -379,14 +379,14 @@ packages:
name: shared_preferences name: shared_preferences
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.5.8" version: "0.5.10"
shared_preferences_linux: shared_preferences_linux:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_linux name: shared_preferences_linux
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.0.2+1" version: "0.0.2+2"
shared_preferences_macos: shared_preferences_macos:
dependency: transitive dependency: transitive
description: description:
@ -440,7 +440,7 @@ packages:
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:
@ -475,14 +475,14 @@ packages:
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"
typed_data: typed_data:
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"
url_launcher: url_launcher:
dependency: "direct main" dependency: "direct main"
description: description:
@ -517,7 +517,7 @@ packages:
name: url_launcher_web name: url_launcher_web
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.1.2" version: "0.1.2+1"
vector_math: vector_math:
dependency: transitive dependency: transitive
description: description:
@ -532,13 +532,6 @@ packages:
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"
sdks: sdks:
dart: ">=2.8.0 <3.0.0" dart: ">=2.9.0-14.0.dev <3.0.0"
flutter: ">=1.17.0 <2.0.0" flutter: ">=1.17.0 <2.0.0"

View File

@ -7,29 +7,30 @@ dependencies:
flutter: flutter:
sdk: flutter sdk: flutter
cupertino_icons: ^0.1.3 cupertino_icons: ^0.1.3
redux: ^4.0.0 redux: ^4.0.0+3
flutter_redux: ^0.6.0 flutter_redux: ^0.6.0
redux_thunk: ^0.3.0 redux_thunk: ^0.3.0
redux_persist: ^0.8.4 redux_persist: ^0.8.4
redux_persist_flutter: ^0.8.2 redux_persist_flutter: ^0.8.2
responsive_builder: ^0.2.0+2 responsive_builder: ^0.2.0+2
provider: ^4.3.1 provider: ^4.3.2+1
logger: ^0.9.1 logger: ^0.9.2
get_it: ^4.0.2 get_it: ^4.0.4
equatable: ^1.2.2 equatable: ^1.2.4
http: ^0.12.2 http: ^0.12.2
sqflite: ^1.3.1 sqflite: ^1.3.1
path_provider: ^1.6.11 path_provider: ^1.6.14
google_fonts: ^1.1.0 google_fonts: ^1.1.0
material_design_icons_flutter: ^4.0.5345 material_design_icons_flutter: ^4.0.5345
intl: ^0.16.1 intl: ^0.16.1
barcode_scan: ^3.0.1 barcode_scan: ^3.0.1
device_info: ^0.4.2+4 device_info: ^0.4.2+7
esys_flutter_share: ^1.0.2 esys_flutter_share: ^1.0.2
auto_size_text: ^2.1.0 auto_size_text: ^2.1.0
url_launcher: ^5.5.0 url_launcher: ^5.5.0
qr_flutter: ^3.2.0 qr_flutter: ^3.2.0
mask_text_input_formatter: ^1.0.7 mask_text_input_formatter: ^1.0.7
flutter_screenutil: ^2.3.1
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:
sdk: flutter sdk: flutter