From 3cf530d2cb88d02e32e7b10c7df0e23085bcdfc5 Mon Sep 17 00:00:00 2001 From: PhyoThandar Date: Tue, 20 Oct 2020 18:45:18 +0630 Subject: [PATCH] fix --- lib/pages/invoice/payment_page.dart | 122 +++++++++++++++--- lib/pages/invoice/payment_pdf_screen.dart | 22 ++-- .../rates/discount_by_weight_editor.dart | 10 +- lib/pages/rates/shipment_rates_calculate.dart | 46 +++---- lib/pages/widgets/image_file_picker.dart | 6 +- 5 files changed, 140 insertions(+), 66 deletions(-) diff --git a/lib/pages/invoice/payment_page.dart b/lib/pages/invoice/payment_page.dart index db18052..d05bd37 100644 --- a/lib/pages/invoice/payment_page.dart +++ b/lib/pages/invoice/payment_page.dart @@ -13,6 +13,7 @@ import 'package:fcs/pages/widgets/show_img.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:image_picker/image_picker.dart'; import 'package:intl/intl.dart'; class PaymentPage extends StatefulWidget { @@ -57,15 +58,20 @@ class _PaymentPageState extends State { final receiptFileBox = Row(children: [ LocalText(context, 'pm.attachment', fontSize: 16, color: Colors.grey), - IconButton( - icon: Icon(Icons.attachment, color: primaryColor), - onPressed: () { - modelBottomSheet(context, onFile: (file) { - setState(() { - _file = file; - }); - }); - }) + _file != null + ? InkWell( + onTap: () async { + await _dialog(context); + }, + child: Chip( + label: Icon(Icons.image, color: primaryColor), + ), + ) + : IconButton( + icon: Icon(Icons.attachment, color: primaryColor), + onPressed: () async { + await _dialog(context); + }), ]); final payBox = Row(mainAxisAlignment: MainAxisAlignment.center, children: [ @@ -133,18 +139,23 @@ class _PaymentPageState extends State { children: [ Expanded(flex: 2, child: Text('${r.date}')), Expanded( - flex: 2, - child: InkWell( - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => ShowImage( - localImage: 'assets/logo.jpg', - url: null, - fileName: 'image'))); - }, - child: Icon(Icons.attachment, color: primaryColor))), + flex: 2, + child: InkWell( + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => ShowImage( + // localImage: attachment.value.fileUrl, + localImage: 'assets/logo.jpg', + url: null, + fileName: 'image'))); + }, + child: Chip( + label: Icon(Icons.image, color: primaryColor), + ), + ), + ), Expanded(flex: 1, child: Center(child: Text('pending'))), Expanded(flex: 1, child: Center(child: Text('\$ ${r.amount}'))), ], @@ -218,4 +229,73 @@ class _PaymentPageState extends State { )); return dataRow; } + + Future _dialog(BuildContext context) { + return showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + content: Container( + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Column( + mainAxisSize: MainAxisSize.min, + children: [ + IconButton( + icon: Icon( + FontAwesomeIcons.camera, + size: 30, + color: primaryColor, + ), + onPressed: () async { + // Navigator.pop(context); + // cameraPress(); + var selectedFile = + await pickImage(ImageSource.camera); + setState(() { + _file = selectedFile; + }); + Navigator.pop(context); + }), + Text("Camera") + ], + ), + Column( + mainAxisSize: MainAxisSize.min, + children: [ + IconButton( + icon: Icon( + Icons.photo_library, + size: 30, + color: primaryColor, + ), + onPressed: () async { + // Navigator.pop(context); + // photoPress(); + var selectedFile = + await pickImage(ImageSource.gallery); + setState(() { + _file = selectedFile; + }); + Navigator.pop(context); + }), + Text("Gallery") + ], + ), + ], + ), + ), + ), + ); + }, + ); + } + + pickImage(ImageSource source) async { + var tempImage = await ImagePicker.pickImage(source: source); + return tempImage; + } } diff --git a/lib/pages/invoice/payment_pdf_screen.dart b/lib/pages/invoice/payment_pdf_screen.dart index e42bbb2..a2e1591 100644 --- a/lib/pages/invoice/payment_pdf_screen.dart +++ b/lib/pages/invoice/payment_pdf_screen.dart @@ -1,13 +1,16 @@ import 'dart:async'; import 'dart:io'; +import 'package:dio/dio.dart'; import 'package:fcs/helpers/theme.dart'; import 'package:fcs/pages/main/model/main_model.dart'; import 'package:fcs/pages/widgets/local_text.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_pdfview/flutter_pdfview.dart'; import 'package:http/http.dart' as http; +import 'package:path_provider/path_provider.dart'; import 'package:provider/provider.dart'; import 'package:share/share.dart'; @@ -45,8 +48,8 @@ class _PaymentPDFScreenState extends State IconButton( icon: Icon(Icons.file_download), onPressed: () async { - // var _dir = (await getApplicationDocumentsDirectory()).path; - // _downloadFile(widget.path, 'invoice.pdf', _dir); + var file = await copyAsset(); + print('file=> $file'); }, ), IconButton( @@ -93,12 +96,6 @@ class _PaymentPDFScreenState extends State ); } - Future _downloadFile(String url, String filename, String dir) async { - var req = await http.Client().get(Uri.parse(url)); - var file = File('$dir/$filename'); - return file.writeAsBytes(req.bodyBytes); - } - _share(String url) async { MainModel mainModel = Provider.of(context, listen: false); String appUrl = mainModel.setting.appUrl; @@ -108,4 +105,13 @@ class _PaymentPDFScreenState extends State subject: "Invitation to FCS Logistics App", sharePositionOrigin: box.localToGlobal(Offset.zero) & box.size); } + + Future copyAsset() async { + Directory tempDir = await getTemporaryDirectory(); + String tempPath = tempDir.path; + File tempFile = File('$tempPath/Invoice-A092(A)-32.pdf'); + ByteData bd = await rootBundle.load('assets/Invoice-A092(A)-32.pdf'); + await tempFile.writeAsBytes(bd.buffer.asUint8List(), flush: true); + return tempFile; + } } diff --git a/lib/pages/rates/discount_by_weight_editor.dart b/lib/pages/rates/discount_by_weight_editor.dart index 66a48b1..c271183 100644 --- a/lib/pages/rates/discount_by_weight_editor.dart +++ b/lib/pages/rates/discount_by_weight_editor.dart @@ -23,16 +23,19 @@ class _DiscountByWeightEditorState extends State { TextEditingController _discountController = new TextEditingController(); bool _isLoading = false; - bool _isNew = false; + bool _isNew; DiscountByWeight _discountByWeight = new DiscountByWeight(); @override void initState() { super.initState(); if (widget.discountByWeight != null) { - _discountByWeight = widget.discountByWeight; + _discountByWeight = widget.discountByWeight; _weightController.text = _discountByWeight.weight.toString(); _discountController.text = _discountByWeight.discount.toString(); + _isNew = false; + } else { + _isNew = true; } } @@ -131,7 +134,8 @@ class _DiscountByWeightEditorState extends State { try { var shipmentRateModel = Provider.of(context, listen: false); - await shipmentRateModel.deleteDiscountByWeight(widget.discountByWeight.id); + await shipmentRateModel + .deleteDiscountByWeight(widget.discountByWeight.id); Navigator.pop(context); } catch (e) { showMsgDialog(context, "Error", e.toString()); diff --git a/lib/pages/rates/shipment_rates_calculate.dart b/lib/pages/rates/shipment_rates_calculate.dart index 792fda3..3ad1f62 100644 --- a/lib/pages/rates/shipment_rates_calculate.dart +++ b/lib/pages/rates/shipment_rates_calculate.dart @@ -6,6 +6,7 @@ import 'package:fcs/pages/rates/model/shipment_rate_model.dart'; import 'package:fcs/pages/widgets/display_text.dart'; import 'package:fcs/pages/widgets/input_text.dart'; import 'package:fcs/pages/widgets/length_picker.dart'; +import 'package:fcs/pages/widgets/local_dropdown.dart'; import 'package:fcs/pages/widgets/local_text.dart'; import 'package:fcs/pages/widgets/progress.dart'; import 'package:flutter/cupertino.dart'; @@ -79,6 +80,7 @@ class _ShipmentRatesCalState extends State { @override Widget build(BuildContext context) { var shipmentRateModel = Provider.of(context); + List cargos = shipmentRateModel.rate.cargoTypes; final lengthBox = LengthPicker( controller: _lengthController, @@ -119,6 +121,18 @@ class _ShipmentRatesCalState extends State { textInputType: TextInputType.number, ); + var cargoTypeBox = LocalDropdown( + callback: (v) { + setState(() { + _cargoType = v; + }); + }, + labelKey: "cargo.type", + iconData: Icons.text_format, + selectedValue: _cargoType, + values: cargos, + ); + return LocalProgress( inAsyncCall: _isLoading, child: Scaffold( @@ -137,38 +151,8 @@ class _ShipmentRatesCalState extends State { padding: const EdgeInsets.all(8.0), child: ListView( children: [ - Container( - padding: EdgeInsets.only(top: 5, left: 25), - child: Row( - children: [ - Expanded( - child: LocalText(context, 'rate.cargo.type', - color: Colors.grey, fontSize: 15)), - Container( - width: 150.0, - child: DropdownButtonFormField( - value: _cargoType, - decoration: InputDecoration( - fillColor: Colors.white, - hintText: shipmentRateModel.rate.cargoTypes[0].name, - hintStyle: TextStyle(color: Colors.black87)), - items: shipmentRateModel.rate.cargoTypes - .map((e) => - DropdownMenuItem(child: Text(e.name), value: e)) - .toList(), - onChanged: (selected) => { - setState(() { - _cargoType = selected; - _calShipmentWeight(); - }) - }, - ), - ), - ], - ), - ), + cargoTypeBox, actualWeightBox, - // LocalTitle(textKey: "box.dimension"), dimBox, shipmentWeightBox, SizedBox(height: 50), diff --git a/lib/pages/widgets/image_file_picker.dart b/lib/pages/widgets/image_file_picker.dart index 0dd9938..8efc2f6 100644 --- a/lib/pages/widgets/image_file_picker.dart +++ b/lib/pages/widgets/image_file_picker.dart @@ -39,7 +39,7 @@ class _ImageFileState extends State { backgroundColor: Colors.green, child: Icon(MaterialIcons.insert_photo, color: Colors.white), ), - title: LocalText(context, "profile.gallery", + title: LocalText(context, "pm.gallery", color: Colors.black87, fontSize: 15), onTap: () async { Navigator.pop(context); @@ -52,7 +52,7 @@ class _ImageFileState extends State { radius: 20, child: Center(child: Icon(AntDesign.camera, color: Colors.white)), ), - title: LocalText(context, "profile.camera", + title: LocalText(context, "pm.camera", color: Colors.black87, fontSize: 15), onTap: () async { Navigator.pop(context); @@ -67,7 +67,7 @@ class _ImageFileState extends State { radius: 20, child: Icon(Icons.delete, color: Colors.white), ), - title: LocalText(context, "profile.remove_photo", + title: LocalText(context, "pm.remove_photo", color: Colors.black87, fontSize: 15), onTap: () { Navigator.pop(context);