From 8305cb45ce4d88f56d80aab231d736786969af2c Mon Sep 17 00:00:00 2001 From: tzw Date: Wed, 28 Feb 2024 17:47:47 +0630 Subject: [PATCH] add markdown for term --- lib/domain/entities/setting.dart | 11 +- lib/helpers/pdf.dart | 2 +- lib/pages/carton/print_qr_code_page.dart | 21 +- lib/pages/carton/widget/carton_list_row.dart | 6 +- lib/pages/delivery/delivery_list_row.dart | 76 +++---- lib/pages/discount/discount_list_row.dart | 66 +++--- .../fcs_shipment/fcs_shipment_list_row.dart | 15 +- lib/pages/package/package_list_row.dart | 66 +++--- lib/pages/pickup/pickup_list.dart | 2 +- lib/pages/pickup/pickup_list_row.dart | 65 +++--- ...{pickup_serach.dart => pickup_search.dart} | 0 lib/pages/processing/processing_list_row.dart | 71 +++--- lib/pages/receiving/receiving_list_row.dart | 68 +++--- lib/pages/term/term_edit.dart | 174 -------------- lib/pages/term/term_editor.dart | 213 ++++++++++++++++++ lib/pages/term/term_page.dart | 61 ++--- pubspec.yaml | 1 + 17 files changed, 456 insertions(+), 462 deletions(-) rename lib/pages/pickup_search/{pickup_serach.dart => pickup_search.dart} (100%) delete mode 100644 lib/pages/term/term_edit.dart create mode 100644 lib/pages/term/term_editor.dart diff --git a/lib/domain/entities/setting.dart b/lib/domain/entities/setting.dart index dd85745..b9d303c 100644 --- a/lib/domain/entities/setting.dart +++ b/lib/domain/entities/setting.dart @@ -54,20 +54,13 @@ class Setting { emailAddress: map['email_address'], facebookLink: map['facebook_link'], about: map['about'], - termsEng: map['terms_eng'], - termsMm: map['terms_mm'], + termsEng: map['terms_eng_markdown'], + termsMm: map['terms_mm_markdown'], shipmentTypes: List.from(map['shipment_types']), courierWebsite: map['courier_website'], ); } - Map toMap() { - return { - 'terms_eng': termsEng, - 'terms_mm': termsMm, - }; - } - @override String toString() { return 'Setting{supportBuildNum:$supportBuildNum,about:$about}'; diff --git a/lib/helpers/pdf.dart b/lib/helpers/pdf.dart index 33ae573..a80784c 100644 --- a/lib/helpers/pdf.dart +++ b/lib/helpers/pdf.dart @@ -38,7 +38,7 @@ Future generateCartonPdf(Carton carton) async { height: 50, color: PdfColor.fromHex("#000000"), barcode: pw.Barcode.qrCode(), - data: carton.cartonNumber!), + data: carton.cartonNumber ?? ""), pw.Padding( padding: const pw.EdgeInsets.all(5), child: pw.Column( diff --git a/lib/pages/carton/print_qr_code_page.dart b/lib/pages/carton/print_qr_code_page.dart index cdd8d3f..e3634f6 100644 --- a/lib/pages/carton/print_qr_code_page.dart +++ b/lib/pages/carton/print_qr_code_page.dart @@ -26,21 +26,24 @@ class PrintQrCodePage extends StatelessWidget { Row( children: [ QrImageView( - data: 'This is a simple QR code', - version: QrVersions.auto, - size: 100, - gapless: true, - ), + data: carton.cartonNumber ?? "", + version: QrVersions.auto, + size: 100, + gapless: true), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(carton.cartonNumber ?? "", - style: TextStyle(fontSize: 18,fontFamily: "Roboto")), - Text(carton.userName!, style: TextStyle(fontSize: 16,fontFamily: "Roboto")), + style: TextStyle(fontSize: 18, fontFamily: "Roboto")), + Text(carton.userName!, + style: TextStyle(fontSize: 16, fontFamily: "Roboto")), Padding( padding: const EdgeInsets.only(top: 3), child: Text("${carton.actualWeight} lb", - style: TextStyle(fontSize: 16, color: labelColor,fontFamily: "Roboto")), + style: TextStyle( + fontSize: 16, + color: labelColor, + fontFamily: "Roboto")), ) ], ) @@ -54,7 +57,7 @@ class PrintQrCodePage extends StatelessWidget { color: primaryColor, iconData: Icons.print_outlined, callBack: () { - generateCartonPdf(carton); + generateCartonPdf(carton); }, ), ) diff --git a/lib/pages/carton/widget/carton_list_row.dart b/lib/pages/carton/widget/carton_list_row.dart index 6a4641d..08df328 100644 --- a/lib/pages/carton/widget/carton_list_row.dart +++ b/lib/pages/carton/widget/carton_list_row.dart @@ -33,7 +33,7 @@ class CartonListRow extends StatelessWidget { child: new Row( children: [ Container( - padding: EdgeInsets.only(left: 5), + padding: EdgeInsets.only(left: 0), child: Icon( MaterialCommunityIcons.package, color: primaryColor, @@ -42,7 +42,7 @@ class CartonListRow extends StatelessWidget { ), new Expanded( child: Padding( - padding: const EdgeInsets.only(left: 18.0), + padding: const EdgeInsets.only(left: 15.0), child: Row( children: [ new Column( @@ -98,7 +98,7 @@ class CartonListRow extends StatelessWidget { new Text( "${box.cartonWeight.toStringAsFixed(2)} lb", style: - new TextStyle(fontSize: 15.0, color: Colors.grey), + new TextStyle(fontSize: 14.0, color: Colors.grey), ), ], ), diff --git a/lib/pages/delivery/delivery_list_row.dart b/lib/pages/delivery/delivery_list_row.dart index c77f115..6466003 100644 --- a/lib/pages/delivery/delivery_list_row.dart +++ b/lib/pages/delivery/delivery_list_row.dart @@ -1,6 +1,5 @@ import 'package:fcs/domain/entities/carton.dart'; import 'package:fcs/helpers/theme.dart'; -import 'package:fcs/pages/main/util.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_vector_icons/flutter_vector_icons.dart'; @@ -9,8 +8,8 @@ import 'package:intl/intl.dart'; import 'delivery_info.dart'; class DeliveryListRow extends StatelessWidget { - final Carton? box; - DeliveryListRow({Key? key, this.box}) : super(key: key); + final Carton box; + DeliveryListRow({Key? key, required this.box}) : super(key: key); final double dotSize = 15.0; final DateFormat dateFormat = new DateFormat("dd MMM yyyy"); @@ -19,11 +18,10 @@ class DeliveryListRow extends StatelessWidget { Widget build(BuildContext context) { return InkWell( onTap: () { - if (box != null) - Navigator.push( - context, - CupertinoPageRoute(builder: (context) => DeliveryInfo(box: box!)), - ); + Navigator.push( + context, + CupertinoPageRoute(builder: (context) => DeliveryInfo(box: box)), + ); }, child: Container( padding: EdgeInsets.only(left: 15, right: 15), @@ -31,38 +29,32 @@ class DeliveryListRow extends StatelessWidget { children: [ Expanded( child: new Padding( - padding: const EdgeInsets.symmetric(vertical: 10.0), + padding: const EdgeInsets.symmetric(vertical: 13.0), child: new Row( children: [ - Container( - padding: EdgeInsets.only(left: 5, right: 10), - child: Icon( - MaterialCommunityIcons.truck_fast, - color: primaryColor, - size: 30, - ), - ), + Icon(MaterialCommunityIcons.truck_fast, + color: primaryColor, size: 30), new Expanded( - child: new Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.only(left: 8.0), - child: new Text( - box?.cartonNumber ?? "", + child: Padding( + padding: const EdgeInsets.only(left: 15), + child: new Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + new Text( + box.cartonNumber ?? "", style: new TextStyle( fontSize: 15.0, color: Colors.black), ), - ), - Padding( - padding: const EdgeInsets.only(left: 10.0, top: 10), - child: new Text( - box?.userName ?? "", - style: new TextStyle( - fontSize: 15.0, color: Colors.grey), - ), - ) - ], + Padding( + padding: const EdgeInsets.only(top: 5), + child: new Text( + box.userName ?? "", + style: new TextStyle( + fontSize: 15.0, color: Colors.grey), + ), + ) + ], + ), ), ), ], @@ -70,19 +62,21 @@ class DeliveryListRow extends StatelessWidget { ), ), Column( + crossAxisAlignment: CrossAxisAlignment.end, children: [ + Text(box.status ?? "", + style: TextStyle( + color: primaryColor, + fontSize: 15, + fontWeight: FontWeight.bold)), Padding( - padding: const EdgeInsets.all(0), - child: getStatus(box?.status ?? ''), - ), - Padding( - padding: const EdgeInsets.only(left: 8.0, top: 5, bottom: 5), + padding: const EdgeInsets.only(top: 5), child: Row( children: [ new Text( - "${box?.actualWeight.toString() ?? ''} lb", + "${box.actualWeight.toString()} lb", style: - new TextStyle(fontSize: 15.0, color: Colors.grey), + new TextStyle(fontSize: 14.0, color: Colors.grey), ), ], ), diff --git a/lib/pages/discount/discount_list_row.dart b/lib/pages/discount/discount_list_row.dart index 405c9a4..53268b9 100644 --- a/lib/pages/discount/discount_list_row.dart +++ b/lib/pages/discount/discount_list_row.dart @@ -8,8 +8,9 @@ typedef OnSelect(Discount discount); class DiscountListRow extends StatelessWidget { final OnSelect? onSelect; - final Discount? discount; - DiscountListRow({Key? key, this.discount, this.onSelect}) : super(key: key); + final Discount discount; + DiscountListRow({Key? key, required this.discount, this.onSelect}) + : super(key: key); final DateFormat dateFormat = new DateFormat("dd MMM yyyy"); @@ -17,9 +18,7 @@ class DiscountListRow extends StatelessWidget { Widget build(BuildContext context) { return InkWell( onTap: () { - if (onSelect != null && discount != null) { - onSelect!(discount!); - } + onSelect!(discount); }, child: Container( padding: EdgeInsets.only(left: 15, right: 15), @@ -27,38 +26,31 @@ class DiscountListRow extends StatelessWidget { children: [ Expanded( child: new Padding( - padding: const EdgeInsets.symmetric(vertical: 16.0), + padding: const EdgeInsets.symmetric(vertical: 13), child: new Row( children: [ - Container( - padding: EdgeInsets.only(left: 5, right: 10), - child: Icon( - Entypo.price_ribbon, - color: primaryColor, - size: 30, - ), - ), + Icon(Entypo.price_ribbon, color: primaryColor, size: 30), new Expanded( - child: new Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.only(left: 8.0), - child: new Text( - discount?.code ?? "", + child: Padding( + padding: const EdgeInsets.only(left: 15), + child: new Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + new Text( + discount.code ?? "", style: new TextStyle( fontSize: 15.0, color: Colors.black), ), - ), - Padding( - padding: const EdgeInsets.only(left: 10.0, top: 10), - child: new Text( - discount?.customerName ?? "", - style: new TextStyle( - fontSize: 15.0, color: Colors.grey), - ), - ) - ], + Padding( + padding: const EdgeInsets.only(top: 5), + child: new Text( + discount.customerName ?? "", + style: new TextStyle( + fontSize: 15.0, color: Colors.grey), + ), + ) + ], + ), ), ), ], @@ -66,17 +58,17 @@ class DiscountListRow extends StatelessWidget { ), ), Column( + crossAxisAlignment: CrossAxisAlignment.end, children: [ + Text(discount.status ?? ''), Padding( - padding: const EdgeInsets.all(0), - child: Text(discount?.status ?? ''), - ), - Padding( - padding: const EdgeInsets.only(left: 8.0, top: 5, bottom: 5), + padding: const EdgeInsets.only( + top: 5, + ), child: Row( children: [ new Text( - "${discount?.amount.toStringAsFixed(2) ?? ''}", + "${discount.amount.toStringAsFixed(2)}", style: new TextStyle(fontSize: 15.0, color: Colors.grey), ), diff --git a/lib/pages/fcs_shipment/fcs_shipment_list_row.dart b/lib/pages/fcs_shipment/fcs_shipment_list_row.dart index 59a7837..50ff32f 100644 --- a/lib/pages/fcs_shipment/fcs_shipment_list_row.dart +++ b/lib/pages/fcs_shipment/fcs_shipment_list_row.dart @@ -24,20 +24,17 @@ class FcsShipmentListRow extends StatelessWidget { children: [ Expanded( child: new Padding( - padding: const EdgeInsets.symmetric(vertical: 10.0), + padding: const EdgeInsets.symmetric(vertical: 13), child: new Row( children: [ - Container( - padding: EdgeInsets.only(left: 5), - child: Icon( - Ionicons.ios_airplane, - color: primaryColor, - size: 30, - ), + Icon( + Ionicons.ios_airplane, + color: primaryColor, + size: 30, ), new Expanded( child: Padding( - padding: const EdgeInsets.only(left: 18.0), + padding: const EdgeInsets.only(left: 15), child: new Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ diff --git a/lib/pages/package/package_list_row.dart b/lib/pages/package/package_list_row.dart index a613c26..aa05379 100644 --- a/lib/pages/package/package_list_row.dart +++ b/lib/pages/package/package_list_row.dart @@ -1,6 +1,5 @@ import 'package:fcs/domain/entities/package.dart'; import 'package:fcs/helpers/theme.dart'; -import 'package:fcs/pages/main/util.dart'; import 'package:fcs/pages/package/package_info.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -11,14 +10,14 @@ typedef CallbackPackageSelect(Package package); class PackageListRow extends StatelessWidget { final bool isCustomer; - final Package? package; + final Package package; final CallbackPackageSelect? callbackPackageSelect; final double dotSize = 15.0; final DateFormat dateFormat = new DateFormat("dd MMM yyyy"); PackageListRow( {Key? key, - this.package, + required this.package, this.callbackPackageSelect, this.isCustomer = false}) : super(key: key); @@ -28,7 +27,7 @@ class PackageListRow extends StatelessWidget { return InkWell( onTap: () { if (callbackPackageSelect != null) { - callbackPackageSelect!(package!); + callbackPackageSelect!(package); return; } Navigator.push( @@ -48,36 +47,33 @@ class PackageListRow extends StatelessWidget { children: [ Expanded( child: new Padding( - padding: const EdgeInsets.symmetric(vertical: 16.0), + padding: const EdgeInsets.symmetric(vertical: 13), child: new Row( children: [ Icon(Octicons.package, color: primaryColor), - SizedBox(width: 8), new Expanded( - child: new Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.only(left: 8.0), - child: new Text( - package!.id == null - ? '' - : package!.trackingID!, + child: Padding( + padding: const EdgeInsets.only(left: 15), + child: new Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + new Text( + package.id == null ? '' : package.trackingID!, style: new TextStyle( fontSize: 15.0, color: Colors.black), ), - ), - Padding( - padding: const EdgeInsets.only(left: 8.0), - child: new Text( - package!.market == null - ? '' - : package!.market!, - style: new TextStyle( - fontSize: 15.0, color: Colors.black), + Padding( + padding: const EdgeInsets.only(top: 5), + child: new Text( + package.market == null + ? '' + : package.market!, + style: new TextStyle( + fontSize: 15.0, color: Colors.black), + ), ), - ), - ], + ], + ), ), ), ], @@ -85,19 +81,21 @@ class PackageListRow extends StatelessWidget { ), ), Column( + crossAxisAlignment: CrossAxisAlignment.end, children: [ + Text(package.status ?? "", + style: TextStyle( + color: primaryColor, + fontSize: 15, + fontWeight: FontWeight.bold)), Padding( - padding: const EdgeInsets.all(3.0), - child: getStatus(package!.status??""), - ), - Padding( - padding: const EdgeInsets.all(0), + padding: const EdgeInsets.only(top: 5), child: new Text( - package!.currentStatusDate != null - ? dateFormat.format(package!.currentStatusDate!) + package.currentStatusDate != null + ? dateFormat.format(package.currentStatusDate!) : '', style: - new TextStyle(fontSize: 15.0, color: Colors.grey), + new TextStyle(fontSize: 14.0, color: Colors.grey), ), ), ], diff --git a/lib/pages/pickup/pickup_list.dart b/lib/pages/pickup/pickup_list.dart index 97361dd..2d4215c 100644 --- a/lib/pages/pickup/pickup_list.dart +++ b/lib/pages/pickup/pickup_list.dart @@ -2,7 +2,7 @@ import 'package:fcs/domain/entities/pickup.dart'; import 'package:fcs/helpers/theme.dart'; import 'package:fcs/pages/pickup/pickup_info.dart'; import 'package:fcs/pages/pickup/pickup_list_row.dart'; -import 'package:fcs/pages/pickup_search/pickup_serach.dart'; +import 'package:fcs/pages/pickup_search/pickup_search.dart'; import 'package:fcs/pages/widgets/local_app_bar.dart'; import 'package:fcs/pages/widgets/progress.dart'; import 'package:fcs/pagination/paginator_listview.dart'; diff --git a/lib/pages/pickup/pickup_list_row.dart b/lib/pages/pickup/pickup_list_row.dart index b66a824..862bb5f 100644 --- a/lib/pages/pickup/pickup_list_row.dart +++ b/lib/pages/pickup/pickup_list_row.dart @@ -1,6 +1,5 @@ import 'package:fcs/domain/entities/pickup.dart'; import 'package:fcs/helpers/theme.dart'; -import 'package:fcs/pages/main/util.dart'; import 'package:fcs/pages/pickup/pickup_info.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -37,51 +36,53 @@ class PickupListRow extends StatelessWidget { children: [ Expanded( child: new Padding( - padding: const EdgeInsets.symmetric(vertical: 16.0), + padding: const EdgeInsets.symmetric(vertical: 13), child: new Row( children: [ - Container( - padding: EdgeInsets.only(left: 5, right: 10), - child: Icon( - SimpleLineIcons.direction, - color: primaryColor, - size: 30, - ), + Icon( + SimpleLineIcons.direction, + color: primaryColor, + size: 30, ), new Expanded( - child: new Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.only(left: 8.0), - child: new Text( + child: Padding( + padding: const EdgeInsets.only(left: 15.0), + child: new Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + new Text( pickup?.pickupNumber ?? '', style: new TextStyle( fontSize: 15.0, color: Colors.black), ), - ), - Padding( - padding: const EdgeInsets.only(left: 10.0, top: 10), - child: new Text( - pickup!.pickupDate != null - ? dateFormat.format(pickup!.pickupDate!) - : "", - style: new TextStyle( - fontSize: 15.0, color: Colors.grey), - ), - ) - ], + Padding( + padding: const EdgeInsets.only(top: 5), + child: new Text( + pickup!.pickupDate != null + ? dateFormat.format(pickup!.pickupDate!) + : "", + style: new TextStyle( + fontSize: 15.0, color: Colors.grey), + ), + ) + ], + ), ), ), ], ), ), ), - Column( - children: [ - getStatus(pickup!.status ?? ""), - ], - ) + Text(pickup?.status ?? "", + style: TextStyle( + color: primaryColor, + fontSize: 15, + fontWeight: FontWeight.bold)), + // Column( + // children: [ + // getStatus(pickup!.status ?? ""), + // ], + // ) ], ), ), diff --git a/lib/pages/pickup_search/pickup_serach.dart b/lib/pages/pickup_search/pickup_search.dart similarity index 100% rename from lib/pages/pickup_search/pickup_serach.dart rename to lib/pages/pickup_search/pickup_search.dart diff --git a/lib/pages/processing/processing_list_row.dart b/lib/pages/processing/processing_list_row.dart index d702d4f..e308227 100644 --- a/lib/pages/processing/processing_list_row.dart +++ b/lib/pages/processing/processing_list_row.dart @@ -1,6 +1,5 @@ import 'package:fcs/domain/entities/package.dart'; import 'package:fcs/helpers/theme.dart'; -import 'package:fcs/pages/main/util.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_vector_icons/flutter_vector_icons.dart'; @@ -11,12 +10,13 @@ import 'processing_info.dart'; typedef CallbackPackageSelect(Package package); class ProcessingListRow extends StatelessWidget { - final Package? package; + final Package package; final CallbackPackageSelect? callbackPackageSelect; final double dotSize = 15.0; final DateFormat dateFormat = new DateFormat("dd MMM yyyy"); - ProcessingListRow({Key? key, this.package, this.callbackPackageSelect}) + ProcessingListRow( + {Key? key, required this.package, this.callbackPackageSelect}) : super(key: key); @override @@ -24,7 +24,7 @@ class ProcessingListRow extends StatelessWidget { return InkWell( onTap: () { if (callbackPackageSelect != null) { - callbackPackageSelect!(package!); + callbackPackageSelect!(package); return; } Navigator.push( @@ -39,38 +39,33 @@ class ProcessingListRow extends StatelessWidget { children: [ Expanded( child: new Padding( - padding: const EdgeInsets.symmetric(vertical: 16.0), + padding: const EdgeInsets.symmetric(vertical: 13.0), child: new Row( children: [ - Container( - padding: EdgeInsets.only(left: 5, right: 10), - child: Icon( - FontAwesome.dropbox, - color: primaryColor, - size: 30, - ), - ), + Icon(FontAwesome.dropbox, color: primaryColor, size: 30), new Expanded( - child: new Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.only(left: 8.0), - child: new Text( - package!.id == null ? '' : package!.trackingID!, + child: Padding( + padding: const EdgeInsets.only(left: 15), + child: new Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + new Text( + package.trackingID == null + ? '' + : package.trackingID!, style: new TextStyle( fontSize: 15.0, color: Colors.black), ), - ), - Padding( - padding: const EdgeInsets.only(left: 8.0), - child: new Text( - package!.market == null ? '' : package!.market!, - style: new TextStyle( - fontSize: 15.0, color: Colors.black), + Padding( + padding: const EdgeInsets.only(top: 5.0), + child: new Text( + package.market == null ? '' : package.market!, + style: new TextStyle( + fontSize: 15.0, color: Colors.black), + ), ), - ), - ], + ], + ), ), ), ], @@ -78,18 +73,20 @@ class ProcessingListRow extends StatelessWidget { ), ), Column( + crossAxisAlignment: CrossAxisAlignment.end, children: [ + Text(package.status ?? "", + style: TextStyle( + color: primaryColor, + fontSize: 15, + fontWeight: FontWeight.bold)), Padding( - padding: const EdgeInsets.all(3.0), - child: getStatus(package!.status??""), - ), - Padding( - padding: const EdgeInsets.all(0), + padding: const EdgeInsets.only(top: 5), child: new Text( - package!.currentStatusDate != null - ? dateFormat.format(package!.currentStatusDate!) + package.currentStatusDate != null + ? dateFormat.format(package.currentStatusDate!) : '', - style: new TextStyle(fontSize: 15.0, color: Colors.grey), + style: new TextStyle(fontSize: 14.0, color: Colors.grey), ), ), ], diff --git a/lib/pages/receiving/receiving_list_row.dart b/lib/pages/receiving/receiving_list_row.dart index 95430de..c863c33 100644 --- a/lib/pages/receiving/receiving_list_row.dart +++ b/lib/pages/receiving/receiving_list_row.dart @@ -1,6 +1,5 @@ import 'package:fcs/domain/entities/package.dart'; import 'package:fcs/helpers/theme.dart'; -import 'package:fcs/pages/main/util.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_vector_icons/flutter_vector_icons.dart'; @@ -11,12 +10,13 @@ import 'receiving_info.dart'; typedef CallbackPackageSelect(Package package); class ReceivingListRow extends StatelessWidget { - final Package? package; + final Package package; final CallbackPackageSelect? callbackPackageSelect; final double dotSize = 15.0; final DateFormat dateFormat = new DateFormat("dd MMM yyyy"); - ReceivingListRow({Key? key, this.package, this.callbackPackageSelect}) + ReceivingListRow( + {Key? key, required this.package, this.callbackPackageSelect}) : super(key: key); @override @@ -24,7 +24,7 @@ class ReceivingListRow extends StatelessWidget { return InkWell( onTap: () { if (callbackPackageSelect != null) { - callbackPackageSelect!(package!); + callbackPackageSelect!(package); return; } Navigator.push( @@ -39,36 +39,32 @@ class ReceivingListRow extends StatelessWidget { children: [ Expanded( child: new Padding( - padding: const EdgeInsets.symmetric(vertical: 16.0), + padding: const EdgeInsets.symmetric(vertical: 13.0), child: new Row( children: [ - Padding( - padding: EdgeInsets.all(5.0), - child: Icon( - MaterialCommunityIcons.inbox_arrow_down, - color: primaryColor, - )), + Icon(MaterialCommunityIcons.inbox_arrow_down, + color: primaryColor), new Expanded( - child: new Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.only(left: 8.0), - child: new Text( - package!.id == null ? '' : package!.trackingID!, + child: Padding( + padding: const EdgeInsets.only(left: 15), + child: new Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + new Text( + package.id == null ? '' : package.trackingID!, style: new TextStyle( fontSize: 15.0, color: Colors.black), ), - ), - Padding( - padding: const EdgeInsets.only(left: 8.0), - child: new Text( - package!.market == null ? '' : package!.market!, - style: new TextStyle( - fontSize: 15.0, color: Colors.black), + Padding( + padding: const EdgeInsets.only(top: 5), + child: new Text( + package.market == null ? '' : package.market!, + style: new TextStyle( + fontSize: 15.0, color: Colors.black), + ), ), - ), - ], + ], + ), ), ), ], @@ -76,18 +72,20 @@ class ReceivingListRow extends StatelessWidget { ), ), Column( + crossAxisAlignment: CrossAxisAlignment.end, children: [ + Text(package.status ?? "", + style: TextStyle( + color: primaryColor, + fontSize: 15, + fontWeight: FontWeight.bold)), Padding( - padding: const EdgeInsets.all(3.0), - child: getStatus(package!.status??""), - ), - Padding( - padding: const EdgeInsets.all(0), + padding: const EdgeInsets.only(top: 5), child: new Text( - package!.currentStatusDate != null - ? dateFormat.format(package!.currentStatusDate!) + package.currentStatusDate != null + ? dateFormat.format(package.currentStatusDate!) : '', - style: new TextStyle(fontSize: 15.0, color: Colors.grey), + style: new TextStyle(fontSize: 14.0, color: Colors.grey), ), ), ], diff --git a/lib/pages/term/term_edit.dart b/lib/pages/term/term_edit.dart deleted file mode 100644 index 1d62d9a..0000000 --- a/lib/pages/term/term_edit.dart +++ /dev/null @@ -1,174 +0,0 @@ -import 'package:fcs/domain/vo/term.dart'; -import 'package:fcs/helpers/theme.dart'; -import 'package:fcs/pages/main/util.dart'; -import 'package:fcs/pages/widgets/local_text.dart'; -import 'package:fcs/pages/widgets/progress.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -// import 'package:zefyrka/zefyrka.dart'; -// import 'package:zefyr/zefyr.dart'; - -typedef void ProfileCallback(); - -class TermEdit extends StatefulWidget { - final Term? term; - TermEdit({required this.term}); - @override - _TermEditState createState() => _TermEditState(); -} - -class _TermEditState extends State { - /// Allows to control the editor and the document. - // late ZefyrController _controllerEng; - // late ZefyrController _controllerMm; - - /// Zefyr editor like any other input field requires a focus node. - late FocusNode _focusNodeEng; - late FocusNode _focusNodeMm; - bool _isLoading = false; - - @override - void initState() { - super.initState(); - _isLoading = false; - - // Here we must load the document and pass it to Zefyr controller. - // _controllerEng = ZefyrController(_loadDocument(widget.term!.termEng ?? "")); - // _controllerMm = ZefyrController(_loadDocument(widget.term!.termMm ?? "")); - _focusNodeEng = FocusNode(); - _focusNodeMm = FocusNode(); - } - - /// Loads the document to be edited in Zefyr. - // NotusDocument _loadDocument(String data) { - // late NotusDocument doc; - // try { - // doc = NotusDocument.fromJson(jsonDecode(data)); - // } catch (e) {} - // if (doc == null) { - // doc = NotusDocument(); - // } - // return doc; - // } - - @override - Widget build(BuildContext context) { - final savebtn = - fcsButton(context, getLocalString(context, "btn.save"), callack: _save); - - return DefaultTabController( - length: 2, - child: LocalProgress( - inAsyncCall: _isLoading, - child: Scaffold( - appBar: AppBar( - title: LocalLargeTitle( - context, - "term", - color: primaryColor, - ), - leading: IconButton( - icon: Icon(CupertinoIcons.back, color: primaryColor, size: 25), - onPressed: () { - Navigator.of(context).pop(); - }, - ), - shadowColor: Colors.transparent, - backgroundColor: Colors.white, - actions: [ - IconButton( - onPressed: _unfocus, - icon: Icon(Icons.check, color: primaryColor)) - ], - bottom: TabBar.secondary( - indicatorColor: primaryColor, - onTap: (index) { - if (index == 0) { - _focusNodeEng = new FocusNode(); - FocusScope.of(context).requestFocus(_focusNodeEng); - } else { - _focusNodeMm = new FocusNode(); - FocusScope.of(context).requestFocus(_focusNodeMm); - } - }, - tabs: [ - Tab( - icon: Image.asset( - 'icons/flags/png/us.png', - package: 'country_icons', - fit: BoxFit.fitWidth, - width: 25, - )), - Tab( - icon: Image.asset( - 'icons/flags/png/mm.png', - package: 'country_icons', - fit: BoxFit.fitWidth, - width: 25, - )), - ], - ), - ), - body: ListView( - children: [ - Container( - height: MediaQuery.of(context).size.height - 200, - child: TabBarView( - children: [ - const SizedBox(), - const SizedBox(), - // textEditor(_controllerEng, _focusNodeEng), - // textEditor(_controllerMm, _focusNodeMm), - ], - ), - ), - savebtn, - const SizedBox(height: 20) - ], - ), - ), - ), - ); - } - - // Widget textEditor(ZefyrController controller, FocusNode focusNode) { - // return ListView( - // children: [ - // Container( - // height: MediaQuery.of(context).size.height - 200, - // child: ZefyrEditor( - // autofocus: false, - // padding: EdgeInsets.all(16), - // controller: controller, - // focusNode: focusNode, - // ), - // ), - // SizedBox( - // height: 10, - // ) - // ], - // ); - // } - - _unfocus() { - FocusScope.of(context).unfocus(); - } - - _save() async { - setState(() { - _isLoading = true; - }); - try { - // final contentsEng = jsonEncode(_controllerEng.document); - // final contentsMm = jsonEncode(_controllerMm.document); - // // print('contents => $contentsEng'); - // TermModel termModel = Provider.of(context, listen: false); - // await termModel.saveTerm(Term(termEng: contentsEng, termMm: contentsMm)); - } catch (e) { - showMsgDialog(context, "Error", e.toString()); - } finally { - _isLoading = false; - Navigator.pop(context); - } - } -} diff --git a/lib/pages/term/term_editor.dart b/lib/pages/term/term_editor.dart new file mode 100644 index 0000000..592ff07 --- /dev/null +++ b/lib/pages/term/term_editor.dart @@ -0,0 +1,213 @@ +import 'package:fcs/helpers/theme.dart'; +import 'package:fcs/pages/widgets/progress.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_markdown/flutter_markdown.dart'; +import '../../domain/vo/term.dart'; +import '../main/util.dart'; +import '../widgets/local_text.dart'; + +class TermEditor extends StatefulWidget { + final Term term; + const TermEditor({super.key, required this.term}); + + @override + State createState() => _TermEditorState(); +} + +class _TermEditorState extends State { + int selectedIndex = 0; + final List _selectedIcon = [true, false]; + List icons = [ + const Icon(Icons.edit), + const Icon(Icons.preview_outlined), + ]; + bool isEdit = true; + TextEditingController mmController = TextEditingController(); + TextEditingController enController = TextEditingController(); + + bool _isLoading = false; + + @override + void initState() { + super.initState(); + enController.text = widget.term.termEng ?? ""; + mmController.text = widget.term.termMm ?? ""; + } + + @override + void dispose() { + enController.dispose(); + mmController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + final toggleBtn = ToggleButtons( + direction: Axis.horizontal, + onPressed: (int index) { + setState(() { + for (int i = 0; i < _selectedIcon.length; i++) { + _selectedIcon[i] = !_selectedIcon[i]; + isEdit = (_selectedIcon[0] == true) ? true : false; + } + }); + }, + borderRadius: const BorderRadius.all(Radius.circular(5)), + borderColor: primaryColor.withOpacity(0.3), + selectedBorderColor: Colors.white, + fillColor: primaryColor, + color: primaryColor, + isSelected: _selectedIcon, + constraints: const BoxConstraints(minHeight: 20, minWidth: 40), + children: icons, + ); + + final savebtn = Padding( + padding: const EdgeInsets.symmetric(horizontal: 20), + child: fcsButton(context, getLocalString(context, "btn.save"), + callack: _save), + ); + + return LocalProgress( + inAsyncCall: _isLoading, + child: DefaultTabController( + length: 2, + initialIndex: selectedIndex, + child: Scaffold( + backgroundColor: Colors.white, + appBar: AppBar( + elevation: 0, + centerTitle: true, + leading: IconButton( + splashRadius: 25, + icon: const Icon(CupertinoIcons.back, + color: primaryColor, size: 25), + onPressed: () => Navigator.pop(context)), + shadowColor: Colors.transparent, + backgroundColor: Colors.white, + title: + LocalText(context, 'term', fontSize: 20, color: primaryColor), + bottom: TabBar.secondary( + indicatorColor: primaryColor, + labelColor: primaryColor, + labelStyle: + const TextStyle(fontSize: 15, fontWeight: FontWeight.bold), + unselectedLabelColor: Colors.grey, + unselectedLabelStyle: + const TextStyle(fontSize: 15, fontWeight: FontWeight.bold), + onTap: (index) { + selectedIndex = index; + }, + tabs: [Tab(text: "English"), Tab(text: "Myanmar")]), + actions: [ + Padding( + padding: const EdgeInsets.only(right: 20), child: toggleBtn) + ], + ), + body: SafeArea( + child: ScrollConfiguration( + behavior: const ScrollBehavior().copyWith(overscroll: false), + child: ListView( + children: [ + SizedBox( + height: MediaQuery.of(context).size.height - 210, + child: TabBarView( + children: [ + isEdit + ? Padding( + padding: const EdgeInsets.all(15), + child: TextField( + autofocus: true, + controller: enController, + style: TextStyle( + fontSize: 15, color: Colors.black87), + decoration: const InputDecoration( + border: InputBorder.none), + cursorColor: primaryColor, + keyboardType: TextInputType.multiline, + maxLines: null, + readOnly: isEdit ? false : true, + ), + ) + : Padding( + padding: + const EdgeInsets.only(top: 15, bottom: 15), + child: Markdown( + shrinkWrap: true, + softLineBreak: true, + physics: const BouncingScrollPhysics(), + data: enController.text + .replaceAll("\\n", '\n'), + styleSheet: MarkdownStyleSheet.fromTheme( + ThemeData( + textTheme: const TextTheme( + bodyMedium: TextStyle( + fontSize: 15, + color: Colors.black87))))), + ), + isEdit + ? Padding( + padding: const EdgeInsets.all(15), + child: TextField( + style: TextStyle( + fontSize: 14, color: Colors.black87), + autofocus: true, + controller: mmController, + decoration: const InputDecoration( + border: InputBorder.none), + cursorColor: primaryColor, + keyboardType: TextInputType.multiline, + maxLines: null, + readOnly: isEdit ? false : true, + ), + ) + : Padding( + padding: + const EdgeInsets.only(top: 15, bottom: 15), + child: Markdown( + shrinkWrap: true, + softLineBreak: true, + physics: const BouncingScrollPhysics(), + data: mmController.text + .replaceAll("\\n", '\n'), + styleSheet: MarkdownStyleSheet.fromTheme( + ThemeData( + textTheme: const TextTheme( + bodyMedium: TextStyle( + fontSize: 14, + color: Colors.black87))))), + ), + ], + ), + ), + savebtn, + const SizedBox(height: 20) + ], + ), + ), + ), + ), + ), + ); + } + + _save() async { + setState(() { + _isLoading = true; + }); + try { + // final contentsEng = jsonEncode(_controllerEng.document); + // final contentsMm = jsonEncode(_controllerMm.document); + // // print('contents => $contentsEng'); + // TermModel termModel = Provider.of(context, listen: false); + // await termModel.saveTerm(Term(termEng: contentsEng, termMm: contentsMm)); + } catch (e) { + showMsgDialog(context, "Error", e.toString()); + } finally { + _isLoading = false; + Navigator.pop(context); + } + } +} diff --git a/lib/pages/term/term_page.dart b/lib/pages/term/term_page.dart index aeb9592..f7dd29b 100644 --- a/lib/pages/term/term_page.dart +++ b/lib/pages/term/term_page.dart @@ -2,52 +2,28 @@ import 'package:fcs/domain/entities/setting.dart'; import 'package:fcs/domain/vo/term.dart'; import 'package:fcs/helpers/theme.dart'; import 'package:fcs/pages/main/model/main_model.dart'; -import 'package:fcs/pages/term/term_edit.dart'; import 'package:fcs/pages/widgets/local_app_bar.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:provider/provider.dart'; -// import 'package:zefyrka/zefyrka.dart'; -typedef void ProfileCallback(); +import '../main/model/language_model.dart'; +import 'term_editor.dart'; class TermPage extends StatefulWidget { - const TermPage({ - Key? key, - }) : super(key: key); + const TermPage({Key? key}) : super(key: key); @override _TermPageState createState() => _TermPageState(); } class _TermPageState extends State { - // late ZefyrController _controller; - // late FocusNode _focusNode; - // late NotusDocument document = new NotusDocument(); - bool isLoading = false; - - @override - void initState() { - super.initState(); - // _focusNode = FocusNode(); - } - - // NotusDocument _loadDocument(Setting? setting) { - // bool isEng = Provider.of(context).isEng; - // String? term = isEng ? (setting!.termsEng ?? "") : (setting!.termsMm ?? ""); - // late NotusDocument doc; - // try { - // doc = NotusDocument.fromJson(jsonDecode(term)); - // } catch (e) {} - // if (doc == null) { - // doc = NotusDocument(); - // } - // return doc; - // } - @override Widget build(BuildContext context) { + bool isEng = Provider.of(context).isEng; Setting? setting = Provider.of(context).setting; bool isEditable = context.select((MainModel m) => m.termEditable()); + String? term = isEng ? (setting!.termsEng ?? "") : (setting!.termsMm ?? ""); return Scaffold( appBar: LocalAppBar( @@ -58,20 +34,25 @@ class _TermPageState extends State { actions: isEditable ? [ IconButton( - onPressed: () => - Navigator.of(context).push(CupertinoPageRoute( - builder: (context) => - TermEdit(term: Term.fromSetting(setting!)), - )), + onPressed: () { + Navigator.of(context).push(CupertinoPageRoute( + builder: (context) => + TermEditor(term: Term.fromSetting(setting)), + )); + }, icon: Icon(Icons.edit, color: primaryColor)) ] : [], ), - // body: ZefyrEditor( - // padding: EdgeInsets.all(16), - // controller: ZefyrController(_loadDocument(setting)), - // focusNode: _focusNode, - // ), + body: Markdown( + shrinkWrap: true, + softLineBreak: true, + physics: const BouncingScrollPhysics(), + data: term.replaceAll("\\n", '\n'), + styleSheet: MarkdownStyleSheet.fromTheme(ThemeData( + textTheme: TextTheme( + bodyMedium: TextStyle( + fontSize: isEng ? 15 : 14, color: Colors.black87))))), ); } } diff --git a/pubspec.yaml b/pubspec.yaml index 9dcf6c6..fe2b945 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -57,6 +57,7 @@ dependencies: open_file: ^3.3.2 pdf: ^3.10.8 qr_flutter: ^4.1.0 + flutter_markdown: ^0.6.20+1 dev_dependencies: flutter_test: