diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 9f15ccf..8d0d5b4 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -14,6 +14,8 @@ PODS: - MTBBarcodeScanner (5.0.11) - path_provider (0.0.1): - Flutter + - path_provider_linux (0.0.1): + - Flutter - path_provider_macos (0.0.1): - Flutter - shared_preferences (0.0.1): @@ -26,6 +28,12 @@ PODS: - Flutter - FMDB (~> 2.7.2) - SwiftProtobuf (1.9.0) + - url_launcher (0.0.1): + - Flutter + - url_launcher_macos (0.0.1): + - Flutter + - url_launcher_web (0.0.1): + - Flutter DEPENDENCIES: - barcode_scan (from `.symlinks/plugins/barcode_scan/ios`) @@ -33,11 +41,15 @@ DEPENDENCIES: - esys_flutter_share (from `.symlinks/plugins/esys_flutter_share/ios`) - Flutter (from `Flutter`) - path_provider (from `.symlinks/plugins/path_provider/ios`) + - path_provider_linux (from `.symlinks/plugins/path_provider_linux/ios`) - path_provider_macos (from `.symlinks/plugins/path_provider_macos/ios`) - shared_preferences (from `.symlinks/plugins/shared_preferences/ios`) - shared_preferences_macos (from `.symlinks/plugins/shared_preferences_macos/ios`) - shared_preferences_web (from `.symlinks/plugins/shared_preferences_web/ios`) - sqflite (from `.symlinks/plugins/sqflite/ios`) + - url_launcher (from `.symlinks/plugins/url_launcher/ios`) + - url_launcher_macos (from `.symlinks/plugins/url_launcher_macos/ios`) + - url_launcher_web (from `.symlinks/plugins/url_launcher_web/ios`) SPEC REPOS: trunk: @@ -56,6 +68,8 @@ EXTERNAL SOURCES: :path: Flutter path_provider: :path: ".symlinks/plugins/path_provider/ios" + path_provider_linux: + :path: ".symlinks/plugins/path_provider_linux/ios" path_provider_macos: :path: ".symlinks/plugins/path_provider_macos/ios" shared_preferences: @@ -66,6 +80,12 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/shared_preferences_web/ios" sqflite: :path: ".symlinks/plugins/sqflite/ios" + url_launcher: + :path: ".symlinks/plugins/url_launcher/ios" + url_launcher_macos: + :path: ".symlinks/plugins/url_launcher_macos/ios" + url_launcher_web: + :path: ".symlinks/plugins/url_launcher_web/ios" SPEC CHECKSUMS: barcode_scan: a5c27959edfafaa0c771905bad0b29d6d39e4479 @@ -75,12 +95,16 @@ SPEC CHECKSUMS: FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c + path_provider_linux: 4d630dc393e1f20364f3e3b4a2ff41d9674a84e4 path_provider_macos: f760a3c5b04357c380e2fddb6f9db6f3015897e0 shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d shared_preferences_macos: f3f29b71ccbb56bf40c9dd6396c9acf15e214087 shared_preferences_web: 141cce0c3ed1a1c5bf2a0e44f52d31eeb66e5ea9 sqflite: 4001a31ff81d210346b500c55b17f4d6c7589dd0 SwiftProtobuf: ecbec1be9036d15655f6b3443a1c4ea693c97932 + url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef + url_launcher_macos: fd7894421cd39320dce5f292fc99ea9270b2a313 + url_launcher_web: e5527357f037c87560776e36436bf2b0288b965c PODFILE CHECKSUM: c34e2287a9ccaa606aeceab922830efb9a6ff69a diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index f7b1ce8..83139e1 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -264,6 +264,7 @@ "${BUILT_PRODUCTS_DIR}/path_provider/path_provider.framework", "${BUILT_PRODUCTS_DIR}/shared_preferences/shared_preferences.framework", "${BUILT_PRODUCTS_DIR}/sqflite/sqflite.framework", + "${BUILT_PRODUCTS_DIR}/url_launcher/url_launcher.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( @@ -277,6 +278,7 @@ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sqflite.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/url_launcher.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -390,7 +392,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 3; + CURRENT_PROJECT_VERSION = 5; DEVELOPMENT_TEAM = 94BM6VL7L8; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -529,7 +531,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 3; + CURRENT_PROJECT_VERSION = 5; DEVELOPMENT_TEAM = 94BM6VL7L8; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -561,7 +563,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 3; + CURRENT_PROJECT_VERSION = 5; DEVELOPMENT_TEAM = 94BM6VL7L8; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 78ece49..01b9c8c 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -20,6 +20,10 @@ ???? CFBundleVersion $(CURRENT_PROJECT_VERSION) + LSApplicationQueriesSchemes + + whatsapp + LSRequiresIPhoneOS NSCameraUsageDescription diff --git a/lib/views/check/image_show_container.dart b/lib/views/check/image_show_container.dart index d67607e..7694fe9 100644 --- a/lib/views/check/image_show_container.dart +++ b/lib/views/check/image_show_container.dart @@ -1,4 +1,5 @@ import 'dart:convert'; +import 'dart:io'; import 'package:aman_kassa_flutter/core/locator.dart'; import 'package:aman_kassa_flutter/core/models/dialog_models.dart'; import 'package:aman_kassa_flutter/core/services/dialog_service.dart'; @@ -8,7 +9,7 @@ import 'package:aman_kassa_flutter/widgets/fields/busy_button.dart'; import 'package:flutter/material.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; import 'package:esys_flutter_share/esys_flutter_share.dart'; -import 'package:flutter_open_whatsapp/flutter_open_whatsapp.dart'; +import 'package:url_launcher/url_launcher.dart'; class ImageShowContainer extends StatelessWidget { final ImageShowModel data; @@ -28,7 +29,6 @@ class ImageShowContainer extends StatelessWidget { floatingActionButton: MyFloatingActionButton(data), ); } - } Padding imageFromBase64String(String base64String) { @@ -77,60 +77,96 @@ class _MyFloatingActionButtonState extends State { Widget build(BuildContext context) { return showFab ? FloatingActionButton( - child: Icon(Icons.share), - onPressed: () { - var bottomSheetController = showBottomSheet( - context: context, - builder: (bottomSheetContext) => Container( - padding: const EdgeInsets.symmetric(horizontal: 10.0 ), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.all(Radius.circular(15)), - boxShadow: [ - BoxShadow( - blurRadius: 10, color: Colors.grey[300], spreadRadius: 5) - ]), - //color: Colors.grey[900], - height: 200, - child: Column( - children: [ - //verticalSpaceSmall, - //BusyButton(title: 'Электронная почта', onPressed: shareFile , mainColor: primaryColor, icon: Icons.mail, enabled: false, ), - verticalSpaceSmall, - BusyButton(title: 'WhatsApp', onPressed: callWhatsApp , mainColor: greenColor, icon: MdiIcons.whatsapp,), - verticalSpaceSmall, - BusyButton(title: '', onPressed: shareFile , mainColor: yellowColor, icon: Icons.share,), - ], - ) - )); - showFoatingActionButton(false); - bottomSheetController.closed.then((value) { - showFoatingActionButton(true); - }); - }, - ): Container() ; + child: Icon(Icons.share), + onPressed: () { + var bottomSheetController = showBottomSheet( + context: context, + builder: (bottomSheetContext) => Container( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.all(Radius.circular(15)), + boxShadow: [ + BoxShadow( + blurRadius: 10, + color: Colors.grey[300], + spreadRadius: 5) + ]), + //color: Colors.grey[900], + height: 200, + child: Column( + children: [ + //verticalSpaceSmall, + //BusyButton(title: 'Электронная почта', onPressed: shareFile , mainColor: primaryColor, icon: Icons.mail, enabled: false, ), + verticalSpaceSmall, + BusyButton( + title: 'WhatsApp', + onPressed: callWhatsApp, + mainColor: greenColor, + icon: MdiIcons.whatsapp, + ), + verticalSpaceSmall, + BusyButton( + title: '', + onPressed: shareFile, + mainColor: yellowColor, + icon: Icons.share, + ), + ], + ))); + showFoatingActionButton(false); + bottomSheetController.closed.then((value) { + showFoatingActionButton(true); + }); + }, + ) + : Container(); } void shareFile() async { try { - await Share.file( - 'Aman Kassa', 'aman_kassa_check.png', base64Decode(widget.data.data), - 'image/png'); + await Share.file('Aman Kassa', 'aman_kassa_check.png', + base64Decode(widget.data.data), 'image/png'); } catch (e) { print('error: $e'); } } + void callWhatsApp() async { DialogResponse response = await _dialog.showConfirmationDialogInput( - description: 'Номер телефона', - cancelTitle: 'Отмена', - confirmationTitle: 'Отправить', - ); - if (response.confirmed) { - String phoneNumber = response.responseText; - FlutterOpenWhatsapp.sendSingleMessage(phoneNumber, "Спасибо что выбераете нас \r\n https://picsum.photos/200/300 "); - } + description: 'Номер телефона', + cancelTitle: 'Отмена', + confirmationTitle: 'Отправить', + ); + if (response.confirmed) { + String phoneNumber = response.responseText; + String msg = "Спасибо за покупку! \r\n https://picsum.photos/200/300 "; + + launchWhatsApp(phone: phoneNumber, message: msg); + //FlutterOpenWhatsapp.sendSingleMessage(phoneNumber, "Спасибо что выбераете нас \r\n https://picsum.photos/200/300 "); + } } + + void launchWhatsApp({ + @required String phone, + @required String message, + }) async { + String url() { + if (Platform.isIOS) { + return "whatsapp://wa.me/$phone/?text=$message"; + } else { + return "whatsapp://send?phone=$phone&text=$message"; + } + } + + if (await canLaunch(url())) { + await launch(url()); + } else { + //throw 'Could not launch ${url()}'; + _dialog.showDialog(description: 'Отсутсвует приложение WhatsApp'); + } + } + void showFoatingActionButton(bool value) { setState(() { showFab = value; diff --git a/lib/widgets/dialog_manager.dart b/lib/widgets/dialog_manager.dart index be57aff..6395604 100644 --- a/lib/widgets/dialog_manager.dart +++ b/lib/widgets/dialog_manager.dart @@ -40,7 +40,20 @@ class _DialogManagerState extends State { showDialog( context: context, builder: (context) => AlertDialog( - title: Text(request.title), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(5.0), + ), + actionsPadding: const EdgeInsets.only(right: 15, bottom: 5), + title: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + request.title, + style: TextStyle(fontWeight: FontWeight.bold), + ), + //Divider(), + ], + ), content: Text(request.description), actions: [ if (isConfirmationDialog) @@ -88,7 +101,7 @@ class _DialogManagerState extends State { //Text(request.description), TextField( autofocus: true, - decoration: InputDecoration(labelText: request.description ), + decoration: InputDecoration(labelText: request.description), controller: controller, onSubmitted: (value) { _dialogService diff --git a/pubspec.lock b/pubspec.lock index 5820477..02867b2 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -118,13 +118,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_open_whatsapp: - dependency: "direct main" - description: - name: flutter_open_whatsapp - url: "https://pub.dartlang.org" - source: hosted - version: "0.1.2" flutter_redux: dependency: "direct main" description: @@ -275,6 +268,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.2.1" + platform_detect: + dependency: transitive + description: + name: platform_detect + url: "https://pub.dartlang.org" + source: hosted + version: "1.4.0" plugin_platform_interface: dependency: transitive description: @@ -303,6 +303,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "4.1.3" + pub_semver: + dependency: transitive + description: + name: pub_semver + url: "https://pub.dartlang.org" + source: hosted + version: "1.4.4" quiver: dependency: transitive description: @@ -448,6 +455,34 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.6" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + url: "https://pub.dartlang.org" + source: hosted + version: "5.4.11" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.1+7" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.7" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.2" vector_math: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 93d8936..db09be0 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: aman_kassa_flutter description: A new Flutter project. -version: 1.0.0+3 +version: 1.0.0+5 environment: sdk: '>=2.3.0 <3.0.0' dependencies: @@ -27,7 +27,7 @@ dependencies: device_info: ^0.4.2+4 esys_flutter_share: ^1.0.2 auto_size_text: ^2.1.0 - flutter_open_whatsapp: ^0.1.2 + url_launcher: ^5.4.11 dev_dependencies: flutter_test: sdk: flutter