This commit is contained in:
PhyoThandar
2020-06-02 14:55:47 +06:30
23 changed files with 1364 additions and 215 deletions

View File

@@ -1,5 +1,6 @@
import 'package:fcs/pages/util.dart';
import 'package:fcs/vo/manual.dart';
import 'package:fcs/widget/bottom_up_page_route.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:fcs/model/main_model.dart';
@@ -68,13 +69,10 @@ class _BuyingOnlinePagetate extends State<BuyingOnlinePage> {
height: 100.0,
child: FlatButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => InstructionPage(
name: 'Amazon',
image: "assets/amazon_ins.png",
)));
Navigator.of(context).push(BottomUpPageRoute(InstructionPage(
name: 'Amazon',
image: "assets/amazon_ins.png",
)));
},
child: LocalText(
context,
@@ -102,12 +100,8 @@ class _BuyingOnlinePagetate extends State<BuyingOnlinePage> {
height: 100.0,
child: FlatButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ManualPage(
marketplace: 'Newegg',
)));
Navigator.of(context)
.push(BottomUpPageRoute(ManualPage(marketplace: 'Newegg')));
},
child: LocalText(
context,
@@ -135,12 +129,8 @@ class _BuyingOnlinePagetate extends State<BuyingOnlinePage> {
height: 100.0,
child: FlatButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ManualPage(
marketplace: "Macy",
)));
Navigator.of(context)
.push(BottomUpPageRoute(ManualPage(marketplace: 'Macy')));
},
child: LocalText(
context,

View File

@@ -3,6 +3,7 @@ import 'dart:async';
import 'package:fcs/model/main_model.dart';
import 'package:fcs/model/shared_pref.dart';
import 'package:fcs/vo/user.dart';
import 'package:fcs/widget/bottom_up_page_route.dart';
import 'package:flutter/material.dart';
import 'package:pin_input_text_field/pin_input_text_field.dart';
import 'package:provider/provider.dart';
@@ -191,10 +192,7 @@ class _CodePageState extends State<CodePage> {
_verify() async {
Provider.of<MainModel>(context).saveUser(pin, widget.phoneNumber);
await Navigator.push(
context,
MaterialPageRoute(builder: (context) => UserEditPage()),
);
await Navigator.of(context).push(BottomUpPageRoute(UserEditPage()));
Navigator.pop(context);
}

View File

@@ -3,6 +3,7 @@ import 'package:fcs/model/main_model.dart';
import 'package:fcs/pages/shipment_list.dart';
import 'package:fcs/pages_fcs/package_list.dart';
import 'package:fcs/widget/bottom_up_page_route.dart';
import 'package:fcs/widget/localization/transalation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
@@ -47,6 +48,7 @@ import 'announcement_list.dart';
import 'buying_online.dart';
import 'customer_list.dart';
import 'do/do_list.dart';
import 'invoice/invoce_list.dart';
import 'my_registeration.dart';
import 'pd/pd_list.dart';
import 'products_list.dart';
@@ -161,7 +163,7 @@ class _HomePageState extends State<HomePage> {
final invoicesBtn = _buildBtn2("invoices.btn",
icon: FontAwesomeIcons.fileInvoice,
btnCallback: () =>
Navigator.of(context).push(BottomUpPageRoute(StaffList())));
Navigator.of(context).push(BottomUpPageRoute(InvoiceList())));
final termBtn = _buildBtn2("term.btn",
icon: FontAwesomeIcons.info,
@@ -244,11 +246,8 @@ class _HomePageState extends State<HomePage> {
),
FlatButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SigninPage()),
);
Navigator.of(context)
.push(BottomUpPageRoute(SigninPage()));
},
// iconSize: 30,
child: Text(
@@ -319,6 +318,8 @@ class _HomePageState extends State<HomePage> {
}
_langChange(index) {
var languageModel = Provider.of<LanguageModel>(context);
languageModel.saveLanguage(Translation().supportedLanguages[index]);
setState(() {
isSelected.asMap().forEach((i, e) {
isSelected[i] = false;

View File

@@ -0,0 +1,158 @@
import 'package:fcs/model/invoice_model.dart';
import 'package:fcs/model/shipment_model.dart';
import 'package:fcs/model_fcs/package_model.dart';
import 'package:fcs/pages_fcs/package_list_row.dart';
import 'package:fcs/theme/theme.dart';
import 'package:fcs/widget/bottom_up_page_route.dart';
import 'package:fcs/widget/local_text.dart';
import 'package:provider/provider.dart';
import 'package:fcs/pages/search_page.dart';
import 'package:fcs/vo/buyer.dart';
import 'package:fcs/widget/localization/app_translations.dart';
import 'package:flutter/material.dart';
import 'package:fcs/widget/progress.dart';
import '../shipment_editor.dart';
import '../shipment_list_row.dart';
import 'invoice_editor.dart';
import 'invoice_list_row.dart';
class InvoiceList extends StatefulWidget {
@override
_InvoiceListState createState() => _InvoiceListState();
}
class _InvoiceListState extends State<InvoiceList> {
bool _isLoading = false;
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return LocalProgress(
inAsyncCall: _isLoading,
child: DefaultTabController(
length: 3,
child: Scaffold(
appBar: AppBar(
centerTitle: true,
leading: new IconButton(
icon: new Icon(Icons.close),
onPressed: () => Navigator.of(context).pop(),
),
backgroundColor: primaryColor,
title: LocalText(context, 'invoices.title',
color: Colors.white, fontSize: 20),
actions: <Widget>[
IconButton(
icon: Icon(
Icons.search,
color: Colors.white,
),
iconSize: 30,
onPressed: () => showPlacesSearch(context),
),
],
bottom: TabBar(
unselectedLabelColor: Colors.grey,
tabs: [
Tab(text: "Packages"),
Tab(text: "Pending"),
Tab(text: "Paid"),
],
),
),
floatingActionButton: FloatingActionButton.extended(
onPressed: () {
_newInvoice();
},
icon: Icon(Icons.add),
label: Text(AppTranslations.of(context).text("invoices.add")),
backgroundColor: primaryColor,
),
body: TabBarView(
children: [_packages(), _pending(), _paided()],
)),
),
);
}
_newInvoice() {
Navigator.of(context).push(BottomUpPageRoute(InvoiceEditor()));
}
Widget _packages() {
var packageModel = Provider.of<PackageModel>(context);
return Column(
children: <Widget>[
Expanded(
child: new ListView.separated(
separatorBuilder: (context, index) => Divider(
color: Colors.black,
),
scrollDirection: Axis.vertical,
padding: EdgeInsets.only(top: 15),
shrinkWrap: true,
itemCount: packageModel.completed.length,
itemBuilder: (BuildContext context, int index) {
return PackageListRow(
package: packageModel.completed[index],
isReadOnly: true,
);
}),
),
],
);
}
Widget _pending() {
var invoiceModel = Provider.of<InvoiceModel>(context);
return Column(
children: <Widget>[
Expanded(
child: new ListView.separated(
separatorBuilder: (context, index) => Divider(
color: Colors.black,
),
scrollDirection: Axis.vertical,
padding: EdgeInsets.only(top: 15),
shrinkWrap: true,
itemCount: invoiceModel.pending.length,
itemBuilder: (BuildContext context, int index) {
return InvoiceListRow(invoice: invoiceModel.pending[index]);
}),
),
],
);
}
Widget _paided() {
var invoiceModel = Provider.of<InvoiceModel>(context);
return Column(
children: <Widget>[
Expanded(
child: new ListView.separated(
separatorBuilder: (context, index) => Divider(
color: Colors.black,
),
scrollDirection: Axis.vertical,
padding: EdgeInsets.only(top: 15),
shrinkWrap: true,
itemCount: invoiceModel.paided.length,
itemBuilder: (BuildContext context, int index) {
return InvoiceListRow(invoice: invoiceModel.paided[index]);
}),
),
],
);
}
}

View File

@@ -0,0 +1,380 @@
import 'package:fcs/pages/invoice/package_addition.dart';
import 'package:fcs/theme/theme.dart';
import 'package:fcs/vo/invoice.dart';
import 'package:fcs/vo/package.dart';
import 'package:fcs/widget/bottom_up_page_route.dart';
import 'package:fcs/widget/local_text.dart';
import 'package:fcs/widget/localization/app_translations.dart';
import 'package:fcs/widget/multi_img_controller.dart';
import 'package:fcs/widget/multi_img_file.dart';
import 'package:fcs/widget/my_data_table.dart';
import 'package:fcs/widget/progress.dart';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import '../util.dart';
class InvoiceEditor extends StatefulWidget {
final Invoice invoice;
InvoiceEditor({this.invoice});
@override
_InvoiceEditorState createState() => _InvoiceEditorState();
}
class _InvoiceEditorState extends State<InvoiceEditor> {
var dateFormatter = new DateFormat('dd MMM yyyy');
TextEditingController _invoiceNumberController = new TextEditingController();
TextEditingController _dateController = new TextEditingController();
TextEditingController _nameController = new TextEditingController();
TextEditingController _phoneController = new TextEditingController();
TextEditingController _discountController = new TextEditingController();
TextEditingController _amountController = new TextEditingController();
TextEditingController _statusController = new TextEditingController();
MultiImgController multiImgController = MultiImgController();
Invoice _invoice;
bool _isLoading = false;
List<Package> _packages = [];
@override
void initState() {
super.initState();
if (widget.invoice != null) {
_invoice = widget.invoice;
_invoiceNumberController.text = _invoice.invoiceNumber;
_dateController.text = dateFormatter.format(_invoice.invoiceDate);
_nameController.text = _invoice.customerName;
_phoneController.text = _invoice.customerPhoneNumber;
_amountController.text = _invoice.amount.toString();
_statusController.text = _invoice.status.toString();
_packages = _invoice.packages;
} else {
_packages = [
Package(
shipmentNumber: "A202",
receiverNumber: "3",
boxNumber: "1",
rate: 7,
packageType: "General",
weight: 25,
status: "Received",
receiverAddress: '1 Bo Yar Nyunt St.\nDagon Tsp, Yangon',
arrivedDate: DateTime(2020, 6, 1),
),
Package(
shipmentNumber: "A202",
receiverNumber: "3",
boxNumber: "2",
rate: 7,
packageType: "General",
weight: 20,
status: "Received",
arrivedDate: DateTime(2020, 6, 1),
receiverAddress: '1 Bo Yar Nyunt St.\nDagon Tsp, Yangon'),
];
}
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return LocalProgress(
inAsyncCall: _isLoading,
child: Scaffold(
appBar: AppBar(
centerTitle: true,
leading: new IconButton(
icon: new Icon(Icons.close),
onPressed: () => Navigator.of(context).pop(),
),
backgroundColor: primaryColor,
title: LocalText(context, 'invoice.form.title',
color: Colors.white, fontSize: 20),
),
body: Card(
child: Column(
children: <Widget>[
Expanded(
child: Padding(
padding: const EdgeInsets.all(10.0),
child: ListView(children: <Widget>[
fcsInput('Invoice Date', Icons.date_range,
controller: _dateController),
widget.invoice == null
? Container()
: Container(
padding: EdgeInsets.only(top: 5),
child: TextFormField(
controller: _invoiceNumberController,
readOnly: true,
decoration: InputDecoration(
fillColor: Colors.white,
labelText: 'Invoice Number',
labelStyle:
TextStyle(fontSize: 16, color: Colors.grey),
filled: true,
enabledBorder: InputBorder.none,
focusedBorder: InputBorder.none,
icon: Icon(
Icons.pages,
color: Colors.grey,
),
)),
),
widget.invoice == null
? Container(
padding: EdgeInsets.only(top: 5),
child: TextFormField(
initialValue: "U Nyi",
cursorColor: primaryColor,
decoration: InputDecoration(
fillColor: Colors.white,
labelText: 'Customer Name',
labelStyle:
TextStyle(fontSize: 16, color: Colors.grey),
filled: true,
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(
color: Colors.grey, width: 1.0)),
icon: Icon(
Icons.account_box,
color: Colors.grey,
),
suffixIcon: IconButton(
icon: Icon(
Icons.search,
color: Colors.grey,
),
onPressed: () {})),
),
)
: Container(),
widget.invoice == null
? Container()
: Container(
padding: EdgeInsets.only(top: 0),
child: TextFormField(
controller: _nameController,
readOnly: true,
decoration: InputDecoration(
fillColor: Colors.white,
labelText: 'Customer Name',
labelStyle:
TextStyle(fontSize: 16, color: Colors.grey),
filled: true,
enabledBorder: InputBorder.none,
focusedBorder: InputBorder.none,
icon: Icon(
Icons.account_box,
color: Colors.grey,
),
)),
),
widget.invoice == null
? Container()
: TextFormField(
controller: _phoneController,
readOnly: true,
decoration: InputDecoration(
fillColor: Colors.white,
labelText: 'Customer Phone Number',
labelStyle:
TextStyle(fontSize: 16, color: Colors.grey),
filled: true,
enabledBorder: InputBorder.none,
focusedBorder: InputBorder.none,
icon: Icon(
Icons.phone,
color: Colors.grey,
),
)),
Container(
padding: EdgeInsets.only(top: 0),
child: fcsInput('Amount', FontAwesomeIcons.moneyBill,
controller: _amountController),
),
Container(
padding: EdgeInsets.only(top: 5),
child: fcsInput('Discount', FontAwesomeIcons.tag,
controller: _discountController),
),
widget.invoice == null
? Container()
: Container(
padding: EdgeInsets.only(top: 5),
child: TextFormField(
controller: _statusController,
decoration: InputDecoration(
fillColor: Colors.white,
labelText: 'Status',
filled: true,
icon: Image.asset(
'assets/status.png',
width: 24,
height: 24,
color: Colors.grey[700],
),
)),
),
SizedBox(
height: 20,
),
ExpansionTile(
title: Text('Payment Attachment'),
children: <Widget>[
Container(
padding: EdgeInsets.only(left: 20),
child: Row(children: <Widget>[
LocalText(
context,
"invoice.payment",
color: Colors.grey,
fontSize: 14,
),
MultiImageFile(
enabled: true,
controller: multiImgController,
title: "Receipt File",
)
])),
SizedBox(
height: 25,
),
],
),
ExpansionTile(
title: Text('Package Informations'),
children: <Widget>[
Container(
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: MyDataTable(
headingRowHeight: 40,
columnSpacing: 20,
columns: [
MyDataColumn(
label: LocalText(
context,
"package.number",
color: Colors.grey,
),
),
MyDataColumn(
label: LocalText(
context,
"package.rate",
color: Colors.grey,
),
),
MyDataColumn(
label: LocalText(
context,
"package.weight",
color: Colors.grey,
),
),
MyDataColumn(
label: LocalText(
context,
"package.amount",
color: Colors.grey,
),
),
],
rows: getPackageRow(context),
),
),
),
Container(
padding: EdgeInsets.only(top: 20),
child: Align(
alignment: Alignment.bottomRight,
child: FloatingActionButton.extended(
icon: Icon(Icons.add),
label: Text(AppTranslations.of(context)
.text("invoice.add_package")),
backgroundColor: primaryColor,
onPressed: () {
Navigator.of(context)
.push(BottomUpPageRoute(PackageAddition()));
},
),
),
),
SizedBox(height: 25),
],
),
]),
)),
widget.invoice == null
? Align(
alignment: Alignment.bottomCenter,
child: Center(
child: Container(
width: 250,
child: FlatButton(
child: Text('Create invoice'),
color: primaryColor,
textColor: Colors.white,
onPressed: () {
Navigator.pop(context);
},
),
)))
: Container(
child: Column(
children: <Widget>[
Align(
alignment: Alignment.bottomCenter,
child: Center(
child: Container(
width: 250,
child: FlatButton(
child: Text('Save invoice'),
color: primaryColor,
textColor: Colors.white,
onPressed: () {
Navigator.pop(context);
},
),
))),
],
))
],
),
),
),
);
}
List<MyDataRow> getPackageRow(BuildContext context) {
return _packages.map((p) {
return MyDataRow(
onSelectChanged: (bool selected) {},
cells: [
MyDataCell(new Text(
p.packageNumber == null ? "" : p.packageNumber,
style: textStyle,
)),
MyDataCell(
new Text(p.rate.toString(), style: textStyle),
),
MyDataCell(
new Text("${p.weight.toString()} lb", style: textStyle),
),
MyDataCell(
new Text(p.price == null ? "" : "\$ " + p.price.toString(),
style: textStyle),
),
],
);
}).toList();
}
}

View File

@@ -0,0 +1,96 @@
import 'package:fcs/theme/theme.dart';
import 'package:fcs/vo/invoice.dart';
import 'package:fcs/widget/bottom_up_page_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:intl/intl.dart';
import '../util.dart';
import 'invoice_editor.dart';
class InvoiceListRow extends StatefulWidget {
final Invoice invoice;
const InvoiceListRow({this.invoice});
@override
_InvoiceListRowState createState() => _InvoiceListRowState();
}
class _InvoiceListRowState extends State<InvoiceListRow> {
var dateFormatter = new DateFormat('dd MMM yyyy');
final double dotSize = 15.0;
Invoice _invoice = new Invoice();
@override
void initState() {
super.initState();
if (widget.invoice != null) {
_invoice = widget.invoice;
}
}
@override
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.only(left: 15, right: 15),
child: InkWell(
onTap: () {
Navigator.of(context)
.push(BottomUpPageRoute(InvoiceEditor(invoice: _invoice)));
},
child: Row(
children: <Widget>[
Expanded(
child: new Padding(
padding: const EdgeInsets.symmetric(vertical: 10.0),
child: new Row(
children: <Widget>[
Container(
padding: EdgeInsets.only(left: 5, right: 10),
child: Icon(
FontAwesomeIcons.fileInvoice,
color: primaryColor,
size: 30,
),
),
new Expanded(
child: new Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Padding(
padding: const EdgeInsets.only(left: 8.0),
child: new Text(
_invoice.invoiceNumber == null
? ''
: _invoice.invoiceNumber,
style: new TextStyle(
fontSize: 15.0, color: Colors.black),
),
),
Padding(
padding: const EdgeInsets.only(left: 10.0, top: 10),
child: new Text(
dateFormatter.format(_invoice.invoiceDate),
style: new TextStyle(
fontSize: 15.0, color: Colors.grey),
),
)
],
),
),
],
),
),
),
Padding(
padding: const EdgeInsets.all(0),
child: getStatus(_invoice.status),
),
],
),
),
);
}
}

