Merge branch 'master' of tzw/fcs into master
This commit is contained in:
@@ -118,7 +118,7 @@ const carton_invoiced_status = "invoiced";
|
|||||||
const carton_canceled_status = "canceled";
|
const carton_canceled_status = "canceled";
|
||||||
const all_status = "All stauts";
|
const all_status = "All stauts";
|
||||||
const all = "All";
|
const all = "All";
|
||||||
const see_all ="See All";
|
const see_more = "See More";
|
||||||
|
|
||||||
// shipment status
|
// shipment status
|
||||||
const shipment_pending_status = "pending";
|
const shipment_pending_status = "pending";
|
||||||
|
|||||||
@@ -13,10 +13,12 @@ import 'package:fcs/pages/widgets/progress.dart';
|
|||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_vector_icons/flutter_vector_icons.dart';
|
import 'package:flutter_vector_icons/flutter_vector_icons.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
import '../main/util.dart';
|
import '../main/util.dart';
|
||||||
import 'carton_package_form.dart';
|
import 'carton_package_form.dart';
|
||||||
import 'carton_info.dart';
|
import 'carton_info.dart';
|
||||||
import 'mix_carton/mix_carton_form.dart';
|
import 'mix_carton/mix_carton_form.dart';
|
||||||
|
import 'model/package_selection_model.dart';
|
||||||
import 'widget/carton_row.dart';
|
import 'widget/carton_row.dart';
|
||||||
|
|
||||||
class CartonEditor extends StatefulWidget {
|
class CartonEditor extends StatefulWidget {
|
||||||
@@ -38,6 +40,7 @@ class _CartonEditorState extends State<CartonEditor> {
|
|||||||
User? _consignee;
|
User? _consignee;
|
||||||
User? _sender;
|
User? _sender;
|
||||||
Carton? _carton;
|
Carton? _carton;
|
||||||
|
bool _hasPackages = true;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@@ -140,6 +143,12 @@ class _CartonEditorState extends State<CartonEditor> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!_hasPackages) {
|
||||||
|
showMsgDialog(
|
||||||
|
context, "Error", "No packages in sender and consignee");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
CupertinoPageRoute(
|
CupertinoPageRoute(
|
||||||
@@ -170,10 +179,12 @@ class _CartonEditorState extends State<CartonEditor> {
|
|||||||
)),
|
)),
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: Icon(Icons.search, color: Colors.black),
|
icon: Icon(Icons.search, color: Colors.black),
|
||||||
onPressed: () => searchUser(context, onUserSelect: (u) {
|
onPressed: () => searchUser(context, onUserSelect: (u) async {
|
||||||
setState(() {
|
setState(() {
|
||||||
this._consignee = u;
|
this._consignee = u;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
_checkPackages();
|
||||||
}, popPage: true)),
|
}, popPage: true)),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
@@ -197,11 +208,12 @@ class _CartonEditorState extends State<CartonEditor> {
|
|||||||
|
|
||||||
final consigneeBox = Container(
|
final consigneeBox = Container(
|
||||||
child: Column(
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
consigneeSearchBox,
|
consigneeSearchBox,
|
||||||
consigneefcsIDBox,
|
consigneefcsIDBox,
|
||||||
consigneePhoneBox,
|
consigneePhoneBox,
|
||||||
consigneeNameBox
|
consigneeNameBox,
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
@@ -216,10 +228,12 @@ class _CartonEditorState extends State<CartonEditor> {
|
|||||||
)),
|
)),
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: Icon(Icons.search, color: Colors.black),
|
icon: Icon(Icons.search, color: Colors.black),
|
||||||
onPressed: () => searchUser(context, onUserSelect: (u) {
|
onPressed: () => searchUser(context, onUserSelect: (u) async {
|
||||||
setState(() {
|
setState(() {
|
||||||
this._sender = u;
|
this._sender = u;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
_checkPackages();
|
||||||
}, popPage: true)),
|
}, popPage: true)),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
@@ -243,6 +257,7 @@ class _CartonEditorState extends State<CartonEditor> {
|
|||||||
|
|
||||||
final senderBox = Container(
|
final senderBox = Container(
|
||||||
child: Column(
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
senderSearchBox,
|
senderSearchBox,
|
||||||
senderIDBox,
|
senderIDBox,
|
||||||
@@ -268,14 +283,24 @@ class _CartonEditorState extends State<CartonEditor> {
|
|||||||
cartonTypeBox,
|
cartonTypeBox,
|
||||||
isFromPackages
|
isFromPackages
|
||||||
? Column(
|
? Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
LocalTitle(textKey: "box.select.sender_and_consignee"),
|
LocalTitle(textKey: "box.select.sender_and_consignee"),
|
||||||
Row(
|
Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Flexible(child: senderBox),
|
Flexible(child: senderBox),
|
||||||
Flexible(child: consigneeBox)
|
Flexible(child: consigneeBox)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
!_hasPackages
|
||||||
|
? Padding(
|
||||||
|
padding: const EdgeInsets.only(top: 5),
|
||||||
|
child: Text("No packages in sender and consignee",
|
||||||
|
style: TextStyle(
|
||||||
|
color: dangerColor, fontSize: 13)),
|
||||||
|
)
|
||||||
|
: const SizedBox()
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
: Container(),
|
: Container(),
|
||||||
@@ -290,6 +315,18 @@ class _CartonEditorState extends State<CartonEditor> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_checkPackages() async {
|
||||||
|
if (_sender != null && _consignee != null) {
|
||||||
|
var p = await context
|
||||||
|
.read<PackageSelectionModel>()
|
||||||
|
.getPackagesBySenderAndConsigneeId(
|
||||||
|
senderId: _sender!.id ?? "", consigneeId: _consignee!.id ?? "");
|
||||||
|
setState(() {
|
||||||
|
_hasPackages = p.isNotEmpty;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
List<Widget> _getCartons(BuildContext context, List<Carton> cartons) {
|
List<Widget> _getCartons(BuildContext context, List<Carton> cartons) {
|
||||||
return cartons.map((c) {
|
return cartons.map((c) {
|
||||||
return InkWell(
|
return InkWell(
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ class _CartonListState extends State<CartonList> {
|
|||||||
_shipments.insert(0, model.defaultShipment);
|
_shipments.insert(0, model.defaultShipment);
|
||||||
if (_shipments.length > shipmentCountForCartonFilter) {
|
if (_shipments.length > shipmentCountForCartonFilter) {
|
||||||
_shipments.insert(_shipments.length,
|
_shipments.insert(_shipments.length,
|
||||||
FcsShipment(shipmentNumber: "See All", id: see_all));
|
FcsShipment(shipmentNumber: "See More", id: see_more));
|
||||||
}
|
}
|
||||||
|
|
||||||
_selectedShipment = model.shipment ?? model.defaultShipment;
|
_selectedShipment = model.shipment ?? model.defaultShipment;
|
||||||
@@ -72,7 +72,7 @@ class _CartonListState extends State<CartonList> {
|
|||||||
child: ActionChip(
|
child: ActionChip(
|
||||||
shape: StadiumBorder(
|
shape: StadiumBorder(
|
||||||
side: BorderSide(
|
side: BorderSide(
|
||||||
color: g.id == see_all
|
color: g.id == see_more
|
||||||
? Colors.transparent
|
? Colors.transparent
|
||||||
: _selectedShipment?.id == g.id
|
: _selectedShipment?.id == g.id
|
||||||
? primaryColor
|
? primaryColor
|
||||||
@@ -83,7 +83,7 @@ class _CartonListState extends State<CartonList> {
|
|||||||
},
|
},
|
||||||
label: Text(g.shipmentNumber ?? "",
|
label: Text(g.shipmentNumber ?? "",
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: g.id == see_all
|
color: g.id == see_more
|
||||||
? primaryColor
|
? primaryColor
|
||||||
: _selectedShipment?.id == g.id
|
: _selectedShipment?.id == g.id
|
||||||
? primaryColor
|
? primaryColor
|
||||||
@@ -343,7 +343,7 @@ class _CartonListState extends State<CartonList> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_filterShipment(FcsShipment shipment) async {
|
_filterShipment(FcsShipment shipment) async {
|
||||||
if (shipment.id == see_all) {
|
if (shipment.id == see_more) {
|
||||||
_showFilter();
|
_showFilter();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import 'package:fcs/pages/widgets/local_radio.dart';
|
import 'package:fcs/pages/widgets/local_radio.dart';
|
||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_vector_icons/flutter_vector_icons.dart';
|
import 'package:flutter_vector_icons/flutter_vector_icons.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
@@ -7,6 +8,7 @@ import '../../../domain/entities/carton_size.dart';
|
|||||||
import '../../../domain/entities/fcs_shipment.dart';
|
import '../../../domain/entities/fcs_shipment.dart';
|
||||||
import '../../../helpers/theme.dart';
|
import '../../../helpers/theme.dart';
|
||||||
import '../../domain/entities/user.dart';
|
import '../../domain/entities/user.dart';
|
||||||
|
import '../carton_size/carton_size_list.dart';
|
||||||
import '../carton_size/model/carton_size_model.dart';
|
import '../carton_size/model/carton_size_model.dart';
|
||||||
import '../fcs_shipment/model/fcs_shipment_model.dart';
|
import '../fcs_shipment/model/fcs_shipment_model.dart';
|
||||||
import '../main/util.dart';
|
import '../main/util.dart';
|
||||||
@@ -120,7 +122,8 @@ class _CartonSizeWidgetState extends State<CartonSizeWidget> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
List<CartonSize> cartonSizes = context.watch<CartonSizeModel>().cartonSizes;
|
List<CartonSize> cartonSizes =
|
||||||
|
context.watch<CartonSizeModel>().getCartonSizes;
|
||||||
bool isStandardSize = _cartonSizeType == standardCarton;
|
bool isStandardSize = _cartonSizeType == standardCarton;
|
||||||
bool isCustomSize = _cartonSizeType == customCarton;
|
bool isCustomSize = _cartonSizeType == customCarton;
|
||||||
bool isNoneDefinedSize = _cartonSizeType == packageCartion;
|
bool isNoneDefinedSize = _cartonSizeType == packageCartion;
|
||||||
@@ -277,6 +280,11 @@ class _CartonSizeWidgetState extends State<CartonSizeWidget> {
|
|||||||
underline: Container(height: 1, color: Colors.grey),
|
underline: Container(height: 1, color: Colors.grey),
|
||||||
onChanged: (newValue) {
|
onChanged: (newValue) {
|
||||||
setState(() {
|
setState(() {
|
||||||
|
if (newValue?.name == MANAGE_CARTONSIZE) {
|
||||||
|
_selectStandardSize = null;
|
||||||
|
_manageCartonSize();
|
||||||
|
return;
|
||||||
|
}
|
||||||
_selectStandardSize = newValue!;
|
_selectStandardSize = newValue!;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@@ -285,16 +293,22 @@ class _CartonSizeWidgetState extends State<CartonSizeWidget> {
|
|||||||
cartonSizes.map<DropdownMenuItem<CartonSize>>((CartonSize value) {
|
cartonSizes.map<DropdownMenuItem<CartonSize>>((CartonSize value) {
|
||||||
return DropdownMenuItem<CartonSize>(
|
return DropdownMenuItem<CartonSize>(
|
||||||
value: value,
|
value: value,
|
||||||
child: Row(
|
child: value.name == MANAGE_CARTONSIZE
|
||||||
children: [
|
? Text("${value.name}",
|
||||||
Text("${value.name} - ",
|
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: isStandardSize ? Colors.black : labelColor)),
|
color: isStandardSize ? secondaryColor : labelColor))
|
||||||
Text(
|
: Row(
|
||||||
"${value.length.toInt()}”x${value.width.toInt()}”x${value.height.toInt()}”",
|
children: [
|
||||||
style: TextStyle(color: labelColor)),
|
Text("${value.name} - ",
|
||||||
],
|
style: TextStyle(
|
||||||
),
|
color: isStandardSize
|
||||||
|
? Colors.black
|
||||||
|
: labelColor)),
|
||||||
|
Text(
|
||||||
|
"${value.length.toInt()}”x${value.width.toInt()}”x${value.height.toInt()}”",
|
||||||
|
style: TextStyle(color: labelColor)),
|
||||||
|
],
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}).toList(),
|
}).toList(),
|
||||||
),
|
),
|
||||||
@@ -484,4 +498,11 @@ class _CartonSizeWidgetState extends State<CartonSizeWidget> {
|
|||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_manageCartonSize() {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
CupertinoPageRoute(builder: (context) => CartonSizeList()),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,35 +56,32 @@ class _CartonSelectionWidgetState extends State<CartonSelectionWidget> {
|
|||||||
|
|
||||||
_init() {
|
_init() {
|
||||||
var model = context.read<CartonSelectionModel>();
|
var model = context.read<CartonSelectionModel>();
|
||||||
model.addDefaultCartons(widget.shipment.id!);
|
_controller.text = model.query;
|
||||||
|
_query = model.query;
|
||||||
|
model.refresh(widget.shipment.id!, term: _query);
|
||||||
|
|
||||||
model.addSelectedCarton(widget.cartons);
|
model.addSelectedCarton(widget.cartons);
|
||||||
|
|
||||||
_controller.text = model.query;
|
|
||||||
_query = model.query;
|
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
setState(() {});
|
setState(() {});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
// @override
|
||||||
void didUpdateWidget(covariant CartonSelectionWidget oldWidget) {
|
// void didUpdateWidget(covariant CartonSelectionWidget oldWidget) {
|
||||||
_init();
|
// _init();
|
||||||
super.didUpdateWidget(oldWidget);
|
// super.didUpdateWidget(oldWidget);
|
||||||
}
|
// }
|
||||||
|
|
||||||
Future<void> _loadMoreData() async {
|
Future<void> _loadMoreData() async {
|
||||||
if (_isLoadMore) return;
|
if (_isLoadMore) return;
|
||||||
var model = context.read<CartonSelectionModel>();
|
var model = context.read<CartonSelectionModel>();
|
||||||
if (model.reachEnd || model.ended) return;
|
if (model.ended) return;
|
||||||
setState(() {
|
setState(() {
|
||||||
_isLoadMore = true;
|
_isLoadMore = true;
|
||||||
});
|
});
|
||||||
if (_query != "") {
|
|
||||||
await model.loadMoreSearch(term: _query, shipmentId: widget.shipment.id!);
|
await model.loadMoreData(widget.shipment.id!, term: _query);
|
||||||
} else {
|
|
||||||
await model.loadMoreData(widget.shipment.id!);
|
|
||||||
}
|
|
||||||
|
|
||||||
setState(() {
|
setState(() {
|
||||||
_isLoadMore = false;
|
_isLoadMore = false;
|
||||||
@@ -95,7 +92,7 @@ class _CartonSelectionWidgetState extends State<CartonSelectionWidget> {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
var model = context.watch<CartonSelectionModel>();
|
var model = context.watch<CartonSelectionModel>();
|
||||||
List<Carton> searchResults = model.cartons;
|
List<Carton> searchResults = model.cartons;
|
||||||
List<Carton> selectedCartonList = model.selectedCartonList;
|
List<Carton> selectedCartonList = model.selectedCartons;
|
||||||
|
|
||||||
final continueBtn = ContinueButton(
|
final continueBtn = ContinueButton(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import 'package:fcs/pages/widgets/local_radio.dart';
|
import 'package:fcs/pages/widgets/local_radio.dart';
|
||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_vector_icons/flutter_vector_icons.dart';
|
import 'package:flutter_vector_icons/flutter_vector_icons.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
@@ -6,6 +7,7 @@ import '../../../domain/constants.dart';
|
|||||||
import '../../../domain/entities/carton_size.dart';
|
import '../../../domain/entities/carton_size.dart';
|
||||||
import '../../../domain/entities/fcs_shipment.dart';
|
import '../../../domain/entities/fcs_shipment.dart';
|
||||||
import '../../../helpers/theme.dart';
|
import '../../../helpers/theme.dart';
|
||||||
|
import '../../carton_size/carton_size_list.dart';
|
||||||
import '../../carton_size/model/carton_size_model.dart';
|
import '../../carton_size/model/carton_size_model.dart';
|
||||||
import '../../fcs_shipment/model/fcs_shipment_model.dart';
|
import '../../fcs_shipment/model/fcs_shipment_model.dart';
|
||||||
import '../../main/util.dart';
|
import '../../main/util.dart';
|
||||||
@@ -17,6 +19,7 @@ import '../../widgets/local_title.dart';
|
|||||||
import '../../widgets/previous_button.dart';
|
import '../../widgets/previous_button.dart';
|
||||||
|
|
||||||
typedef OnPrevious = Function();
|
typedef OnPrevious = Function();
|
||||||
|
const manageStandardCartonSize = "Manage carton size";
|
||||||
|
|
||||||
typedef OnContinue = Function(FcsShipment shipment, String cartonSizeType,
|
typedef OnContinue = Function(FcsShipment shipment, String cartonSizeType,
|
||||||
{CartonSize? standardSize, double? length, double? width, double? height});
|
{CartonSize? standardSize, double? length, double? width, double? height});
|
||||||
@@ -101,7 +104,9 @@ class _TypeWidgetState extends State<TypeWidget> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
List<CartonSize> cartonSizes = context.watch<CartonSizeModel>().cartonSizes;
|
List<CartonSize> cartonSizes =
|
||||||
|
context.watch<CartonSizeModel>().getCartonSizes;
|
||||||
|
|
||||||
bool isStandardSize = _cartionSizeType == standardCarton;
|
bool isStandardSize = _cartionSizeType == standardCarton;
|
||||||
bool isCustomSize = _cartionSizeType == customCarton;
|
bool isCustomSize = _cartionSizeType == customCarton;
|
||||||
bool isNoneDefinedSize = _cartionSizeType == packageCartion;
|
bool isNoneDefinedSize = _cartionSizeType == packageCartion;
|
||||||
@@ -156,6 +161,11 @@ class _TypeWidgetState extends State<TypeWidget> {
|
|||||||
underline: Container(height: 1, color: Colors.grey),
|
underline: Container(height: 1, color: Colors.grey),
|
||||||
onChanged: (newValue) {
|
onChanged: (newValue) {
|
||||||
setState(() {
|
setState(() {
|
||||||
|
if (newValue?.name == MANAGE_CARTONSIZE) {
|
||||||
|
_selectStandardSize = null;
|
||||||
|
_manageCartonSize();
|
||||||
|
return;
|
||||||
|
}
|
||||||
_selectStandardSize = newValue!;
|
_selectStandardSize = newValue!;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@@ -164,16 +174,22 @@ class _TypeWidgetState extends State<TypeWidget> {
|
|||||||
cartonSizes.map<DropdownMenuItem<CartonSize>>((CartonSize value) {
|
cartonSizes.map<DropdownMenuItem<CartonSize>>((CartonSize value) {
|
||||||
return DropdownMenuItem<CartonSize>(
|
return DropdownMenuItem<CartonSize>(
|
||||||
value: value,
|
value: value,
|
||||||
child: Row(
|
child: value.name == MANAGE_CARTONSIZE
|
||||||
children: [
|
? Text("${value.name}",
|
||||||
Text("${value.name} - ",
|
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: isStandardSize ? Colors.black : labelColor)),
|
color: isStandardSize ? secondaryColor : labelColor))
|
||||||
Text(
|
: Row(
|
||||||
"${value.length.toInt()}”x${value.width.toInt()}”x${value.height.toInt()}”",
|
children: [
|
||||||
style: TextStyle(color: labelColor)),
|
Text("${value.name} - ",
|
||||||
],
|
style: TextStyle(
|
||||||
),
|
color: isStandardSize
|
||||||
|
? Colors.black
|
||||||
|
: labelColor)),
|
||||||
|
Text(
|
||||||
|
"${value.length.toInt()}”x${value.width.toInt()}”x${value.height.toInt()}”",
|
||||||
|
style: TextStyle(color: labelColor)),
|
||||||
|
],
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}).toList(),
|
}).toList(),
|
||||||
),
|
),
|
||||||
@@ -355,4 +371,11 @@ class _TypeWidgetState extends State<TypeWidget> {
|
|||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_manageCartonSize() {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
CupertinoPageRoute(builder: (context) => CartonSizeList()),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,92 +9,36 @@ import '../../main/model/base_model.dart';
|
|||||||
|
|
||||||
class CartonSelectionModel extends BaseModel {
|
class CartonSelectionModel extends BaseModel {
|
||||||
final log = Logger("CartonSelectionModel");
|
final log = Logger("CartonSelectionModel");
|
||||||
// for search
|
|
||||||
String query = "";
|
String query = "";
|
||||||
int offset = 0;
|
|
||||||
bool reachEnd = false;
|
|
||||||
List<Carton> cartons = [];
|
List<Carton> cartons = [];
|
||||||
|
List<Carton> selectedCartons = [];
|
||||||
|
|
||||||
bool isLoading = false;
|
bool isLoading = false;
|
||||||
|
|
||||||
// for default carton
|
|
||||||
DocumentSnapshot? _lastDocument;
|
DocumentSnapshot? _lastDocument;
|
||||||
bool ended = false;
|
bool ended = false;
|
||||||
|
|
||||||
List<Carton> selectedCartonList = [];
|
|
||||||
|
|
||||||
Timer? t;
|
Timer? t;
|
||||||
search(String term, {bool imm = false, required String shipmentId}) async {
|
search(String term, {bool imm = false, required String shipmentId}) async {
|
||||||
query = term;
|
query = term;
|
||||||
cartons.clear();
|
cartons.clear();
|
||||||
offset = 0;
|
_lastDocument = null;
|
||||||
reachEnd = false;
|
ended = false;
|
||||||
|
|
||||||
t?.cancel();
|
t?.cancel();
|
||||||
t = Timer(Duration(milliseconds: imm ? 0 : 800), () async {
|
t = Timer(Duration(milliseconds: imm ? 0 : 800), () async {
|
||||||
await loadMoreSearch(term: term, shipmentId: shipmentId);
|
await refresh(shipmentId, term: term);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> loadMoreSearch(
|
Future<void> refresh(String shipmentId, {String term = ""}) async {
|
||||||
{required String term, required String shipmentId}) async {
|
|
||||||
if (term == "") {
|
|
||||||
await _refresh(shipmentId);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// int rowPerPage = 21;
|
|
||||||
// List<Carton> list = [];
|
|
||||||
// SearchPara searchPara = SearchPara(filters: [], term: term);
|
|
||||||
// isLoading = true;
|
|
||||||
|
|
||||||
// var path =
|
|
||||||
// "/search/$cartons_collection/${searchPara.escapeTerm}/$rowPerPage/$offset/${searchPara.escapeFilters}";
|
|
||||||
|
|
||||||
// var result = await requestAPI(path, "GET",
|
|
||||||
// token: await getToken(), url: Config.instance.searchURL);
|
|
||||||
|
|
||||||
// if (result != null) {
|
|
||||||
// for (var row in result) {
|
|
||||||
// var item = ArtistExt.fromMapForSearch(row);
|
|
||||||
// list.add(item);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// for (var p in list) {
|
|
||||||
// selectedArtistList.contains(p)
|
|
||||||
// ? p.isSelected = true
|
|
||||||
// : p.isSelected = false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// artists.addAll(list);
|
|
||||||
// offset += rowPerPage;
|
|
||||||
// if (list.length < rowPerPage) {
|
|
||||||
// reachEnd = true;
|
|
||||||
// }
|
|
||||||
notifyListeners();
|
|
||||||
}
|
|
||||||
|
|
||||||
addDefaultCartons(String shipmentId) async {
|
|
||||||
cartons.clear();
|
|
||||||
await _refresh(shipmentId);
|
|
||||||
}
|
|
||||||
|
|
||||||
selectCarton(Carton a) {
|
|
||||||
if (a.isSelected) {
|
|
||||||
selectedCartonList.add(a);
|
|
||||||
} else {
|
|
||||||
selectedCartonList.remove(a);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> _refresh(String shipmentId) async {
|
|
||||||
cartons.clear();
|
cartons.clear();
|
||||||
_lastDocument = null;
|
_lastDocument = null;
|
||||||
ended = false;
|
ended = false;
|
||||||
await loadMoreData(shipmentId);
|
await loadMoreData(shipmentId, term: term);
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> loadMoreData(String shipmentId) async {
|
Future<void> loadMoreData(String shipmentId, {String term = ""}) async {
|
||||||
int rowPerPage = 20;
|
int rowPerPage = 20;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -104,9 +48,13 @@ class CartonSelectionModel extends BaseModel {
|
|||||||
.collection(path)
|
.collection(path)
|
||||||
// .where("fcs_shipment_id", isEqualTo: shipmentId)
|
// .where("fcs_shipment_id", isEqualTo: shipmentId)
|
||||||
// .where("status", isEqualTo: carton_processing_status)
|
// .where("status", isEqualTo: carton_processing_status)
|
||||||
// .where("carton_type", isEqualTo: carton_mix_box)
|
.where("is_deleted", isEqualTo: false);
|
||||||
.where("is_deleted", isEqualTo: false)
|
|
||||||
.orderBy("created_at", descending: true);
|
if (term != "") {
|
||||||
|
query = query.where("carton_number", isEqualTo: term);
|
||||||
|
}
|
||||||
|
|
||||||
|
query = query.orderBy("created_at", descending: true);
|
||||||
|
|
||||||
if (_lastDocument != null) {
|
if (_lastDocument != null) {
|
||||||
query = query.startAfterDocument(_lastDocument!);
|
query = query.startAfterDocument(_lastDocument!);
|
||||||
@@ -124,7 +72,7 @@ class CartonSelectionModel extends BaseModel {
|
|||||||
}).toList();
|
}).toList();
|
||||||
|
|
||||||
for (var p in list) {
|
for (var p in list) {
|
||||||
selectedCartonList.contains(p)
|
selectedCartons.contains(p)
|
||||||
? p.isSelected = true
|
? p.isSelected = true
|
||||||
: p.isSelected = false;
|
: p.isSelected = false;
|
||||||
}
|
}
|
||||||
@@ -139,13 +87,21 @@ class CartonSelectionModel extends BaseModel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
selectCarton(Carton a) {
|
||||||
|
if (a.isSelected) {
|
||||||
|
selectedCartons.add(a);
|
||||||
|
} else {
|
||||||
|
selectedCartons.remove(a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
clearSelection() {
|
clearSelection() {
|
||||||
selectedCartonList.clear();
|
selectedCartons.clear();
|
||||||
cartons.clear();
|
cartons.clear();
|
||||||
query = "";
|
query = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
addSelectedCarton(List<Carton> list) {
|
addSelectedCarton(List<Carton> list) {
|
||||||
selectedCartonList = list;
|
selectedCartons = list;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,20 +9,14 @@ import '../../main/model/base_model.dart';
|
|||||||
|
|
||||||
class PackageSelectionModel extends BaseModel {
|
class PackageSelectionModel extends BaseModel {
|
||||||
final log = Logger("PackageSelectionModel");
|
final log = Logger("PackageSelectionModel");
|
||||||
// for search
|
|
||||||
String query = "";
|
String query = "";
|
||||||
int offset = 0;
|
|
||||||
bool reachEnd = false;
|
|
||||||
List<Package> packages = [];
|
List<Package> packages = [];
|
||||||
|
List<Package> selectedPackages = [];
|
||||||
|
|
||||||
bool isLoading = false;
|
bool isLoading = false;
|
||||||
|
|
||||||
// for default package
|
|
||||||
DocumentSnapshot? _lastDocument;
|
DocumentSnapshot? _lastDocument;
|
||||||
bool ended = false;
|
bool ended = false;
|
||||||
|
|
||||||
List<Package> selectedPackageList = [];
|
|
||||||
|
|
||||||
Timer? t;
|
Timer? t;
|
||||||
search(String term,
|
search(String term,
|
||||||
{bool imm = false,
|
{bool imm = false,
|
||||||
@@ -31,11 +25,11 @@ class PackageSelectionModel extends BaseModel {
|
|||||||
required String consigneeId}) async {
|
required String consigneeId}) async {
|
||||||
query = term;
|
query = term;
|
||||||
packages.clear();
|
packages.clear();
|
||||||
offset = 0;
|
_lastDocument = null;
|
||||||
reachEnd = false;
|
ended = false;
|
||||||
t?.cancel();
|
t?.cancel();
|
||||||
t = Timer(Duration(milliseconds: imm ? 0 : 800), () async {
|
t = Timer(Duration(milliseconds: imm ? 0 : 800), () async {
|
||||||
await loadMoreSearch(
|
await refresh(
|
||||||
term: term,
|
term: term,
|
||||||
shipmentId: shipmentId,
|
shipmentId: shipmentId,
|
||||||
consigneeId: consigneeId,
|
consigneeId: consigneeId,
|
||||||
@@ -43,85 +37,27 @@ class PackageSelectionModel extends BaseModel {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> loadMoreSearch(
|
Future<void> refresh(
|
||||||
{required String term,
|
|
||||||
required String shipmentId,
|
|
||||||
required String senderId,
|
|
||||||
required String consigneeId}) async {
|
|
||||||
if (term == "") {
|
|
||||||
await _refresh(
|
|
||||||
shipmentId: shipmentId, senderId: senderId, consigneeId: consigneeId);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// int rowPerPage = 21;
|
|
||||||
// List<Carton> list = [];
|
|
||||||
// SearchPara searchPara = SearchPara(filters: [], term: term);
|
|
||||||
// isLoading = true;
|
|
||||||
|
|
||||||
// var path =
|
|
||||||
// "/search/$cartons_collection/${searchPara.escapeTerm}/$rowPerPage/$offset/${searchPara.escapeFilters}";
|
|
||||||
|
|
||||||
// var result = await requestAPI(path, "GET",
|
|
||||||
// token: await getToken(), url: Config.instance.searchURL);
|
|
||||||
|
|
||||||
// if (result != null) {
|
|
||||||
// for (var row in result) {
|
|
||||||
// var item = ArtistExt.fromMapForSearch(row);
|
|
||||||
// list.add(item);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// for (var p in list) {
|
|
||||||
// selectedArtistList.contains(p)
|
|
||||||
// ? p.isSelected = true
|
|
||||||
// : p.isSelected = false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// artists.addAll(list);
|
|
||||||
// offset += rowPerPage;
|
|
||||||
// if (list.length < rowPerPage) {
|
|
||||||
// reachEnd = true;
|
|
||||||
// }
|
|
||||||
notifyListeners();
|
|
||||||
}
|
|
||||||
|
|
||||||
addDefaultPackages(
|
|
||||||
{required String shipmentId,
|
{required String shipmentId,
|
||||||
required String senderId,
|
required String senderId,
|
||||||
required String consigneeId}) async {
|
required String consigneeId,
|
||||||
packages.clear();
|
String term = ""}) async {
|
||||||
await _refresh(
|
|
||||||
shipmentId: shipmentId, senderId: senderId, consigneeId: consigneeId);
|
|
||||||
}
|
|
||||||
|
|
||||||
selectPackage(Package a) {
|
|
||||||
if (a.isChecked) {
|
|
||||||
selectedPackageList.add(a);
|
|
||||||
} else {
|
|
||||||
selectedPackageList.remove(a);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
addSelectedPackage(List<Package> list){
|
|
||||||
selectedPackageList = list;
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> _refresh(
|
|
||||||
{required String shipmentId,
|
|
||||||
required String senderId,
|
|
||||||
required String consigneeId}) async {
|
|
||||||
packages.clear();
|
packages.clear();
|
||||||
_lastDocument = null;
|
_lastDocument = null;
|
||||||
ended = false;
|
ended = false;
|
||||||
await loadMoreData(
|
await loadMoreData(
|
||||||
shipmentId: shipmentId, senderId: senderId, consigneeId: consigneeId);
|
shipmentId: shipmentId,
|
||||||
|
senderId: senderId,
|
||||||
|
consigneeId: consigneeId,
|
||||||
|
term: term);
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> loadMoreData(
|
Future<void> loadMoreData(
|
||||||
{required String shipmentId,
|
{required String shipmentId,
|
||||||
required String senderId,
|
required String senderId,
|
||||||
required String consigneeId}) async {
|
required String consigneeId,
|
||||||
|
String term = ""}) async {
|
||||||
int rowPerPage = 20;
|
int rowPerPage = 20;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -131,9 +67,15 @@ class PackageSelectionModel extends BaseModel {
|
|||||||
.collection(path)
|
.collection(path)
|
||||||
// .where("fcs_shipment_id", isEqualTo: shipmentId)
|
// .where("fcs_shipment_id", isEqualTo: shipmentId)
|
||||||
// .where("status", isEqualTo: package_processed_status)
|
// .where("status", isEqualTo: package_processed_status)
|
||||||
.where("user_id", whereIn: [senderId, consigneeId])
|
.where("sender_id", isEqualTo: senderId)
|
||||||
.where("is_deleted", isEqualTo: false)
|
.where("user_id", isEqualTo: consigneeId)
|
||||||
.orderBy("created_date", descending: true);
|
.where("is_deleted", isEqualTo: false);
|
||||||
|
|
||||||
|
if (term != "") {
|
||||||
|
query = query.where("tracking_id", isEqualTo: term);
|
||||||
|
}
|
||||||
|
|
||||||
|
query = query.orderBy("created_date", descending: true);
|
||||||
|
|
||||||
if (_lastDocument != null) {
|
if (_lastDocument != null) {
|
||||||
query = query.startAfterDocument(_lastDocument!);
|
query = query.startAfterDocument(_lastDocument!);
|
||||||
@@ -151,9 +93,7 @@ class PackageSelectionModel extends BaseModel {
|
|||||||
}).toList();
|
}).toList();
|
||||||
|
|
||||||
for (var p in list) {
|
for (var p in list) {
|
||||||
selectedPackageList.contains(p)
|
selectedPackages.contains(p) ? p.isChecked = true : p.isChecked = false;
|
||||||
? p.isChecked = true
|
|
||||||
: p.isChecked = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
packages.addAll(list);
|
packages.addAll(list);
|
||||||
@@ -166,9 +106,43 @@ class PackageSelectionModel extends BaseModel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
selectPackage(Package a) {
|
||||||
|
if (a.isChecked) {
|
||||||
|
selectedPackages.add(a);
|
||||||
|
} else {
|
||||||
|
selectedPackages.remove(a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
addSelectedPackage(List<Package> list) {
|
||||||
|
selectedPackages = list;
|
||||||
|
}
|
||||||
|
|
||||||
clearSelection() {
|
clearSelection() {
|
||||||
selectedPackageList.clear();
|
selectedPackages.clear();
|
||||||
packages.clear();
|
packages.clear();
|
||||||
query = "";
|
query = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<List<Package>> getPackagesBySenderAndConsigneeId(
|
||||||
|
{required String senderId, required String consigneeId}) async {
|
||||||
|
List<Package> list = [];
|
||||||
|
try {
|
||||||
|
String path = "/$packages_collection";
|
||||||
|
var snaps = await FirebaseFirestore.instance
|
||||||
|
.collection(path)
|
||||||
|
.where("sender_id", isEqualTo: senderId)
|
||||||
|
.where("user_id", isEqualTo: consigneeId)
|
||||||
|
.where("is_deleted", isEqualTo: false)
|
||||||
|
.get(const GetOptions(source: Source.server));
|
||||||
|
list = snaps.docs
|
||||||
|
.map((documentSnapshot) =>
|
||||||
|
Package.fromMap(documentSnapshot.data(), documentSnapshot.id))
|
||||||
|
.toList();
|
||||||
|
} catch (e) {
|
||||||
|
log.warning("Error!! $e");
|
||||||
|
list = [];
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,36 +43,32 @@ class SenderSelectionModel extends BaseModel {
|
|||||||
await _refresh();
|
await _refresh();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// int rowPerPage = 21;
|
|
||||||
// List<Carton> list = [];
|
|
||||||
// SearchPara searchPara = SearchPara(filters: [], term: term);
|
|
||||||
// isLoading = true;
|
|
||||||
|
|
||||||
// var path =
|
// var bytes = utf8.encode(term);
|
||||||
// "/search/$cartons_collection/${searchPara.escapeTerm}/$rowPerPage/$offset/${searchPara.escapeFilters}";
|
// var base64Str = base64.encode(bytes);
|
||||||
|
// HtmlEscape htmlEscape = const HtmlEscape();
|
||||||
|
// String escapeSender = htmlEscape.convert(base64Str);
|
||||||
|
|
||||||
// var result = await requestAPI(path, "GET",
|
// int rowPerPage = 20;
|
||||||
// token: await getToken(), url: Config.instance.searchURL);
|
// List<User> list = [];
|
||||||
|
|
||||||
|
// var result = await requestAPI(
|
||||||
|
// "/api/fts/$user_collection/$escapeSender/$rowPerPage", "GET",
|
||||||
|
// url: Config.instance.reportURL, token: await getToken());
|
||||||
|
|
||||||
// if (result != null) {
|
// if (result != null) {
|
||||||
// for (var row in result) {
|
// for (var row in result) {
|
||||||
// var item = ArtistExt.fromMapForSearch(row);
|
// var item = User.fromJson(row);
|
||||||
// list.add(item);
|
// list.add(item);
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// for (var p in list) {
|
// _senders.addAll(list);
|
||||||
// selectedArtistList.contains(p)
|
|
||||||
// ? p.isSelected = true
|
|
||||||
// : p.isSelected = false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// artists.addAll(list);
|
|
||||||
// offset += rowPerPage;
|
// offset += rowPerPage;
|
||||||
// if (list.length < rowPerPage) {
|
// if (list.length < rowPerPage) {
|
||||||
// reachEnd = true;
|
// reachEnd = true;
|
||||||
// }
|
// }
|
||||||
notifyListeners();
|
// notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
addDefaultSenders() async {
|
addDefaultSenders() async {
|
||||||
|
|||||||
@@ -62,16 +62,17 @@ class _PackageSelectionWidgetState extends State<PackageSelectionWidget> {
|
|||||||
|
|
||||||
_init() {
|
_init() {
|
||||||
var searchModel = context.read<PackageSelectionModel>();
|
var searchModel = context.read<PackageSelectionModel>();
|
||||||
|
|
||||||
searchModel.addDefaultPackages(
|
|
||||||
shipmentId: widget.shipment.id!,
|
|
||||||
consigneeId: widget.consignee.id!,
|
|
||||||
senderId: widget.sender.id!);
|
|
||||||
|
|
||||||
searchModel.addSelectedPackage(widget.packages);
|
|
||||||
_controller.text = searchModel.query;
|
_controller.text = searchModel.query;
|
||||||
_query = searchModel.query;
|
_query = searchModel.query;
|
||||||
|
|
||||||
|
searchModel.refresh(
|
||||||
|
shipmentId: widget.shipment.id!,
|
||||||
|
consigneeId: widget.consignee.id!,
|
||||||
|
senderId: widget.sender.id!,
|
||||||
|
term: _query);
|
||||||
|
|
||||||
|
searchModel.addSelectedPackage(widget.packages);
|
||||||
|
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
setState(() {});
|
setState(() {});
|
||||||
}
|
}
|
||||||
@@ -86,22 +87,16 @@ class _PackageSelectionWidgetState extends State<PackageSelectionWidget> {
|
|||||||
Future<void> _loadMoreData() async {
|
Future<void> _loadMoreData() async {
|
||||||
if (_isLoadMore) return;
|
if (_isLoadMore) return;
|
||||||
var model = context.read<PackageSelectionModel>();
|
var model = context.read<PackageSelectionModel>();
|
||||||
if (model.reachEnd || model.ended) return;
|
if (model.ended) return;
|
||||||
setState(() {
|
setState(() {
|
||||||
_isLoadMore = true;
|
_isLoadMore = true;
|
||||||
});
|
});
|
||||||
if (_query != "") {
|
|
||||||
await model.loadMoreSearch(
|
await model.loadMoreData(
|
||||||
term: _query,
|
shipmentId: widget.shipment.id!,
|
||||||
shipmentId: widget.shipment.id!,
|
consigneeId: widget.consignee.id!,
|
||||||
consigneeId: widget.consignee.id!,
|
senderId: widget.sender.id!,
|
||||||
senderId: widget.sender.id!);
|
term: _query);
|
||||||
} else {
|
|
||||||
await model.loadMoreData(
|
|
||||||
shipmentId: widget.shipment.id!,
|
|
||||||
consigneeId: widget.consignee.id!,
|
|
||||||
senderId: widget.sender.id!);
|
|
||||||
}
|
|
||||||
|
|
||||||
setState(() {
|
setState(() {
|
||||||
_isLoadMore = false;
|
_isLoadMore = false;
|
||||||
@@ -112,7 +107,7 @@ class _PackageSelectionWidgetState extends State<PackageSelectionWidget> {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
var model = context.watch<PackageSelectionModel>();
|
var model = context.watch<PackageSelectionModel>();
|
||||||
List<Package> searchResults = model.packages;
|
List<Package> searchResults = model.packages;
|
||||||
List<Package> selectedPackageList = model.selectedPackageList;
|
List<Package> selectedPackageList = model.selectedPackages;
|
||||||
|
|
||||||
final senderBox = DisplayText(
|
final senderBox = DisplayText(
|
||||||
text: widget.sender.name,
|
text: widget.sender.name,
|
||||||
@@ -278,7 +273,7 @@ class _PackageSelectionWidgetState extends State<PackageSelectionWidget> {
|
|||||||
isLoadingMore: _isLoadMore,
|
isLoadingMore: _isLoadMore,
|
||||||
onLoadMore: _loadMoreData,
|
onLoadMore: _loadMoreData,
|
||||||
onRefresh: () async {
|
onRefresh: () async {
|
||||||
_search();
|
_init();
|
||||||
setState(() {
|
setState(() {
|
||||||
_down = true;
|
_down = true;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ class _CartonSizeListState extends State<CartonSizeList> {
|
|||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(top: 8.0),
|
padding: const EdgeInsets.only(top: 8.0),
|
||||||
child: new Text(
|
child: new Text(
|
||||||
"(L${p.length}xW${p.width}xH${p.height})",
|
"(L${p.length.toInt()}xW${p.width.toInt()}xH${p.height.toInt()})",
|
||||||
style: new TextStyle(color: Colors.grey),
|
style: new TextStyle(color: Colors.grey),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ class _DeliveryAddressEditorState extends State<DeliveryAddressEditor> {
|
|||||||
|
|
||||||
bool _isLoading = false;
|
bool _isLoading = false;
|
||||||
bool _isNew = true;
|
bool _isNew = true;
|
||||||
|
final _deliveryFormKey=GlobalKey<FormState>();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@@ -60,12 +61,26 @@ class _DeliveryAddressEditorState extends State<DeliveryAddressEditor> {
|
|||||||
final fullName = InputText(
|
final fullName = InputText(
|
||||||
labelTextKey: 'delivery_address.full_name',
|
labelTextKey: 'delivery_address.full_name',
|
||||||
iconData: MaterialCommunityIcons.account_arrow_left,
|
iconData: MaterialCommunityIcons.account_arrow_left,
|
||||||
controller: _nameController);
|
controller: _nameController,
|
||||||
|
autovalidateMode: AutovalidateMode.onUserInteraction,
|
||||||
|
validator: (value) {
|
||||||
|
if(value==null || value.isEmpty){
|
||||||
|
return"Please enter full name";
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
|
||||||
final addressLine1 = InputText(
|
final addressLine1 = InputText(
|
||||||
labelTextKey: 'delivery_address.address_line1',
|
labelTextKey: 'delivery_address.address_line1',
|
||||||
iconData: Icons.location_on,
|
iconData: Icons.location_on,
|
||||||
controller: _address1Controller);
|
controller: _address1Controller,
|
||||||
|
autovalidateMode: AutovalidateMode.onUserInteraction,
|
||||||
|
validator: (value) {
|
||||||
|
if(value==null || value.isEmpty){
|
||||||
|
return"Please enter address";
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
|
||||||
final addressLine2 = InputText(
|
final addressLine2 = InputText(
|
||||||
labelTextKey: 'delivery_address.address_line2',
|
labelTextKey: 'delivery_address.address_line2',
|
||||||
@@ -75,18 +90,39 @@ class _DeliveryAddressEditorState extends State<DeliveryAddressEditor> {
|
|||||||
final cityBox = InputText(
|
final cityBox = InputText(
|
||||||
labelTextKey: 'delivery_address.city',
|
labelTextKey: 'delivery_address.city',
|
||||||
iconData: Icons.location_city,
|
iconData: Icons.location_city,
|
||||||
controller: _cityController);
|
controller: _cityController,
|
||||||
|
autovalidateMode: AutovalidateMode.onUserInteraction,
|
||||||
|
validator: (value) {
|
||||||
|
if(value==null || value.isEmpty){
|
||||||
|
return"Please enter city";
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
|
||||||
final regionBox = InputText(
|
final regionBox = InputText(
|
||||||
labelTextKey: 'delivery_address.state_region',
|
labelTextKey: 'delivery_address.state_region',
|
||||||
iconData: Entypo.location,
|
iconData: Entypo.location,
|
||||||
controller: _stateController);
|
controller: _stateController,
|
||||||
|
autovalidateMode: AutovalidateMode.onUserInteraction,
|
||||||
|
validator: (value) {
|
||||||
|
if(value==null || value.isEmpty){
|
||||||
|
return"Please enter state/region";
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
|
||||||
final phoneNumberBox = InputText(
|
final phoneNumberBox = InputText(
|
||||||
labelTextKey: 'delivery_address.phonenumber',
|
labelTextKey: 'delivery_address.phonenumber',
|
||||||
iconData: Icons.phone,
|
iconData: Icons.phone,
|
||||||
textInputType: TextInputType.phone,
|
textInputType: TextInputType.phone,
|
||||||
controller: _phoneController);
|
controller: _phoneController,
|
||||||
|
autovalidateMode: AutovalidateMode.onUserInteraction,
|
||||||
|
validator: (value) {
|
||||||
|
if(value==null || value.isEmpty){
|
||||||
|
return"Please enter phone number";
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
|
||||||
final createBtn = fcsButton(
|
final createBtn = fcsButton(
|
||||||
context,
|
context,
|
||||||
@@ -128,24 +164,27 @@ class _DeliveryAddressEditorState extends State<DeliveryAddressEditor> {
|
|||||||
onPressed: _delete)
|
onPressed: _delete)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
body: Padding(
|
body: Form(
|
||||||
padding: const EdgeInsets.only(left: 10.0, right: 10),
|
key: _deliveryFormKey,
|
||||||
child: ListView(children: <Widget>[
|
child: Padding(
|
||||||
fullName,
|
padding: const EdgeInsets.only(left: 10.0, right: 10),
|
||||||
SizedBox(height: 5),
|
child: ListView(children: <Widget>[
|
||||||
phoneNumberBox,
|
fullName,
|
||||||
SizedBox(height: 10),
|
SizedBox(height: 5),
|
||||||
addressLine1,
|
phoneNumberBox,
|
||||||
SizedBox(height: 5),
|
SizedBox(height: 10),
|
||||||
addressLine2,
|
addressLine1,
|
||||||
SizedBox(height: 5),
|
SizedBox(height: 5),
|
||||||
cityBox,
|
addressLine2,
|
||||||
SizedBox(height: 5),
|
SizedBox(height: 5),
|
||||||
regionBox,
|
cityBox,
|
||||||
SizedBox(height: 5),
|
SizedBox(height: 5),
|
||||||
_isNew ? createBtn : updateBtn,
|
regionBox,
|
||||||
SizedBox(height: 10)
|
SizedBox(height: 5),
|
||||||
]),
|
_isNew ? createBtn : updateBtn,
|
||||||
|
SizedBox(height: 10)
|
||||||
|
]),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@@ -168,23 +207,26 @@ class _DeliveryAddressEditorState extends State<DeliveryAddressEditor> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<bool> _validate(DeliveryAddress deliveryAddress) async {
|
Future<bool> _validate(DeliveryAddress deliveryAddress) async {
|
||||||
if (deliveryAddress.addressLine1 == "") {
|
if(_deliveryFormKey.currentState!.validate()){
|
||||||
await showMsgDialog(context, "Error", "Invalid address line 1!");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
// if (deliveryAddress.addressLine1 == "") {
|
||||||
|
// await showMsgDialog(context, "Error", "Invalid address line 1!");
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
|
||||||
if (deliveryAddress.city == null) {
|
// if (deliveryAddress.city == null) {
|
||||||
await showMsgDialog(context, "Error", "Invalid city!");
|
// await showMsgDialog(context, "Error", "Invalid city!");
|
||||||
return false;
|
// return false;
|
||||||
}
|
// }
|
||||||
if (deliveryAddress.state == null) {
|
// if (deliveryAddress.state == null) {
|
||||||
await showMsgDialog(context, "Error", "Invalid state!");
|
// await showMsgDialog(context, "Error", "Invalid state!");
|
||||||
return false;
|
// return false;
|
||||||
}
|
// }
|
||||||
if (deliveryAddress.phoneNumber == null) {
|
// if (deliveryAddress.phoneNumber == null) {
|
||||||
await showMsgDialog(context, "Error", "Invalid phone number!");
|
// await showMsgDialog(context, "Error", "Invalid phone number!");
|
||||||
return false;
|
// return false;
|
||||||
}
|
// }
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -194,6 +236,7 @@ class _DeliveryAddressEditorState extends State<DeliveryAddressEditor> {
|
|||||||
if (!valid) {
|
if (!valid) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (widget.user != null) {
|
if (widget.user != null) {
|
||||||
deliveryAddress.userID = widget.user!.id;
|
deliveryAddress.userID = widget.user!.id;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user