diff --git a/android/app/build.gradle b/android/app/build.gradle
index 16b6b08..5167806 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -34,7 +34,7 @@ if (keystorePropertiesFile.exists()) {
android {
- compileSdkVersion 30
+ compileSdkVersion 31
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
@@ -47,7 +47,7 @@ android {
defaultConfig {
applicationId "kz.com.aman.kassa"
minSdkVersion 21
- targetSdkVersion 30
+ targetSdkVersion 31
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
multiDexEnabled true
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index e771add..4899dc0 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -14,12 +14,11 @@
-
+
diff --git a/android/app/src/main/kotlin/kz/com/aman/kassa/MainActivity.kt b/android/app/src/main/kotlin/kz/com/aman/kassa/MainActivity.kt
index 749f4e5..005037e 100644
--- a/android/app/src/main/kotlin/kz/com/aman/kassa/MainActivity.kt
+++ b/android/app/src/main/kotlin/kz/com/aman/kassa/MainActivity.kt
@@ -1,6 +1,7 @@
package kz.com.aman.kassa
import android.app.Activity
+import android.content.ActivityNotFoundException
import android.content.ComponentName
import android.content.Intent
import android.os.Build
@@ -105,17 +106,30 @@ class MainActivity : FlutterActivity() {
}
private fun startOperation(operationType: OperationType, inputJsonData: String?) {
- val intent = Intent()
- intent.component = ComponentName("ru.m4bank.softpos.halyk", "ru.m4bank.feature.externalapplication.ExternalApplicationActivity")
- intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
- // intent.flags = Intent.FLAG_ACTIVITY_SINGLE_TOP
- intent.putExtra(externalOperationTypeKey, operationType.code)
- intent.putExtra(externalInputDataKey, inputJsonData)
- startActivityForResult(intent, externalApplicationRequestCode)
+ try {
+
+
+ val intent = Intent()
+ intent.component = ComponentName("ru.m4bank.softpos.halyk", "ru.m4bank.feature.externalapplication.ExternalApplicationActivity")
+ intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
+ // intent.flags = Intent.FLAG_ACTIVITY_SINGLE_TOP
+ intent.putExtra(externalOperationTypeKey, operationType.code)
+ intent.putExtra(externalInputDataKey, inputJsonData)
+
+ if (intent.resolveActivity(packageManager) != null) {
+ startActivityForResult(intent, externalApplicationRequestCode)
+ } else {
+ _result.error("008", "Не удалось найти подходящее приложение", "aaa")
+ }
+ } catch (e: ActivityNotFoundException) {
+ _result.error("008", "Не удалось найти подходящее приложение", "aaa")
+ }
+
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
+ try {
if (requestCode == externalApplicationRequestCode) {
println("---------------")
println(requestCode)
@@ -140,6 +154,9 @@ class MainActivity : FlutterActivity() {
// } else
// _result.success(null)
}
+ } catch (e: IllegalStateException) {
+ print("IllegalStateException")
+ }
}
diff --git a/android/build.gradle b/android/build.gradle
index 88944ab..36c0c1d 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -1,5 +1,5 @@
buildscript {
- ext.kotlin_version = '1.3.61'
+ ext.kotlin_version = '1.6.10'
repositories {
google()
jcenter()
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
index 296b146..493072b 100644
--- a/android/gradle/wrapper/gradle-wrapper.properties
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist
index 6b4c0f7..f2872cf 100644
--- a/ios/Flutter/AppFrameworkInfo.plist
+++ b/ios/Flutter/AppFrameworkInfo.plist
@@ -21,6 +21,6 @@
CFBundleVersion
1.0
MinimumOSVersion
- 8.0
+ 9.0
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index 0ad49a9..597e813 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -1,98 +1,111 @@
PODS:
- - barcode_scan (0.0.1):
+ - barcode_scan2 (0.0.1):
- Flutter
- MTBBarcodeScanner
- SwiftProtobuf
+ - bluetooth_print (0.0.1):
+ - Flutter
- charset_converter (0.0.1):
- Flutter
- device_info (0.0.1):
- Flutter
- - esys_flutter_share (0.0.1):
- - Flutter
- Flutter (1.0.0)
- - flutter_bluetooth_basic (0.0.1):
+ - flutter_blue (0.0.1):
- Flutter
+ - flutter_blue/Protos (= 0.0.1)
+ - flutter_blue/Protos (0.0.1):
+ - Flutter
+ - Protobuf (~> 3.11.4)
- FMDB (2.7.5):
- FMDB/standard (= 2.7.5)
- FMDB/standard (2.7.5)
- local_auth (0.0.1):
- Flutter
- MTBBarcodeScanner (5.0.11)
- - path_provider (0.0.1):
+ - path_provider_ios (0.0.1):
- Flutter
- "permission_handler (5.1.0+2)":
- Flutter
- - shared_preferences (0.0.1):
+ - Protobuf (3.11.4)
+ - shared_preferences_ios (0.0.1):
- Flutter
- sqflite (0.0.2):
- Flutter
- FMDB (>= 2.7.5)
- - SwiftProtobuf (1.9.0)
- - url_launcher (0.0.1):
+ - SwiftProtobuf (1.18.0)
+ - url_launcher_ios (0.0.1):
+ - Flutter
+ - vocsy_esys_flutter_share (0.0.1):
- Flutter
DEPENDENCIES:
- - barcode_scan (from `.symlinks/plugins/barcode_scan/ios`)
+ - barcode_scan2 (from `.symlinks/plugins/barcode_scan2/ios`)
+ - bluetooth_print (from `.symlinks/plugins/bluetooth_print/ios`)
- charset_converter (from `.symlinks/plugins/charset_converter/ios`)
- device_info (from `.symlinks/plugins/device_info/ios`)
- - esys_flutter_share (from `.symlinks/plugins/esys_flutter_share/ios`)
- Flutter (from `Flutter`)
- - flutter_bluetooth_basic (from `.symlinks/plugins/flutter_bluetooth_basic/ios`)
+ - flutter_blue (from `.symlinks/plugins/flutter_blue/ios`)
- local_auth (from `.symlinks/plugins/local_auth/ios`)
- - path_provider (from `.symlinks/plugins/path_provider/ios`)
+ - path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`)
- permission_handler (from `.symlinks/plugins/permission_handler/ios`)
- - shared_preferences (from `.symlinks/plugins/shared_preferences/ios`)
+ - shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`)
- sqflite (from `.symlinks/plugins/sqflite/ios`)
- - url_launcher (from `.symlinks/plugins/url_launcher/ios`)
+ - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
+ - vocsy_esys_flutter_share (from `.symlinks/plugins/vocsy_esys_flutter_share/ios`)
SPEC REPOS:
trunk:
- FMDB
- MTBBarcodeScanner
+ - Protobuf
- SwiftProtobuf
EXTERNAL SOURCES:
- barcode_scan:
- :path: ".symlinks/plugins/barcode_scan/ios"
+ barcode_scan2:
+ :path: ".symlinks/plugins/barcode_scan2/ios"
+ bluetooth_print:
+ :path: ".symlinks/plugins/bluetooth_print/ios"
charset_converter:
:path: ".symlinks/plugins/charset_converter/ios"
device_info:
:path: ".symlinks/plugins/device_info/ios"
- esys_flutter_share:
- :path: ".symlinks/plugins/esys_flutter_share/ios"
Flutter:
:path: Flutter
- flutter_bluetooth_basic:
- :path: ".symlinks/plugins/flutter_bluetooth_basic/ios"
+ flutter_blue:
+ :path: ".symlinks/plugins/flutter_blue/ios"
local_auth:
:path: ".symlinks/plugins/local_auth/ios"
- path_provider:
- :path: ".symlinks/plugins/path_provider/ios"
+ path_provider_ios:
+ :path: ".symlinks/plugins/path_provider_ios/ios"
permission_handler:
:path: ".symlinks/plugins/permission_handler/ios"
- shared_preferences:
- :path: ".symlinks/plugins/shared_preferences/ios"
+ shared_preferences_ios:
+ :path: ".symlinks/plugins/shared_preferences_ios/ios"
sqflite:
:path: ".symlinks/plugins/sqflite/ios"
- url_launcher:
- :path: ".symlinks/plugins/url_launcher/ios"
+ url_launcher_ios:
+ :path: ".symlinks/plugins/url_launcher_ios/ios"
+ vocsy_esys_flutter_share:
+ :path: ".symlinks/plugins/vocsy_esys_flutter_share/ios"
SPEC CHECKSUMS:
- barcode_scan: a5c27959edfafaa0c771905bad0b29d6d39e4479
+ barcode_scan2: 0af2bb63c81b4565aab6cd78278e4c0fa136dbb0
+ bluetooth_print: da8f47e8881a0b1f0fd8d73cd6fa84c9bd41ac28
charset_converter: 215c7b04932ec2b9ba43be96a9bc34afed3e5322
device_info: d7d233b645a32c40dfdc212de5cf646ca482f175
- esys_flutter_share: 403498dab005b36ce1f8d7aff377e81f0621b0b4
- Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c
- flutter_bluetooth_basic: 0e4e27e22b50b3a25cc1d1e131953feb4af414f4
+ Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a
+ flutter_blue: eeb381dc4727a0954dede73515f683865494b370
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
- local_auth: 25938960984c3a7f6e3253e3f8d962fdd16852bd
+ local_auth: ef62030a2731330b95df7ef1331bd15f6a64b8a6
MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb
- path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c
+ path_provider_ios: 7d7ce634493af4477d156294792024ec3485acd5
permission_handler: ccb20a9fad0ee9b1314a52b70b76b473c5f8dab0
- shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d
+ Protobuf: 176220c526ad8bd09ab1fb40a978eac3fef665f7
+ shared_preferences_ios: aef470a42dc4675a1cdd50e3158b42e3d1232b32
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
- SwiftProtobuf: ecbec1be9036d15655f6b3443a1c4ea693c97932
- url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef
+ SwiftProtobuf: c3c12645230d9b09c72267e0de89468c5543bd86
+ url_launcher_ios: 02f1989d4e14e998335b02b67a7590fa34f971af
+ vocsy_esys_flutter_share: 98b79fad467203ababde56a7289ac90da6a4ddf5
PODFILE CHECKSUM: 5aafc9b59da66d8d46f05cbbbd21261eb9757176
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index 8e18353..d0a9a9c 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 46;
+ objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
@@ -166,7 +166,7 @@
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 1020;
+ LastUpgradeCheck = 1300;
ORGANIZATIONNAME = "The Chromium Authors";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
@@ -256,31 +256,35 @@
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
"${BUILT_PRODUCTS_DIR}/FMDB/FMDB.framework",
"${BUILT_PRODUCTS_DIR}/MTBBarcodeScanner/MTBBarcodeScanner.framework",
+ "${BUILT_PRODUCTS_DIR}/Protobuf/protobuf.framework",
"${BUILT_PRODUCTS_DIR}/SwiftProtobuf/SwiftProtobuf.framework",
- "${BUILT_PRODUCTS_DIR}/barcode_scan/barcode_scan.framework",
+ "${BUILT_PRODUCTS_DIR}/barcode_scan2/barcode_scan2.framework",
"${BUILT_PRODUCTS_DIR}/charset_converter/charset_converter.framework",
"${BUILT_PRODUCTS_DIR}/device_info/device_info.framework",
- "${BUILT_PRODUCTS_DIR}/esys_flutter_share/esys_flutter_share.framework",
+ "${BUILT_PRODUCTS_DIR}/flutter_blue/flutter_blue.framework",
"${BUILT_PRODUCTS_DIR}/local_auth/local_auth.framework",
- "${BUILT_PRODUCTS_DIR}/path_provider/path_provider.framework",
- "${BUILT_PRODUCTS_DIR}/shared_preferences/shared_preferences.framework",
+ "${BUILT_PRODUCTS_DIR}/path_provider_ios/path_provider_ios.framework",
+ "${BUILT_PRODUCTS_DIR}/shared_preferences_ios/shared_preferences_ios.framework",
"${BUILT_PRODUCTS_DIR}/sqflite/sqflite.framework",
- "${BUILT_PRODUCTS_DIR}/url_launcher/url_launcher.framework",
+ "${BUILT_PRODUCTS_DIR}/url_launcher_ios/url_launcher_ios.framework",
+ "${BUILT_PRODUCTS_DIR}/vocsy_esys_flutter_share/vocsy_esys_flutter_share.framework",
);
name = "[CP] Embed Pods Frameworks";
outputPaths = (
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FMDB.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MTBBarcodeScanner.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/protobuf.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftProtobuf.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/barcode_scan.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/barcode_scan2.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/charset_converter.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/device_info.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/esys_flutter_share.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_blue.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/local_auth.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider_ios.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences_ios.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sqflite.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/url_launcher.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/url_launcher_ios.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/vocsy_esys_flutter_share.framework",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
@@ -376,7 +380,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@@ -401,7 +405,10 @@
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
@@ -463,7 +470,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@@ -512,7 +519,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@@ -538,7 +545,10 @@
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
@@ -570,7 +580,10 @@
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index a28140c..3db53b6 100644
--- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -1,6 +1,6 @@
(() => DialogService());
_log.d('Initializing DbService Service');
locator.registerLazySingleton(() => DbService.instance);
+ _log.d('Initializing BluePrintService Service');
+ locator.registerLazySingleton(() => BluePrintService());
// depencies
diff --git a/lib/core/services/blue_print_service.dart b/lib/core/services/blue_print_service.dart
new file mode 100644
index 0000000..74936aa
--- /dev/null
+++ b/lib/core/services/blue_print_service.dart
@@ -0,0 +1,173 @@
+import 'dart:io';
+import 'dart:typed_data';
+
+import 'package:aman_kassa_flutter/core/base/base_service.dart';
+import 'package:bluetooth_print/bluetooth_print.dart';
+import 'package:bluetooth_print/bluetooth_print_model.dart';
+import 'package:flutter_blue/flutter_blue.dart' as flutter_blue;
+import 'package:flutter_blue/gen/flutterblue.pb.dart' as proto;
+
+class BluePrintService extends BaseService {
+ final BluetoothPrint _bluetoothAndr = BluetoothPrint.instance;
+ flutter_blue.BluetoothDevice? _bluetoothDeviceIOS;
+ final flutter_blue.FlutterBlue _bluetoothIOS =
+ flutter_blue.FlutterBlue.instance;
+
+ final bool isAndroid = Platform.isAndroid;
+ final bool isIos = Platform.isIOS;
+ // final bool isAndroid = false;
+ // final bool isIos = true;
+
+ BluetoothDevice? _device;
+
+ Future scan() async {
+ if (isAndroid) {
+ await _bluetoothAndr.startScan(timeout: Duration(seconds: 4));
+ } else if (isIos) {
+ await _bluetoothIOS.startScan(timeout: const Duration(seconds: 5));
+ }
+ }
+
+ Future stopScan() async {
+ if (isAndroid) {
+ await _bluetoothAndr.stopScan();
+ } else if (isIos) {
+ await _bluetoothIOS.stopScan();
+ }
+ }
+
+ Stream> get scanResult {
+ if (isAndroid)
+ return _bluetoothAndr.scanResults;
+ else
+ return _bluetoothIOS.scanResults.asyncMap>(
+ (event) =>
+ Future.wait(event.toList().map((e) async => BluetoothDevice()
+ ..name = e.device.name
+ ..type = e.device.type.index
+ ..address = e.device.id.id)));
+ }
+
+ Stream get isScanning =>
+ isAndroid ? _bluetoothAndr.isScanning : _bluetoothIOS.isScanning;
+
+ Stream get state => isAndroid
+ ? _bluetoothAndr.state
+ : _bluetoothIOS.state.asyncMap((event) => event.index);
+
+ set device(BluetoothDevice device) => _device = device;
+
+ Future connect() async {
+ bool response = false;
+ if (_device == null) {
+ response = false;
+ } else {
+ // try {
+ // await _bluetoothAndr.connect(_device!);
+ // await Future.delayed(Duration(seconds: 5));
+ // response = true;
+ // } catch (e) {
+ // print('Error connect $e');
+ // response = false;
+ // }
+
+ try {
+ if (isAndroid) {
+ await _bluetoothAndr.connect(_device!);
+ } else if (isIos) {
+ _bluetoothDeviceIOS = flutter_blue.BluetoothDevice.fromProto(
+ proto.BluetoothDevice(
+ name: _device?.name ?? '',
+ remoteId: _device?.address ?? '',
+ type: proto.BluetoothDevice_Type.valueOf(_device?.type ?? 0),
+ ),
+ );
+ final List connectedDevices =
+ await _bluetoothIOS.connectedDevices;
+ final int deviceConnectedIndex = connectedDevices
+ .indexWhere((flutter_blue.BluetoothDevice bluetoothDevice) {
+ return bluetoothDevice.id == _bluetoothDeviceIOS?.id;
+ });
+ if (deviceConnectedIndex < 0) {
+ await _bluetoothDeviceIOS?.connect();
+ }
+ }
+
+ response = true;
+ _device?.connected = true;
+ return Future.value(response);
+ } on Exception catch (error) {
+ print('$runtimeType - Error $error');
+ response = false;
+ _device?.connected = false;
+ return Future.value(response);
+ }
+ }
+ return response;
+ }
+
+ Future disconnect() async {
+ bool response = false;
+ try {
+ if (isAndroid) {
+ await _bluetoothAndr.disconnect();
+ } else if (isIos) {
+ await _bluetoothDeviceIOS?.disconnect();
+ }
+
+ print('disconnected');
+ response = true;
+ } catch (e) {
+ print('Error $e');
+ response = false;
+ }
+ return response;
+ }
+
+ Future printBytes(Uint8List bytes,
+ {int chunkSizeBytes = 20, int queueSleepTimeMs = 20}) async {
+ Map config = Map();
+ final len = bytes.length;
+ List> chunks = [];
+ for (var i = 0; i < len; i += chunkSizeBytes) {
+ var end = (i + chunkSizeBytes < len) ? i + chunkSizeBytes : len;
+ chunks.add(bytes.sublist(i, end));
+ }
+
+ for (var i = 0; i < chunks.length; i += 1) {
+ if (isAndroid) {
+ await _printAndroid(chunks[i], config);
+ } else if (isIos) {
+ await _printIos(Uint8List.fromList(chunks[i]), config);
+ }
+
+ await Future.delayed(Duration(milliseconds: queueSleepTimeMs));
+ }
+
+
+
+ return true;
+ }
+
+ Future _printIos(Uint8List bytes,Map config) async {
+ final List bluetoothServices =
+ await _bluetoothDeviceIOS?.discoverServices() ??
+ [];
+ final flutter_blue.BluetoothService bluetoothService =
+ bluetoothServices.firstWhere(
+ (flutter_blue.BluetoothService service) => service.isPrimary,
+ );
+ final flutter_blue.BluetoothCharacteristic characteristic =
+ bluetoothService.characteristics.firstWhere(
+ (flutter_blue.BluetoothCharacteristic bluetoothCharacteristic) =>
+ bluetoothCharacteristic.properties.write,
+ );
+ await characteristic.write(bytes, withoutResponse: true);
+ }
+
+ Future _printAndroid(List chunk ,Map config) async {
+
+
+ await _bluetoothAndr.rawBytes(config, chunk);
+ }
+}
diff --git a/lib/redux/actions/kassa_actions.dart b/lib/redux/actions/kassa_actions.dart
index dcbdc43..f0e262c 100644
--- a/lib/redux/actions/kassa_actions.dart
+++ b/lib/redux/actions/kassa_actions.dart
@@ -36,7 +36,7 @@ Future cleanKassaItems(Store store) async {
store.dispatch(SetKassaStateAction(KassaState(kassaItems: [])));
}
-ThunkAction addCustomProductToKassaItems(String name, int count, double price, double total) {
+ThunkAction addCustomProductToKassaItems(String name, double count, double price, double total) {
return (Store store) async {
List items = store.state.kassaState!.kassaItems!;
items.add(new ProductDao(name: name, count: count, price: price, total: total));
diff --git a/lib/redux/actions/setting_actions.dart b/lib/redux/actions/setting_actions.dart
index 2a003fe..3cef5b2 100644
--- a/lib/redux/actions/setting_actions.dart
+++ b/lib/redux/actions/setting_actions.dart
@@ -1,9 +1,9 @@
import 'package:aman_kassa_flutter/redux/constants/setting_const.dart';
import 'package:aman_kassa_flutter/redux/state/setting_state.dart';
+import 'package:bluetooth_print/bluetooth_print_model.dart';
import 'package:meta/meta.dart';
import 'package:redux/redux.dart';
import 'package:redux_thunk/redux_thunk.dart';
-import 'package:flutter_bluetooth_basic/src/bluetooth_device.dart';
import '../store.dart';
@immutable
diff --git a/lib/redux/state/bank_state.dart b/lib/redux/state/bank_state.dart
index 6e2c035..f87ff9f 100644
--- a/lib/redux/state/bank_state.dart
+++ b/lib/redux/state/bank_state.dart
@@ -8,15 +8,17 @@ class BankState {
final String? login;
final String? password;
final HalykPosSession? session;
+ final bool? loading;
- BankState({this.login, this.password, this.session,});
+ BankState({this.login, this.password, this.session,this.loading});
//read hive
factory BankState.initial(BankState? payload) {
return BankState(
login: payload?.login,
password: payload?.password,
- session: payload?.session
+ session: payload?.session,
+ loading: payload?.loading
);
}
@@ -25,11 +27,13 @@ class BankState {
@required login,
@required password,
@required session,
+ @required loading,
}) {
return BankState(
login: login ?? this.login,
password: password ?? this.password,
- session: session ?? this.session
+ session: session ?? this.session,
+ loading: loading ?? this.loading
);
}
diff --git a/lib/redux/state/setting_state.dart b/lib/redux/state/setting_state.dart
index 07ee938..6072258 100644
--- a/lib/redux/state/setting_state.dart
+++ b/lib/redux/state/setting_state.dart
@@ -1,6 +1,6 @@
import 'package:aman_kassa_flutter/redux/constants/setting_const.dart';
+import 'package:bluetooth_print/bluetooth_print_model.dart';
import 'package:meta/meta.dart';
-import 'package:flutter_bluetooth_basic/src/bluetooth_device.dart';
@immutable
class SettingState {
diff --git a/lib/views/check/image_show_container.dart b/lib/views/check/image_show_container.dart
index e0a1369..6a039be 100644
--- a/lib/views/check/image_show_container.dart
+++ b/lib/views/check/image_show_container.dart
@@ -1,6 +1,7 @@
import 'dart:convert';
import 'dart:io';
import 'package:aman_kassa_flutter/core/entity/Voucher.dart';
+import 'dart:typed_data';
import 'package:aman_kassa_flutter/core/locator.dart';
import 'package:aman_kassa_flutter/core/models/check_data.dart';
import 'package:aman_kassa_flutter/core/models/check_image_modal.dart';
@@ -11,6 +12,7 @@ import 'package:aman_kassa_flutter/core/models/response.dart';
import 'package:aman_kassa_flutter/core/route_names.dart';
import 'package:aman_kassa_flutter/core/services/BankService.dart';
import 'package:aman_kassa_flutter/core/services/DataService.dart';
+import 'package:aman_kassa_flutter/core/services/blue_print_service.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/redux/actions/setting_actions.dart';
@@ -24,11 +26,10 @@ import 'package:aman_kassa_flutter/views/settings/printer/PrinterTest.dart';
import 'package:aman_kassa_flutter/views/payment/halyk_pos_service.dart';
import 'package:aman_kassa_flutter/widgets/fields/busy_button_icon.dart';
import 'package:aman_kassa_flutter/widgets/loader/Dialogs.dart';
-import 'package:esc_pos_bluetooth/esc_pos_bluetooth.dart';
+import 'package:bluetooth_print/bluetooth_print_model.dart';
import 'package:esc_pos_utils/esc_pos_utils.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
-import 'package:flutter_bluetooth_basic/flutter_bluetooth_basic.dart';
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
import 'package:vocsy_esys_flutter_share/vocsy_esys_flutter_share.dart';
import 'package:url_launcher/url_launcher.dart';
@@ -45,11 +46,10 @@ class ImageShowContainer extends StatefulWidget {
}
class _ImageShowContainerState extends State {
- final PrinterBluetoothManager printerManager = PrinterBluetoothManager();
+ final BluePrintService printerManager = locator();
final DialogService _dialogService = locator();
final BluetoothDevice? printerBtDevice =
Redux.store!.state.settingState!.printerBT;
- final BluetoothManager bluetoothManager = BluetoothManager.instance;
bool _printing = false;
@@ -57,7 +57,7 @@ class _ImageShowContainerState extends State {
if (Platform.isIOS) {
_print();
} else {
- bluetoothManager.state.listen((val) {
+ printerManager.state.listen((val) {
print("state = $val");
if (!mounted) return;
if (val == 12) {
@@ -74,6 +74,17 @@ class _ImageShowContainerState extends State {
}
}
+ @override
+ void dispose() {
+ disconnect();
+ super.dispose();
+ }
+
+
+ void disconnect() async {
+ await printerManager.disconnect();
+ }
+
void _print() async {
final SettingState state = Redux.store!.state.settingState!;
if (state.printerBT == null) {
@@ -95,32 +106,32 @@ class _ImageShowContainerState extends State {
_printing = true;
});
try {
- printerManager.selectPrinter(PrinterBluetooth(state.printerBT!));
+ printerManager.device = state.printerBT!;
+ await printerManager.connect();
PaperSize paper = state.printerPaperSize == SettingPrinterPaperM80
? PaperSize.mm80
: PaperSize.mm58;
if (SettingPrinterEncodingImage == state.printerEncoding) {
- final PosPrintResult res = await printerManager.printTicket(
- await printImageCheck(paper, widget.showModel.data!.base64Data!),
- chunkSizeBytes: chunkSizeBytes,
- queueSleepTimeMs: queueSleepTimeMs);
- if (res.value != 1) {
- _dialogService.showDialog(description: res.msg);
+ final bool res = await printerManager.printBytes(
+ Uint8List.fromList(await printImageCheck(paper, widget.showModel.data!.base64Data!)));
+ if (!res) {
+ _dialogService.showDialog(description: 'Ошибка при печати');
}
} else {
- final PosPrintResult res = await printerManager.printTicket(
- await printTextCheck(paper, state.printerEncoding!,
- jsonDecode(widget.showModel.data!.textData!)),
- chunkSizeBytes: chunkSizeBytes,
- queueSleepTimeMs: queueSleepTimeMs);
- if (res.value != 1) {
- _dialogService.showDialog(description: res.msg);
+ final bool res = await printerManager.printBytes(
+ Uint8List.fromList(await printTextCheck(paper, state.printerEncoding!,
+ jsonDecode(widget.showModel.data!.textData!)))
+ );
+ if (!res) {
+ _dialogService.showDialog(description: 'Ошибка при печати');
}
}
+
} catch (e) {
print(e);
}
- await Future.delayed(Duration(seconds: 7));
+ await Future.delayed(Duration(seconds: 15));
+
setState(() {
_printing = false;
});
diff --git a/lib/views/home/home_view_m.dart b/lib/views/home/home_view_m.dart
index 73530a7..b0d7f27 100644
--- a/lib/views/home/home_view_m.dart
+++ b/lib/views/home/home_view_m.dart
@@ -55,7 +55,7 @@ class _HomeViewState extends State with WidgetsBindingObserver {
final prevState = sp.getInt(lastKnownStateKey);
final prevStateIsNotPaused = prevState != null &&
AppLifecycleState.values[prevState] != AppLifecycleState.paused;
- final bool pinIsExist = Redux.store!.state.settingState?.pinCode != null;
+ final bool pinIsExist = Redux.store!.state.settingState?.pinCode != null && Redux.store!.state.settingState!.pinCode!.length > 3;
final bool pinSkipped = Redux.store!.state.settingState?.pinSkip == true;
print('prevStateIsNotPaused=$prevStateIsNotPaused, pinIsExist=$pinIsExist, pinSkipped=$pinSkipped');
if(prevStateIsNotPaused && pinSkipped == false && pinIsExist == true) {
@@ -92,7 +92,7 @@ class _HomeViewState extends State with WidgetsBindingObserver {
}
_checkLockPin () async {
- final bool pinIsExist = Redux.store!.state.settingState?.pinCode != null;
+ final bool pinIsExist = Redux.store!.state.settingState?.pinCode != null && Redux.store!.state.settingState!.pinCode!.length > 3;
final bool pinLocked = Redux.store!.state.settingState?.pinLocked == true;
final sp = await SharedPreferences.getInstance();
sp.remove(backgroundedTimeKey);
diff --git a/lib/views/home/tabs/kassaView/ProductAddBottomSheet.dart b/lib/views/home/tabs/kassaView/ProductAddBottomSheet.dart
index ba42553..8dfcf5a 100644
--- a/lib/views/home/tabs/kassaView/ProductAddBottomSheet.dart
+++ b/lib/views/home/tabs/kassaView/ProductAddBottomSheet.dart
@@ -75,11 +75,12 @@ class _ProductAddBottomSheetState extends State {
prefixText: ' ',
),
keyboardType: const TextInputType.numberWithOptions(
- decimal: false,
+ decimal: true,
),
inputFormatters: [
// WhitelistingTextInputFormatter.digitsOnly
- FilteringTextInputFormatter.digitsOnly
+ // FilteringTextInputFormatter.digitsOnly
+ FilteringTextInputFormatter.allow(RegExp("^[0-9.]*")),
],
controller: countController,
onChanged: calcOnChange,
@@ -159,7 +160,7 @@ class _ProductAddBottomSheetState extends State {
} else {
Redux.store!.dispatch(addCustomProductToKassaItems(
nameController.text,
- int.parse(countController.text),
+ double.parse(countController.text),
double.parse(priceController.text),
sum));
Navigator.pop(context);
diff --git a/lib/views/payment/payment_view.dart b/lib/views/payment/payment_view.dart
index ba11d34..dbee553 100644
--- a/lib/views/payment/payment_view.dart
+++ b/lib/views/payment/payment_view.dart
@@ -216,7 +216,8 @@ class _PaymentViewState extends State {
return Container();
}
return InkWell(
- onTap: () async {
+ onTap: isBusy ? null : () async {
+
var today = new DateTime.now();
var yesterday = today.subtract(new Duration(days: 1));
@@ -227,6 +228,9 @@ class _PaymentViewState extends State {
_dialogService.showDialog(description: 'Текущая смена открыта более 24 ч. Необходимо закрыть смену и открыть ее заново.');
return;
}
+ setState(() {
+ isBusy = true;
+ });
try {
await Redux.store!.dispatch(changePinSkipFromSetting(true));
@@ -238,6 +242,9 @@ class _PaymentViewState extends State {
}
} finally {
await Redux.store!.dispatch(changePinSkipFromSetting(false));
+ setState(() {
+ isBusy = false;
+ });
}
},
splashColor: halykColor.withOpacity(0.4),
diff --git a/lib/views/settings/printer/views/PrinterEncoding.dart b/lib/views/settings/printer/views/PrinterEncoding.dart
index cff273b..e80c4fc 100644
--- a/lib/views/settings/printer/views/PrinterEncoding.dart
+++ b/lib/views/settings/printer/views/PrinterEncoding.dart
@@ -1,22 +1,13 @@
-import 'dart:async';
-import 'dart:typed_data';
-import 'dart:ui' as ui;
-
import 'package:aman_kassa_flutter/core/logger.dart';
import 'package:aman_kassa_flutter/redux/actions/setting_actions.dart';
import 'package:aman_kassa_flutter/redux/store.dart';
-import 'package:esc_pos_bluetooth/esc_pos_bluetooth.dart';
-import 'package:esc_pos_utils/esc_pos_utils.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart' hide Image;
import 'package:flutter/rendering.dart';
-import 'package:flutter_bluetooth_basic/flutter_bluetooth_basic.dart';
-import 'package:intl/intl.dart';
import 'package:logger/logger.dart';
-
import '../data/settings_envi.dart';
diff --git a/lib/views/settings/printer/views/PrinterPaperSize.dart b/lib/views/settings/printer/views/PrinterPaperSize.dart
index 39453be..0be129d 100644
--- a/lib/views/settings/printer/views/PrinterPaperSize.dart
+++ b/lib/views/settings/printer/views/PrinterPaperSize.dart
@@ -1,20 +1,11 @@
-import 'dart:async';
-import 'dart:typed_data';
-import 'dart:ui' as ui;
-
import 'package:aman_kassa_flutter/core/logger.dart';
import 'package:aman_kassa_flutter/redux/actions/setting_actions.dart';
import 'package:aman_kassa_flutter/redux/store.dart';
-import 'package:esc_pos_bluetooth/esc_pos_bluetooth.dart';
-import 'package:esc_pos_utils/esc_pos_utils.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart' hide Image;
import 'package:flutter/rendering.dart';
-
-import 'package:flutter_bluetooth_basic/flutter_bluetooth_basic.dart';
-import 'package:intl/intl.dart';
import 'package:logger/logger.dart';
import '../data/settings_envi.dart';
diff --git a/lib/views/settings/printer/views/PrinterSelect.dart b/lib/views/settings/printer/views/PrinterSelect.dart
index cccd885..ff12a7b 100644
--- a/lib/views/settings/printer/views/PrinterSelect.dart
+++ b/lib/views/settings/printer/views/PrinterSelect.dart
@@ -1,25 +1,16 @@
-import 'dart:async';
-import 'dart:typed_data';
-import 'dart:ui' as ui;
-
+import 'package:aman_kassa_flutter/core/locator.dart';
import 'package:aman_kassa_flutter/core/logger.dart';
+import 'package:aman_kassa_flutter/core/services/blue_print_service.dart';
import 'package:aman_kassa_flutter/redux/actions/setting_actions.dart';
import 'package:aman_kassa_flutter/redux/store.dart';
+import 'package:bluetooth_print/bluetooth_print_model.dart';
-import 'package:esc_pos_bluetooth/esc_pos_bluetooth.dart';
-import 'package:esc_pos_utils/esc_pos_utils.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart' hide Image;
import 'package:flutter/rendering.dart';
-
-import 'package:flutter_bluetooth_basic/flutter_bluetooth_basic.dart';
-import 'package:intl/intl.dart';
import 'package:logger/logger.dart';
-import '../PrinterTest.dart';
-
-
class PrinterSelectView extends StatefulWidget {
PrinterSelectView({Key? key, this.title}) : super(key: key);
final String? title;
@@ -30,16 +21,14 @@ class PrinterSelectView extends StatefulWidget {
}
class _PrinterSelectViewState extends State {
- PrinterBluetoothManager printerManager = PrinterBluetoothManager();
- List _devices = [];
+ BluePrintService printerManager = locator();
+ List _devices = [];
Logger _logger = getLogger('PrinterSelectView');
@override
void initState() {
super.initState();
-
- printerManager.scanResults.listen((devices) async {
- // print('UI: Devices found ${devices.length}');
+ printerManager.scanResult.listen((devices) async {
setState(() {
_devices = devices;
});
@@ -51,15 +40,15 @@ class _PrinterSelectViewState extends State {
setState(() {
_devices = [];
});
- printerManager.startScan(Duration(seconds: 4));
+ printerManager.scan();
}
void _stopScanDevices() {
printerManager.stopScan();
}
- void _selectPrinter(PrinterBluetooth printer, BuildContext context, ) async {
- printerManager.selectPrinter(printer);
+ void _selectPrinter(BluetoothDevice printer, BuildContext context, ) async {
+ printerManager.device = printer;
_logger.i(printer.name);
_logger.i(printer.address);
@@ -71,27 +60,6 @@ class _PrinterSelectViewState extends State {
await Redux.store!.dispatch(selectPrinterFromSetting(device));
Navigator.of(context).pop(false);
}
-
- void _testPrint(PrinterBluetooth printer) async {
- printerManager.selectPrinter(printer);
-
- // TODO Don't forget to choose printer's paper
- const PaperSize paper = PaperSize.mm58;
-
- // TEST PRINT
- // final PosPrintResult res =
- // await printerManager.printTicket(await testTicket(paper), queueSleepTimeMs: 50);
-
- final PosPrintResult res =
- await printerManager.printTicket(
- await testTicketImage(paper),
- chunkSizeBytes: 1024,
- queueSleepTimeMs: 50
- );
-
-
- }
-
final key = GlobalKey();
@override
@@ -140,7 +108,7 @@ class _PrinterSelectViewState extends State {
);
}),
floatingActionButton: StreamBuilder(
- stream: printerManager.isScanningStream,
+ stream: printerManager.isScanning,
initialData: false,
builder: (c, snapshot) {
if (snapshot.data != null) {
diff --git a/lib/views/settings/setting_printer_view.dart b/lib/views/settings/setting_printer_view.dart
index 5e65b2a..7ad4f23 100644
--- a/lib/views/settings/setting_printer_view.dart
+++ b/lib/views/settings/setting_printer_view.dart
@@ -2,8 +2,8 @@ import 'dart:io';
import 'dart:typed_data';
import 'package:aman_kassa_flutter/core/models/dialog_models.dart';
+import 'package:aman_kassa_flutter/core/services/blue_print_service.dart';
import 'package:aman_kassa_flutter/widgets/fields/busy_button_icon.dart';
-import 'package:flutter_bluetooth_basic/flutter_bluetooth_basic.dart';
import 'package:aman_kassa_flutter/core/locator.dart';
import 'package:aman_kassa_flutter/core/logger.dart';
import 'package:aman_kassa_flutter/core/route_names.dart';
@@ -12,9 +12,6 @@ import 'package:aman_kassa_flutter/core/services/navigator_service.dart';
import 'package:aman_kassa_flutter/redux/constants/setting_const.dart';
import 'package:aman_kassa_flutter/redux/state/setting_state.dart';
import 'package:aman_kassa_flutter/redux/store.dart';
-import 'package:aman_kassa_flutter/shared/app_colors.dart';
-import 'package:aman_kassa_flutter/widgets/fields/aman_icon_button_horizontal.dart';
-import 'package:esc_pos_bluetooth/esc_pos_bluetooth.dart';
import 'package:esc_pos_utils/esc_pos_utils.dart';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
@@ -34,8 +31,7 @@ class SettingPrinterView extends StatefulWidget {
class _SettingPrinterViewState extends State {
NavigatorService _navigatorService = locator();
final DialogService _dialogService = locator();
- final PrinterBluetoothManager printerManager = PrinterBluetoothManager();
- final BluetoothManager bluetoothManager = BluetoothManager.instance;
+ final BluePrintService printerManager = locator();
final Logger log = getLogger('SettingPrinterView');
bool _printing = false;
@@ -44,9 +40,16 @@ class _SettingPrinterViewState extends State {
void initState() {
super.initState();
_permission();
-
+ }
+ @override
+ void dispose() {
+ disconnect();
+ super.dispose();
}
+ disconnect() async {
+ await printerManager.disconnect();
+ }
void _testPrint() async {
setState(() {
@@ -54,7 +57,13 @@ class _SettingPrinterViewState extends State {
});
try {
final SettingState state = Redux.store!.state.settingState!;
- printerManager.selectPrinter(PrinterBluetooth(state.printerBT!));
+ printerManager.device = state.printerBT!;
+
+ await disconnect();
+ await Future.delayed(Duration(seconds: 1));
+
+ await printerManager.connect();
+ await Future.delayed(Duration(seconds: 3));
bool isIos = Platform.isIOS;
int chunkSizeBytes = 3096;
int queueSleepTimeMs = 100;
@@ -68,34 +77,33 @@ class _SettingPrinterViewState extends State {
log.i(queueSleepTimeMs);
// TODO Don't forget to choose printer's paper
- PaperSize paper = state.printerPaperSize == SettingPrinterPaperM80 ? PaperSize.mm80 : PaperSize.mm58;
+ PaperSize paper = state.printerPaperSize == SettingPrinterPaperM80
+ ? PaperSize.mm80
+ : PaperSize.mm58;
if (SettingPrinterEncodingImage == state.printerEncoding) {
- final PosPrintResult res = await printerManager.printTicket(
- await testTicketImage(paper),
+ final bool res = await printerManager.printBytes(
+ Uint8List.fromList(await testTicketImage(paper)),
chunkSizeBytes: chunkSizeBytes,
- queueSleepTimeMs: queueSleepTimeMs
- );
- _dialogService.showDialog(description: res.msg);
+ queueSleepTimeMs: queueSleepTimeMs);
+ //_dialogService.showDialog(description: 'result is $res');
} else {
- final PosPrintResult res = await printerManager.printTicket(
- await printTextCheck(paper, state.printerEncoding!, exampleJson['check_text']),
+ final bool res = await printerManager.printBytes(
+ Uint8List.fromList(await printTextCheck(
+ paper, state.printerEncoding!, exampleJson['check_text'])),
chunkSizeBytes: chunkSizeBytes,
- queueSleepTimeMs: queueSleepTimeMs
- );
- _dialogService.showDialog(description: res.msg);
+ queueSleepTimeMs: queueSleepTimeMs);
+ //_dialogService.showDialog(description: 'result is $res');
}
} catch (e) {
print('ERROR');
print(e);
}
-
- //7 sec safe disconnect
- await Future.delayed(Duration(seconds: 7));
+ //10 sec safe disconnect
+ await Future.delayed(Duration(seconds: 14));
setState(() {
_printing = false;
});
-
}
@override
@@ -122,13 +130,17 @@ class _SettingPrinterViewState extends State {
}),
SettingItem(
title: 'Кодировка',
- name: vm.printerEncoding != null ? encoding[vm.printerEncoding] : '' ,
+ name: vm.printerEncoding != null
+ ? encoding[vm.printerEncoding]
+ : '',
onTap: () {
_navigatorService.push(SettingsPrinterEncodingRoute);
}),
SettingItem(
title: 'Ширина ленты',
- name: vm.printerPaperSize != null ? paperSize[vm.printerPaperSize] : null ,
+ name: vm.printerPaperSize != null
+ ? paperSize[vm.printerPaperSize]
+ : null,
onTap: () {
_navigatorService.push(SettingsPrinterPaperRoute);
}),
@@ -161,24 +173,24 @@ class _SettingPrinterViewState extends State {
//Метод для получения постоянного доступа к местополения
//только для Android
void _permission() async {
- if( Platform.isAndroid) {
+ if (Platform.isAndroid) {
var status = await Permission.location.status;
log.i(status);
- if ( status.isDenied || status.isPermanentlyDenied) {
+ if (status.isDenied || status.isPermanentlyDenied) {
DialogResponse response = await _dialogService.showConfirmationDialog(
title: 'Доступ',
- description: 'Для поиска устройств Bluetooth необходимо предоставить доступ к отслеживанию геолокации.',
+ description:
+ 'Для поиска устройств Bluetooth необходимо предоставить доступ к отслеживанию геолокации.',
cancelTitle: 'Нет',
confirmationTitle: 'Хорошо',
);
if (response.confirmed) {
- if (await Permission.location
- .request()
- .isGranted) {
+ if (await Permission.location.request().isGranted) {
print('Granted');
} else {
_dialogService.showDialog(
- description: 'Необходимо указать постоянный доступ к местоположении для поиска принтера');
+ description:
+ 'Необходимо указать постоянный доступ к местоположении для поиска принтера');
_navigatorService.pop();
}
} else {
@@ -190,22 +202,20 @@ class _SettingPrinterViewState extends State {
}
void _startInitialPrint() async {
-
-
if (Platform.isIOS) {
_testPrint();
} else {
- bluetoothManager.state.listen((val) {
+ printerManager.state.listen((val) {
print("state = $val");
if (!mounted) return;
if (val == 12) {
print('on');
_testPrint();
-
} else if (val == 10) {
print('off');
_dialogService.showDialog(
- description: 'Отсутвует соеденение Bluetooth или он отключен' , title: 'Bluetooth');
+ description: 'Отсутвует соеденение Bluetooth или он отключен',
+ title: 'Bluetooth');
}
print('state is $val');
});
diff --git a/pubspec.lock b/pubspec.lock
index 36d7daf..d41b29d 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -29,6 +29,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "4.2.0"
+ bluetooth_print:
+ dependency: "direct main"
+ description:
+ path: "../bluetooth_print"
+ relative: true
+ source: path
+ version: "3.0.1"
boolean_selector:
dependency: transitive
description:
@@ -56,7 +63,7 @@ packages:
name: charset_converter
url: "https://pub.dartlang.org"
source: hosted
- version: "2.0.0"
+ version: "2.1.0"
clock:
dependency: transitive
description:
@@ -71,6 +78,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.15.0"
+ convert:
+ dependency: transitive
+ description:
+ name: convert
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "3.0.1"
crypto:
dependency: transitive
description:
@@ -113,13 +127,6 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.3"
- esc_pos_bluetooth:
- dependency: "direct main"
- description:
- name: esc_pos_bluetooth
- url: "https://pub.dartlang.org"
- source: hosted
- version: "0.4.1"
esc_pos_utils:
dependency: "direct main"
description:
@@ -160,13 +167,13 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
- flutter_bluetooth_basic:
- dependency: transitive
+ flutter_blue:
+ dependency: "direct main"
description:
- name: flutter_bluetooth_basic
+ name: flutter_blue
url: "https://pub.dartlang.org"
source: hosted
- version: "0.1.7"
+ version: "0.8.0"
flutter_lock_screen:
dependency: "direct main"
description:
@@ -194,7 +201,7 @@ packages:
name: flutter_screenutil
url: "https://pub.dartlang.org"
source: hosted
- version: "5.1.0"
+ version: "5.3.1"
flutter_test:
dependency: "direct dev"
description: flutter
@@ -225,7 +232,7 @@ packages:
name: google_fonts
url: "https://pub.dartlang.org"
source: hosted
- version: "2.2.0"
+ version: "2.3.1"
hex:
dependency: transitive
description:
@@ -288,7 +295,7 @@ packages:
name: local_auth
url: "https://pub.dartlang.org"
source: hosted
- version: "1.1.10"
+ version: "1.1.11"
logger:
dependency: "direct main"
description:
@@ -310,6 +317,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.11"
+ material_color_utilities:
+ dependency: transitive
+ description:
+ name: material_color_utilities
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.1.3"
material_design_icons_flutter:
dependency: "direct main"
description:
@@ -344,7 +358,7 @@ packages:
name: path_provider
url: "https://pub.dartlang.org"
source: hosted
- version: "2.0.8"
+ version: "2.0.9"
path_provider_android:
dependency: transitive
description:
@@ -491,7 +505,7 @@ packages:
name: responsive_builder
url: "https://pub.dartlang.org"
source: hosted
- version: "0.4.1"
+ version: "0.4.2"
rxdart:
dependency: transitive
description:
@@ -505,7 +519,7 @@ packages:
name: shared_preferences
url: "https://pub.dartlang.org"
source: hosted
- version: "2.0.12"
+ version: "2.0.13"
shared_preferences_android:
dependency: transitive
description:
@@ -622,7 +636,7 @@ packages:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
- version: "0.4.3"
+ version: "0.4.8"
typed_data:
dependency: transitive
description:
@@ -636,7 +650,7 @@ packages:
name: url_launcher
url: "https://pub.dartlang.org"
source: hosted
- version: "6.0.18"
+ version: "6.0.20"
url_launcher_android:
dependency: transitive
description:
@@ -723,4 +737,4 @@ packages:
version: "5.3.1"
sdks:
dart: ">=2.15.0 <3.0.0"
- flutter: ">=2.5.0"
+ flutter: ">=2.10.0-0"
diff --git a/pubspec.yaml b/pubspec.yaml
index 49a1894..99b1513 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -12,32 +12,35 @@ dependencies:
redux_thunk: ^0.4.0
redux_persist: ^0.9.0
redux_persist_flutter: ^0.9.0
- responsive_builder: ^0.4.1
+ responsive_builder: ^0.4.2
provider: ^6.0.2
logger: ^1.1.0
get_it: ^7.2.0
equatable: ^2.0.3
http: ^0.13.4
sqflite: ^2.0.2
- path_provider: ^2.0.8
- google_fonts: ^2.2.0
+ path_provider: ^2.0.9
+ google_fonts: ^2.3.1
material_design_icons_flutter: ^5.0.6595
intl: ^0.17.0
barcode_scan2: ^4.2.0
device_info: ^2.0.3
vocsy_esys_flutter_share: ^1.0.0
auto_size_text: ^3.0.0
- url_launcher: ^6.0.18
+ url_launcher: ^6.0.20
qr_flutter: ^4.0.0
mask_text_input_formatter: ^2.1.0
- flutter_screenutil: ^5.1.0
- shared_preferences: ^2.0.12
+ flutter_screenutil: ^5.3.1
+ shared_preferences: ^2.0.13
flutter_lock_screen: ^2.0.1
- local_auth: ^1.1.10
- esc_pos_bluetooth: ^0.4.1
- esc_pos_utils: ^1.1.0 # no edit for esc_pos_bluetooth: ^0.2.8
+ local_auth: ^1.1.11
+ #esc_pos_bluetooth: ^0.4.1
+ esc_pos_utils: ^1.1.0
charset_converter: ^2.0.0
permission_handler: ^8.3.0
+ bluetooth_print:
+ path: ../bluetooth_print
+ flutter_blue: ^0.8.0
dev_dependencies:
flutter_test:
sdk: flutter