View File

@@ -0,0 +1,107 @@
import 'package:fcs/model_fcs/package_model.dart';
import 'package:fcs/theme/theme.dart';
import 'package:fcs/vo/package.dart';
import 'package:fcs/widget/localization/app_translations.dart';
import 'package:fcs/widget/progress.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class PackageAddition extends StatefulWidget {
final Package package;
PackageAddition({this.package});
@override
_PackageAdditionState createState() => _PackageAdditionState();
}
class _PackageAdditionState extends State<PackageAddition> {
Package _package = new Package();
bool _isLoading = false;
@override
void initState() {
super.initState();
if (widget.package != null) {
_package = widget.package;
}
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
var packageModel = Provider.of<PackageModel>(context);
return LocalProgress(
inAsyncCall: _isLoading,
child: Scaffold(
appBar: AppBar(
centerTitle: true,
leading: new IconButton(
icon: new Icon(Icons.close),
onPressed: () => Navigator.of(context).pop(),
),
backgroundColor: primaryColor,
title: Text(AppTranslations.of(context).text("package.edit.title")),
),
body: Card(
child: Column(
children: <Widget>[
Expanded(
child: Padding(
padding: const EdgeInsets.all(10.0),
child: ListView(children: <Widget>[
DropdownButtonFormField(
decoration: InputDecoration(
fillColor: Colors.white,
labelText: 'Package Number',
icon: Icon(Icons.pages)),
items: packageModel.completed
.map((e) => DropdownMenuItem(
child: Text(e.packageNumber), value: e))
.toList(),
onChanged: (map) => {},
),
]),
)),
widget.package == null
? Align(
alignment: Alignment.bottomCenter,
child: Center(
child: Container(
width: 250,
child: FlatButton(
child: Text('Add package'),
color: primaryColor,
textColor: Colors.white,
onPressed: () {
Navigator.pop(context);
},
),
)))
: Align(
alignment: Alignment.bottomCenter,
child: Center(
child: Container(
width: 250,
child: FlatButton(
child: Text('Save package'),
color: primaryColor,
textColor: Colors.white,
onPressed: () {
Navigator.pop(context);
},
),
))),
SizedBox(
height: 30,
)
],
),
),
),
);
}
}

