aman-kassa-flutter/lib/views/check/image_show_container.dart

187 lines
6.4 KiB
Dart

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/route_names.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/shared/app_colors.dart';
import 'package:aman_kassa_flutter/shared/ui_helpers.dart';
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:url_launcher/url_launcher.dart';
class ImageShowContainer extends StatelessWidget {
final ImageShowModel data;
ImageShowContainer(this.data);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
//backgroundColor: fillColor,
title: Text(data.title),
),
body: ListView(
children: <Widget>[imageFromBase64String(data.data)],
),
floatingActionButton: MyFloatingActionButton(data),
);
}
}
Padding imageFromBase64String(String base64String) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 10.0, horizontal: 8.0),
child: Image.memory(base64Decode(base64String)),
);
}
class ImageShowModel {
final String data;
final String title;
final String url;
ImageShowModel({ this.data, this.title, this.url});
}
class MyFloatingActionButton extends StatefulWidget {
final ImageShowModel data;
MyFloatingActionButton(this.data);
@override
_MyFloatingActionButtonState createState() => _MyFloatingActionButtonState();
}
class _MyFloatingActionButtonState extends State<MyFloatingActionButton> {
bool showFab = true;
DialogService _dialog = locator<DialogService>();
NavigatorService _navigatorService = locator<NavigatorService>();
// String _batteryLevel = 'Unknown battery level.';
// static const platform = const MethodChannel('samples.flutter.dev/battery');
//
// Future<void> _getBatteryLevel() async {
// String batteryLevel;
// try {
// final int result = await platform.invokeMethod('sendMessage');
// print(result);
// batteryLevel = 'Battery level at $result % .';
// } on PlatformException catch (e) {
// batteryLevel = "Failed to get battery level: '${e.message}'.";
// }
//
// setState(() {
// _batteryLevel = batteryLevel;
// });
// }
@override
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: 260,
child: Column(
children: <Widget>[
verticalSpaceSmall,
BusyButton(
title: 'WhatsApp',
onPressed: callWhatsApp,
mainColor: greenColor,
icon: MdiIcons.whatsapp,
enabled: widget.data.url != null,
),
verticalSpaceSmall,
BusyButton(title: 'QR-код чека', onPressed: qrGenerate , mainColor: primaryColor, icon: MdiIcons.qrcode, enabled: widget.data.url != null, ),
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');
} catch (e) {
print('error: $e');
}
}
void qrGenerate() async {
_navigatorService.push(QrViewRoute, arguments: ImageShowModel(data: widget.data.url, title: 'Спасибо за покупку'));
}
void callWhatsApp() async {
DialogResponse response = await _dialog.showConfirmationDialogInput(
description: 'Номер телефона',
cancelTitle: 'Отмена',
confirmationTitle: 'Отправить',
);
if (response.confirmed) {
String phoneNumber = response.responseText;
String msg = "Спасибо за покупку! \r\n ${widget.data.url} ";
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() {
//return "whatsapp://send?phone=$phone&text=$message";
if (Platform.isIOS) {
return "whatsapp://wa.me/$phone/?text=${Uri.encodeFull(message)}";
} else {
return "whatsapp://send?phone=$phone&text=${Uri.encodeFull(message)}";
}
}
print(url());
if (await canLaunch(url())) {
await launch(url());
} else {
//throw 'Could not launch ${url()}';
_dialog.showDialog(description: 'Отсутсвует приложение WhatsApp');
}
}
void showFoatingActionButton(bool value) {
setState(() {
showFab = value;
});
}
}