View File

@@ -0,0 +1,141 @@
import 'package:fcs/model/main_model.dart';
import 'package:fcs/model/pickup_model.dart';
import 'package:fcs/theme/theme.dart';
import 'package:fcs/vo/package.dart';
import 'package:fcs/widget/label_widgets.dart';
import 'package:fcs/widget/localization/app_translations.dart';
import 'package:fcs/widget/progress.dart';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
class PackageInfo extends StatefulWidget {
final Package package;
PackageInfo({this.package});
@override
_PackageInfoState createState() => _PackageInfoState();
}
class _PackageInfoState extends State<PackageInfo> {
var dateFormatter = new DateFormat('dd MMM yyyy');
Package _package;
bool _isLoading = false;
@override
void initState() {
super.initState();
if (widget.package != null) {
_package = widget.package;
}
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return LocalProgress(
inAsyncCall: _isLoading,
child: Scaffold(
appBar: AppBar(
centerTitle: true,
leading: new IconButton(
icon: new Icon(Icons.close),
onPressed: () => Navigator.of(context).pop(),
),
backgroundColor: primaryColor,
title: Text(AppTranslations.of(context).text("package.edit.title")),
),
body: Card(
child: Column(
children: <Widget>[
Expanded(
child: Padding(
padding: const EdgeInsets.all(10.0),
child: ListView(children: <Widget>[
Container(
padding: EdgeInsets.only(top: 10),
child: Row(
children: <Widget>[
Icon(Icons.calendar_today,),
Padding(
padding: const EdgeInsets.only(right: 8.0, left: 15),
child: labeledText(
context,
dateFormatter.format(_package.arrivedDate),
"package.arrival.date"),
),
],
),
),
Container(
padding: EdgeInsets.only(top: 10),
child: Row(
children: <Widget>[
Icon(Icons.pages),
Padding(
padding: const EdgeInsets.only(right: 8.0, left: 15),
child: labeledText(context, _package.packageNumber,
"package.number"),
),
],
),
),
Container(
padding: EdgeInsets.only(top: 10),
child: Row(
children: <Widget>[
Icon(FontAwesomeIcons.weightHanging),
Padding(
padding: const EdgeInsets.only(right: 8.0, left: 15),
child: labeledText(
context,
"${_package.weight.toString()} lb",
"package.weight"),
),
],
),
),
Container(
padding: EdgeInsets.only(top: 10),
child: Row(
children: <Widget>[
Icon(FontAwesomeIcons.tag),
Padding(
padding: const EdgeInsets.only(right: 8.0, left: 15),
child: labeledText(context, _package.rate.toString(),
"package.rate"),
),
],
),
),
Container(
padding: EdgeInsets.only(top: 10),
child: Row(
children: <Widget>[
Icon(FontAwesomeIcons.moneyBill),
Padding(
padding: const EdgeInsets.only(right: 8.0, left: 15),
child: labeledText(
context,
_package.price == null
? ""
: "\$ " + _package.price.toString(),
"package.amount"),
),
],
),
)
]),
)),
],
),
),
),
);
}
}

View File

@@ -88,7 +88,7 @@ class _ShipmentEditorState extends State<ShipmentEditor> {
_shipmentNumberController.text,
style: TextStyle(
color: Colors.black87,
fontSize: 16,
fontSize: 15,
fontWeight: FontWeight.bold),
),
),
@@ -155,24 +155,6 @@ class _ShipmentEditorState extends State<ShipmentEditor> {
@override
Widget build(BuildContext context) {
var shipmentModel = Provider.of<ShipmentModel>(context);
final statusBox = Container(
padding: EdgeInsets.only(top: 10),
child: TextFormField(
maxLines: null,
controller: _statusController,
cursorColor: primaryColor,
style: textStyle,
decoration: new InputDecoration(
labelText: 'Status',
labelStyle: TextStyle(fontSize: 14, color: Colors.grey),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: primaryColor, width: 1.0)),
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: primaryColor, width: 1.0)),
),
));
MainModel mainModel = Provider.of<MainModel>(context);
final commercialBtn = Container(
@@ -183,7 +165,7 @@ class _ShipmentEditorState extends State<ShipmentEditor> {
child: Container(
width: 250,
child: FlatButton(
child: Text('Download commercial invoice'),
child: Text('Download Commercial Invoice'),
color: primaryColor,
textColor: Colors.white,
onPressed: () {
@@ -201,7 +183,7 @@ class _ShipmentEditorState extends State<ShipmentEditor> {
child: Container(
width: 250,
child: FlatButton(
child: Text('Download packing list'),
child: Text('Download Packing List'),
color: primaryColor,
textColor: Colors.white,
onPressed: () {
@@ -237,7 +219,7 @@ class _ShipmentEditorState extends State<ShipmentEditor> {
child: Container(
width: 250,
child: FlatButton(
child: Text('Create'),
child: Text('Create Shipment'),
color: primaryColor,
textColor: Colors.white,
onPressed: () {
@@ -254,7 +236,7 @@ class _ShipmentEditorState extends State<ShipmentEditor> {
child: Container(
width: 250,
child: FlatButton(
child: Text('Update'),
child: Text('Update Shipment'),
color: primaryColor,
textColor: Colors.white,
onPressed: () {
@@ -282,76 +264,117 @@ class _ShipmentEditorState extends State<ShipmentEditor> {
child: Padding(
padding: const EdgeInsets.all(10.0),
child: ListView(children: <Widget>[
_showCustomerData(mainModel.customer),
// _showCustomerData(mainModel.customer),
widget.shipment == null
? fcsInput('Shipment number', Icons.text_rotation_none,
? fcsInput('Shipment Number', Icons.text_rotation_none,
controller: _shipmentNumberController)
: Container(),
: Container(
child: TextFormField(
controller: _shipmentNumberController,
readOnly: true,
decoration: InputDecoration(
fillColor: Colors.white,
labelText: 'Shipment Number',
labelStyle:
TextStyle(fontSize: 16, color: Colors.grey),
filled: true,
enabledBorder: InputBorder.none,
focusedBorder: InputBorder.none,
icon: Icon(
Icons.text_rotation_none,
color: Colors.grey,
),
)),
),
widget.shipment == null
? Container(
padding: EdgeInsets.only(top: 15),
child: fcsInput('Cutoff date', Icons.date_range,
padding: EdgeInsets.only(top: 5),
child: fcsInput('Cutoff Date', Icons.date_range,
controller: _cutoffDateController),
)
: Container(),
widget.shipment == null
? Container(
padding: EdgeInsets.only(top: 15),
child: showShipmentTypes(context, shipmentModel))
padding: EdgeInsets.only(top: 5),
child: DropdownButtonFormField(
decoration: InputDecoration(
fillColor: Colors.white,
labelText: 'Shipment Type',
icon: Icon(Icons.pages)),
items: shipmentModel.shipmentType
.map((e) =>
DropdownMenuItem(child: Text(e), value: e))
.toList(),
onChanged: (selected) => {
setState(() {
_currentShipment = selected;
})
},
),
)
: Container(),
Container(
padding: EdgeInsets.only(top: 15),
child: fcsInput('Arrival date', Icons.date_range,
padding:
EdgeInsets.only(top: widget.shipment == null ? 5 : 0),
child: fcsInput('Arrival Date', Icons.date_range,
controller: _arrivalDateController),
),
Container(
padding: EdgeInsets.only(top: 15),
child: fcsInput('Departure date', Icons.date_range,
padding: EdgeInsets.only(top: 5),
child: fcsInput('Departure Date', Icons.date_range,
controller: _departureDateControler),
),
widget.shipment == null
? Container(
padding: EdgeInsets.only(top: 15),
padding: EdgeInsets.only(top: 5),
child: fcsInput('Consignee', Icons.work,
controller: _consigneeController),
)
: Container(),
widget.shipment == null
? Container(
padding: EdgeInsets.only(top: 15),
padding: EdgeInsets.only(top: 5),
child: fcsInput(
'Port of loading', FontAwesomeIcons.ship,
'Port of Loading', FontAwesomeIcons.ship,
controller: _portController),
)
: Container(),
widget.shipment == null
? Container(
padding: EdgeInsets.only(top: 15),
child: fcsInput('Final destination',
padding: EdgeInsets.only(top: 5),
child: fcsInput('Final Destination',
MaterialCommunityIcons.location_enter,
controller: _destinationController),
)
: Container(),
widget.shipment == null
? Container()
: Row(
children: <Widget>[
Padding(
padding:
const EdgeInsets.only(top: 15, right: 8.0),
child: Image.asset(
'assets/status.png',
width: 24,
height: 24,
),
),
Expanded(child: statusBox)
],
: Container(
padding: EdgeInsets.only(top: 5),
child: TextFormField(
controller: _statusController,
cursorColor: primaryColor,
decoration: InputDecoration(
fillColor: Colors.white,
labelText: 'Status',
filled: true,
labelStyle:
TextStyle(fontSize: 16, color: Colors.grey),
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(
color: Colors.grey, width: 1.0)),
icon: Image.asset(
'assets/status.png',
width: 24,
height: 24,
color: Colors.grey[700],
),
)),
),
widget.shipment == null
? Container()
: Container(
padding: EdgeInsets.only(top: 15),
padding: EdgeInsets.only(top: 5),
child: fcsInput('Remark', MaterialCommunityIcons.note,
controller: _remarkController),
),

View File

@@ -1,4 +1,5 @@
import 'package:fcs/model/shipment_model.dart';
import 'package:fcs/widget/bottom_up_page_route.dart';
import 'package:fcs/widget/local_text.dart';
import 'package:provider/provider.dart';
import 'package:fcs/pages/search_page.dart';
@@ -84,10 +85,7 @@ class _ShipmentListState extends State<ShipmentList> {
}
_newShipment() {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => new ShipmentEditor()),
);
Navigator.of(context).push(BottomUpPageRoute(ShipmentEditor()));
}
Widget _upComing() {

View File

@@ -1,5 +1,6 @@
import 'package:fcs/theme/theme.dart';
import 'package:fcs/vo/shipment.dart';
import 'package:fcs/widget/bottom_up_page_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:intl/intl.dart';
@@ -35,11 +36,8 @@ class _ShipmentListRowState extends State<ShipmentListRow> {
padding: EdgeInsets.only(left: 15, right: 15),
child: InkWell(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ShipmentEditor(shipment: _shipment)),
);
Navigator.of(context)
.push(BottomUpPageRoute(ShipmentEditor(shipment: _shipment)));
},
child: Row(
children: <Widget>[

View File

@@ -1,4 +1,5 @@
import 'package:country_code_picker/country_code_picker.dart';
import 'package:fcs/widget/bottom_up_page_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
@@ -162,11 +163,8 @@ class _SigninPageState extends State<SigninPage> {
? phoneNumber.replaceFirst("0", "")
: phoneNumber;
phoneNumber = dialCode + phoneNumber;
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => CodePage(phoneNumber: phoneNumber)));
await Navigator.of(context)
.push(BottomUpPageRoute(CodePage(phoneNumber: phoneNumber)));
Navigator.pop(context);
if (exp != null) throw exp;

View File

@@ -1,3 +1,4 @@
import 'package:fcs/widget/bottom_up_page_route.dart';
import 'package:fcs/widget/localization/app_translations.dart';
import 'package:flutter/material.dart';
import 'package:flutter_icons/flutter_icons.dart';
@@ -47,10 +48,7 @@ class _StaffListState extends State<StaffList> {
),
floatingActionButton: FloatingActionButton.extended(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => StaffEditor()),
);
Navigator.of(context).push(BottomUpPageRoute(StaffEditor()));
},
icon: Icon(Icons.add),
label: Text(AppTranslations.of(context).text("staff.new")),
@@ -70,11 +68,8 @@ class _StaffListState extends State<StaffList> {
children: <Widget>[
InkWell(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => StaffEditor(staff: user)),
);
Navigator.of(context)
.push(BottomUpPageRoute(StaffEditor(staff: user)));
},
child: Row(
children: <Widget>[

View File

@@ -274,12 +274,30 @@ Widget getStatus(String status) {
style: TextStyle(
color: Colors.green, fontSize: 12),
)
: Chip(
avatar: Icon(
Icons.check,
size: 14,
),
label: Text(status));
: status == "Paid"
? Row(
children: <Widget>[
Padding(
padding:
const EdgeInsets.all(8.0),
child: Icon(Icons.check),
),
Text(
status,
style: TextStyle(
color: primaryColor,
fontSize: 18,
fontWeight: FontWeight.bold),
)
],
)
: Text(
status,
style: TextStyle(
color: primaryColor,
fontSize: 18,
fontWeight: FontWeight.bold),
);
}
call(BuildContext context, String phone) {
@@ -386,88 +404,104 @@ Widget phoneWidget(BuildContext context, String phone) {
Widget fcsInput(String label, IconData iconData,
{TextEditingController controller, String value}) {
return Row(
children: <Widget>[
// Padding(
// padding: const EdgeInsets.only(right: 8.0),
// child: Icon(iconData),
// ),
Expanded(
child: Container(
child: Row(children: <Widget>[
Expanded(
child: TextFormField(
initialValue: value,
controller: controller,
cursorColor: primaryColor,
maxLines: null,
minLines: 1,
decoration: InputDecoration(
fillColor: Colors.white,
labelText: label,
labelStyle: TextStyle(fontSize: 16, color: Colors.grey),
filled: true,
icon: Icon(
iconData,
color: Colors.grey,
),
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Colors.grey, width: 1.0)),
))
// TextFormField(
// initialValue: value,
// controller: controller,
// cursorColor: primaryColor,
// maxLines: null,
// minLines: 1,
// textAlign: TextAlign.left,
// decoration: new InputDecoration(
// contentPadding: EdgeInsets.only(top: 8),
// labelText: label,
// labelStyle: TextStyle(fontSize: 14, color: Colors.grey),
// enabledBorder: UnderlineInputBorder(
// borderSide: BorderSide(color: primaryColor, width: 1.0)),
// focusedBorder: UnderlineInputBorder(
// borderSide: BorderSide(color: primaryColor, width: 1.0)),
// ),
// )
),
]),
)),
],
);
return TextFormField(
initialValue: value,
controller: controller,
cursorColor: primaryColor,
maxLines: null,
minLines: 1,
decoration: InputDecoration(
fillColor: Colors.white,
labelText: label,
labelStyle: TextStyle(fontSize: 16, color: Colors.grey),
filled: true,
icon: Icon(
iconData,
color: Colors.grey,
),
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Colors.grey, width: 1.0)),
));
// return Row(
// children: <Widget>[
// Padding(
// padding: const EdgeInsets.only(right: 8.0),
// child: Icon(iconData),
// ),
// Expanded(
// child: Container(
// child: Row(children: <Widget>[
// Expanded(
// child: TextFormField(
// initialValue: value,
// controller: controller,
// cursorColor: primaryColor,
// maxLines: null,
// minLines: 1,
// textAlign: TextAlign.left,
// decoration: new InputDecoration(
// contentPadding: EdgeInsets.only(top: 8),
// labelText: label,
// labelStyle: TextStyle(fontSize: 14, color: Colors.grey),
// enabledBorder: UnderlineInputBorder(
// borderSide: BorderSide(color: primaryColor, width: 1.0)),
// focusedBorder: UnderlineInputBorder(
// borderSide: BorderSide(color: primaryColor, width: 1.0)),
// ),
// )),
// ]),
// )),
// ],
// );
}
Widget fcsInputReadOnly(String label, IconData iconData,
{TextEditingController controller, String value}) {
return Row(
children: <Widget>[
Expanded(
child: Container(
child: Row(children: <Widget>[
Expanded(
child: TextFormField(
initialValue: value,
controller: controller,
cursorColor: primaryColor,
maxLines: null,
minLines: 1,
decoration: InputDecoration(
fillColor: Colors.white,
border: InputBorder.none,
labelText: label,
labelStyle: TextStyle(fontSize: 16, color: Colors.grey),
filled: true,
icon: Icon(
iconData,
color: Colors.grey,
),
))
),
]),
)),
],
);
return TextFormField(
initialValue: value,
controller: controller,
cursorColor: primaryColor,
maxLines: null,
minLines: 1,
decoration: InputDecoration(
fillColor: Colors.white,
border: InputBorder.none,
labelText: label,
labelStyle: TextStyle(fontSize: 16, color: Colors.grey),
filled: true,
icon: Icon(
iconData,
color: Colors.grey,
),
));
// return Row(
// children: <Widget>[
// Padding(
// padding: const EdgeInsets.only(right: 8.0),
// child: Icon(iconData),
// ),
// Expanded(
// child: Container(
// child: Row(children: <Widget>[
// Expanded(
// child: TextFormField(
// initialValue: value,
// controller: controller,
// cursorColor: primaryColor,
// maxLines: null,
// minLines: 1,
// readOnly: true,
// textAlign: TextAlign.left,
// decoration: new InputDecoration(
// border: InputBorder.none,
// contentPadding: EdgeInsets.only(top: 8),
// labelText: label,
// ),
// )),
// ]),
// )),
// ],
// );
}
Widget fcsDropDown(String label, IconData iconData,