v2.0.9 changes, new UI for home products, pubspec.yaml update, latest Flutter version support
This commit is contained in:
parent
8deaf17524
commit
79ba52f515
@ -1,3 +1,11 @@
|
||||
## [2.0.9] - 2020-06-19
|
||||
|
||||
* New UI for home products
|
||||
* Added pull to refresh to user orders
|
||||
* Pubspec.yaml updates
|
||||
* Flutter v1.17.3 support
|
||||
* Bug fixes
|
||||
|
||||
## [2.0.8] - 2020-06-04
|
||||
|
||||
* Added pull to refresh
|
||||
|
||||
1
LabelStoreMax/ios/Flutter/.last_build_id
Normal file
1
LabelStoreMax/ios/Flutter/.last_build_id
Normal file
@ -0,0 +1 @@
|
||||
b98ea22bbb9eb082f24a2f56c80c348a
|
||||
@ -169,6 +169,7 @@
|
||||
TargetAttributes = {
|
||||
97C146ED1CF9000F007C117D = {
|
||||
CreatedOnToolsVersion = 7.3.1;
|
||||
DevelopmentTeam = YPEM49WRL2;
|
||||
LastSwiftMigration = 0910;
|
||||
};
|
||||
};
|
||||
@ -337,7 +338,6 @@
|
||||
/* Begin XCBuildConfiguration section */
|
||||
249021D3217E4FDB00AE95B9 /* Profile */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
@ -392,7 +392,7 @@
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||
DEVELOPMENT_TEAM = "";
|
||||
DEVELOPMENT_TEAM = YPEM49WRL2;
|
||||
ENABLE_BITCODE = NO;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
@ -416,7 +416,6 @@
|
||||
};
|
||||
97C147031CF9000F007C117D /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
@ -472,7 +471,6 @@
|
||||
};
|
||||
97C147041CF9000F007C117D /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
@ -528,7 +526,7 @@
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||
DEVELOPMENT_TEAM = "";
|
||||
DEVELOPMENT_TEAM = YPEM49WRL2;
|
||||
ENABLE_BITCODE = NO;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
@ -558,7 +556,7 @@
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||
DEVELOPMENT_TEAM = "";
|
||||
DEVELOPMENT_TEAM = YPEM49WRL2;
|
||||
ENABLE_BITCODE = NO;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
|
||||
@ -159,5 +159,15 @@
|
||||
"Billing address is incomplete": "Die Rechnungsadresse ist unvollständig",
|
||||
"Order": "Auftrag",
|
||||
"Date Ordered": "Bestelldatum",
|
||||
"Ships to": "Schiffe nach"
|
||||
"Ships to": "Schiffe nach",
|
||||
"That email does not match our records": "Diese E-Mail stimmt nicht mit unseren Aufzeichnungen überein",
|
||||
"That username does not match our records": "Dieser Benutzername stimmt nicht mit unseren Datensätzen überein",
|
||||
"That password does not match our records": "Dieses Passwort stimmt nicht mit unseren Aufzeichnungen überein",
|
||||
"The email and password field cannot be empty": "Das Feld für E-Mail und Passwort darf nicht leer sein",
|
||||
"Username taken, try another.": "Benutzername genommen, versuchen Sie es mit einem anderen.",
|
||||
"A user already exists": "Ein Benutzer existiert bereits",
|
||||
"That email is taken, try another": "Diese E-Mail wird genommen, versuchen Sie es mit einer anderen",
|
||||
"The email field is empty": "Das E-Mail-Feld ist leer",
|
||||
"No more orders": "Keine Bestellungen mehr",
|
||||
"Account updated": "Konto aktualisiert"
|
||||
}
|
||||
@ -159,5 +159,15 @@
|
||||
"Billing address is incomplete": "Billing address is incomplete",
|
||||
"Order": "Order",
|
||||
"Date Ordered": "Date Ordered",
|
||||
"Ships to": "Ships to"
|
||||
"Ships to": "Ships to",
|
||||
"That email does not match our records": "That email does not match our records",
|
||||
"That username does not match our records": "That username does not match our records",
|
||||
"That password does not match our records": "That password does not match our records",
|
||||
"The email and password field cannot be empty": "The email and password field cannot be empty",
|
||||
"Username taken, try another.": "That username is taken, try another.",
|
||||
"A user already exists": "A user already exists",
|
||||
"That email is taken, try another": "That email is taken, try another",
|
||||
"The email field is empty": "The email field is empty",
|
||||
"No more orders": "No more orders",
|
||||
"Account updated": "Account updated"
|
||||
}
|
||||
@ -159,5 +159,15 @@
|
||||
"Billing address is incomplete": "La dirección de facturación está incompleta",
|
||||
"Order": "Orden",
|
||||
"Date Ordered": "fecha del pedido",
|
||||
"Ships to": "Realiza envíos a"
|
||||
"Ships to": "Realiza envíos a",
|
||||
"That email does not match our records": "Ese correo electrónico no coincide con nuestros registros.",
|
||||
"That username does not match our records": "Ese nombre de usuario no coincide con nuestros registros.",
|
||||
"That password does not match our records": "Esa contraseña no coincide con nuestros registros.",
|
||||
"The email and password field cannot be empty": "El campo de correo electrónico y contraseña no puede estar vacío",
|
||||
"Username taken, try another.": "Nombre de usuario tomado, intente con otro..",
|
||||
"A user already exists": "Ya existe un usuario",
|
||||
"That email is taken, try another": "Ese correo electrónico está tomado, prueba con otro",
|
||||
"The email field is empty": "El campo de correo electrónico está vacío.",
|
||||
"No more orders": "No mas pedidos",
|
||||
"Account updated": "Cuenta actualizada"
|
||||
}
|
||||
@ -159,5 +159,15 @@
|
||||
"Billing address is incomplete": "L'adresse de facturation est incomplète",
|
||||
"Order": "Ordre",
|
||||
"Date Ordered": "Date de commande",
|
||||
"Ships to": "Expédié à"
|
||||
"Ships to": "Expédié à",
|
||||
"That email does not match our records": "Cet e-mail ne correspond pas à nos enregistrements",
|
||||
"That username does not match our records": "Ce nom d'utilisateur ne correspond pas à nos enregistrements",
|
||||
"That password does not match our records": "Ce mot de passe ne correspond pas à nos enregistrements",
|
||||
"The email and password field cannot be empty": "Le champ e-mail et mot de passe ne peut pas être vide",
|
||||
"Username taken, try another.": "Ce nom d'utilisateur est pris, essayez-en un autre.",
|
||||
"A user already exists": "Un utilisateur existe déjà",
|
||||
"That email is taken, try another": "Cet e-mail est pris, essayez un autre",
|
||||
"The email field is empty": "Le champ e-mail est vide",
|
||||
"No more orders": "Plus de commandes",
|
||||
"Account updated": "Compte mis à jour"
|
||||
}
|
||||
@ -159,5 +159,15 @@
|
||||
"Billing address is incomplete": "biling pata adhoora hai",
|
||||
"Order": "gan",
|
||||
"Date Ordered": "ordar ka dinaank",
|
||||
"Ships to": "ko bheje"
|
||||
"Ships to": "ko bheje",
|
||||
"That email does not match our records": "vah eemel hamaare rikord se mel nahin khaata hai",
|
||||
"That username does not match our records": "vah upayogakarta naam hamaare rikord se mel nahin khaata hai",
|
||||
"That password does not match our records": "vah paasavard hamaare rikord se mel nahin khaata hai",
|
||||
"The email and password field cannot be empty": "eemel aur paasavard feeld khaalee nahin ho sakata",
|
||||
"Username taken, try another.": "vah upayogakarta naam liya gaya hai, doosara prayaas karen.",
|
||||
"A user already exists": "ek upayogakarta pahale se maujood hai",
|
||||
"That email is taken, try another": "vah eemel liya gaya hai, doosara prayaas karen",
|
||||
"The email field is empty": "eemel feeld khaalee hai",
|
||||
"No more orders": "aur koee aadesh nahin",
|
||||
"Account updated": "khaata apadet kiya gaya"
|
||||
}
|
||||
@ -159,5 +159,15 @@
|
||||
"Billing address is incomplete": "L'indirizzo di fatturazione è incompleto",
|
||||
"Order": "Ordine",
|
||||
"Date Ordered": "Data ordinata",
|
||||
"Ships to": "Spedire a"
|
||||
"Ships to": "Spedire a",
|
||||
"That email does not match our records": "Quell'email non corrisponde ai nostri record",
|
||||
"That username does not match our records": "Quel nome utente non corrisponde ai nostri record",
|
||||
"That password does not match our records": "Quella password non corrisponde ai nostri record",
|
||||
"The email and password field cannot be empty": "Il campo e-mail e password non possono essere vuoti",
|
||||
"Username taken, try another.": "Quel nome utente è preso, provane un altro.",
|
||||
"A user already exists": "Un utente esiste già",
|
||||
"That email is taken, try another": "Quell'e-mail è stata presa, provane un'altra",
|
||||
"The email field is empty": "Il campo email è vuoto",
|
||||
"No more orders": "Niente più ordini",
|
||||
"Account updated": "Account aggiornato"
|
||||
}
|
||||
@ -159,5 +159,15 @@
|
||||
"Billing address is incomplete": "O endereço de cobrança está incompleto",
|
||||
"Order": "Ordem",
|
||||
"Date Ordered": "Data da Encomenda",
|
||||
"Ships to": "Envia para"
|
||||
"Ships to": "Envia para",
|
||||
"That email does not match our records": "Esse email não corresponde aos nossos registros",
|
||||
"That username does not match our records": "Esse nome de usuário não corresponde aos nossos registros",
|
||||
"That password does not match our records": "Essa senha não corresponde aos nossos registros",
|
||||
"The email and password field cannot be empty": "O campo de email e senha não pode estar vazio",
|
||||
"Username taken, try another.": "Esse nome de usuário é usado, tente outro.",
|
||||
"A user already exists": "Um usuário já existe",
|
||||
"That email is taken, try another": "Esse e-mail foi recebido, tente outro",
|
||||
"The email field is empty": "O campo de email está vazio",
|
||||
"No more orders": "Não há mais pedidos",
|
||||
"Account updated": "Conta atualizada"
|
||||
}
|
||||
@ -8,6 +8,8 @@
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
|
||||
import 'dart:developer';
|
||||
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:label_storemax/app_payment_methods.dart';
|
||||
@ -471,6 +473,8 @@ String capitalize(String s) => s[0].toUpperCase() + s.substring(1);
|
||||
|
||||
double parseWcPrice(String price) => (double.tryParse(price) ?? 0);
|
||||
|
||||
void appLogOutput(dynamic message) => (app_debug == true ? log(message) : null);
|
||||
|
||||
Widget refreshableScroll(context,
|
||||
{@required refreshController,
|
||||
@required VoidCallback onRefresh,
|
||||
@ -507,7 +511,6 @@ Widget refreshableScroll(context,
|
||||
child: (products.length != null && products.length > 0
|
||||
? GridView.count(
|
||||
crossAxisCount: 2,
|
||||
childAspectRatio: calAspectRatio(context),
|
||||
shrinkWrap: true,
|
||||
children: List.generate(
|
||||
products.length,
|
||||
@ -521,11 +524,11 @@ Widget refreshableScroll(context,
|
||||
double calAspectRatio(BuildContext context) {
|
||||
if (MediaQuery.of(context).size.height > 800) {
|
||||
return MediaQuery.of(context).size.width /
|
||||
(MediaQuery.of(context).size.height / 1.75);
|
||||
(MediaQuery.of(context).size.height / 1.65);
|
||||
}
|
||||
if (MediaQuery.of(context).size.height > 700) {
|
||||
return MediaQuery.of(context).size.width /
|
||||
(MediaQuery.of(context).size.height / 1.5);
|
||||
(MediaQuery.of(context).size.height / 1.35);
|
||||
}
|
||||
return MediaQuery.of(context).size.width /
|
||||
(MediaQuery.of(context).size.height / 1.3);
|
||||
|
||||
@ -16,7 +16,7 @@ import 'dart:ui';
|
||||
Developer Notes
|
||||
|
||||
SUPPORT EMAIL - support@woosignal.com
|
||||
VERSION - 2.0.8
|
||||
VERSION - 2.0.9
|
||||
https://woosignal.com
|
||||
*/
|
||||
|
||||
|
||||
@ -15,8 +15,8 @@ import 'package:label_storemax/helpers/tools.dart';
|
||||
import 'package:label_storemax/widgets/app_loader.dart';
|
||||
import 'package:label_storemax/widgets/buttons.dart';
|
||||
import 'package:label_storemax/widgets/woosignal_ui.dart';
|
||||
import 'package:wp_json_api/models/responses/WCCustomerInfoResponse.dart';
|
||||
import 'package:wp_json_api/models/responses/WCCustomerUpdatedResponse.dart';
|
||||
import 'package:wp_json_api/models/responses/wc_customer_info_response.dart';
|
||||
import 'package:wp_json_api/models/responses/wc_customer_updated_response.dart';
|
||||
import 'package:wp_json_api/wp_json_api.dart';
|
||||
|
||||
class AccountBillingDetailsPage extends StatefulWidget {
|
||||
@ -182,7 +182,6 @@ class _AccountBillingDetailsPageState extends State<AccountBillingDetailsPage> {
|
||||
BoxShadow(
|
||||
color: HexColor("#e8e8e8"),
|
||||
blurRadius: 15.0,
|
||||
// has the effect of softening the shadow
|
||||
spreadRadius: 0,
|
||||
offset: Offset(
|
||||
0,
|
||||
@ -228,28 +227,35 @@ class _AccountBillingDetailsPageState extends State<AccountBillingDetailsPage> {
|
||||
_isUpdating = true;
|
||||
});
|
||||
|
||||
WCCustomerUpdatedResponse wcCustomerUpdatedResponse = await WPJsonAPI
|
||||
.instance
|
||||
.api((request) => request.wcUpdateCustomerInfo(userToken,
|
||||
billingFirstName: firstName,
|
||||
billingLastName: lastName,
|
||||
billingAddress1: addressLine,
|
||||
billingCity: city,
|
||||
billingState: state,
|
||||
billingPostcode: postalCode,
|
||||
billingCountry: country));
|
||||
|
||||
setState(() {
|
||||
_isUpdating = false;
|
||||
});
|
||||
|
||||
if (wcCustomerUpdatedResponse.status != 200) {
|
||||
WCCustomerUpdatedResponse wcCustomerUpdatedResponse;
|
||||
try {
|
||||
wcCustomerUpdatedResponse = await WPJsonAPI.instance.api((request) =>
|
||||
request.wcUpdateCustomerInfo(userToken,
|
||||
billingFirstName: firstName,
|
||||
billingLastName: lastName,
|
||||
billingAddress1: addressLine,
|
||||
billingCity: city,
|
||||
billingState: state,
|
||||
billingPostcode: postalCode,
|
||||
billingCountry: country));
|
||||
} on Exception catch (_) {
|
||||
showEdgeAlertWith(context,
|
||||
title: trans(context, "Oops!"),
|
||||
desc: trans(context, "Something went wrong"),
|
||||
style: EdgeAlertStyle.WARNING);
|
||||
return;
|
||||
style: EdgeAlertStyle.DANGER);
|
||||
} finally {
|
||||
setState(() {
|
||||
_isUpdating = false;
|
||||
});
|
||||
}
|
||||
|
||||
if (wcCustomerUpdatedResponse != null &&
|
||||
wcCustomerUpdatedResponse.status == 200) {
|
||||
showEdgeAlertWith(context,
|
||||
title: trans(context, "Success"),
|
||||
desc: trans(context, "Account updated"),
|
||||
style: EdgeAlertStyle.SUCCESS);
|
||||
Navigator.pop(context);
|
||||
}
|
||||
Navigator.pop(context);
|
||||
}
|
||||
}
|
||||
|
||||
@ -16,8 +16,9 @@ import 'package:label_storemax/helpers/shared_pref/sp_user_id.dart';
|
||||
import 'package:label_storemax/helpers/tools.dart';
|
||||
import 'package:label_storemax/widgets/app_loader.dart';
|
||||
import 'package:label_storemax/widgets/woosignal_ui.dart';
|
||||
import 'package:pull_to_refresh/pull_to_refresh.dart';
|
||||
import 'package:woosignal/models/response/order.dart';
|
||||
import 'package:wp_json_api/models/responses/WCCustomerInfoResponse.dart';
|
||||
import 'package:wp_json_api/models/responses/wc_customer_info_response.dart';
|
||||
import 'package:wp_json_api/wp_json_api.dart';
|
||||
|
||||
class AccountDetailPage extends StatefulWidget {
|
||||
@ -27,6 +28,12 @@ class AccountDetailPage extends StatefulWidget {
|
||||
|
||||
class _AccountDetailPageState extends State<AccountDetailPage>
|
||||
with SingleTickerProviderStateMixin {
|
||||
RefreshController _refreshController =
|
||||
RefreshController(initialRefresh: false);
|
||||
|
||||
bool _shouldStopRequests;
|
||||
bool waitForNextRequest;
|
||||
|
||||
int _page;
|
||||
List<Order> _orders;
|
||||
WCCustomerInfoResponse _wcCustomerInfoResponse;
|
||||
@ -41,6 +48,9 @@ class _AccountDetailPageState extends State<AccountDetailPage>
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_shouldStopRequests = false;
|
||||
waitForNextRequest = false;
|
||||
|
||||
_isLoading = true;
|
||||
_isLoadingOrders = true;
|
||||
_page = 1;
|
||||
@ -56,17 +66,31 @@ class _AccountDetailPageState extends State<AccountDetailPage>
|
||||
}
|
||||
|
||||
_fetchWpUserData() async {
|
||||
WCCustomerInfoResponse wcCustomerInfoResponse =
|
||||
await WPJsonAPI.instance.api((request) async {
|
||||
return request.wcCustomerInfo(await readAuthToken());
|
||||
});
|
||||
String userToken = await readAuthToken();
|
||||
|
||||
if (wcCustomerInfoResponse != null) {
|
||||
_wcCustomerInfoResponse = wcCustomerInfoResponse;
|
||||
WCCustomerInfoResponse wcCustomerInfoResponse;
|
||||
try {
|
||||
wcCustomerInfoResponse = await WPJsonAPI.instance
|
||||
.api((request) => request.wcCustomerInfo(userToken));
|
||||
} on Exception catch (_) {
|
||||
showEdgeAlertWith(
|
||||
context,
|
||||
title: trans(context, "Oops!"),
|
||||
desc: trans(context, "Something went wrong"),
|
||||
style: EdgeAlertStyle.DANGER,
|
||||
);
|
||||
} finally {
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
}
|
||||
|
||||
if (wcCustomerInfoResponse != null &&
|
||||
wcCustomerInfoResponse.status == 200) {
|
||||
setState(() {
|
||||
_wcCustomerInfoResponse = wcCustomerInfoResponse;
|
||||
});
|
||||
}
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
@ -113,7 +137,9 @@ class _AccountDetailPageState extends State<AccountDetailPage>
|
||||
margin: EdgeInsets.only(top: 10),
|
||||
child: CircleAvatar(
|
||||
backgroundImage: NetworkImage(
|
||||
_wcCustomerInfoResponse.data.avatar,
|
||||
_wcCustomerInfoResponse != null
|
||||
? _wcCustomerInfoResponse.data.avatar
|
||||
: "",
|
||||
),
|
||||
),
|
||||
height: 90,
|
||||
@ -252,18 +278,27 @@ class _AccountDetailPageState extends State<AccountDetailPage>
|
||||
_fetchOrders() async {
|
||||
String userId = await readUserId();
|
||||
|
||||
if (userId == null) {
|
||||
if (userId == null || _shouldStopRequests == true) {
|
||||
setState(() {
|
||||
_isLoadingOrders = false;
|
||||
_activeBody = _widgetOrders();
|
||||
});
|
||||
return;
|
||||
}
|
||||
_orders = await appWooSignal((api) {
|
||||
return api.getOrders(
|
||||
customer: int.parse(userId), page: _page, perPage: 100);
|
||||
});
|
||||
|
||||
List<Order> orders = await appWooSignal((api) =>
|
||||
api.getOrders(customer: int.parse(userId), page: _page, perPage: 50));
|
||||
|
||||
if (orders.length <= 0) {
|
||||
setState(() {
|
||||
_shouldStopRequests = true;
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
setState(() {
|
||||
_page += 1;
|
||||
_orders.addAll(orders);
|
||||
_isLoadingOrders = false;
|
||||
_activeBody = _widgetOrders();
|
||||
});
|
||||
@ -272,127 +307,183 @@ class _AccountDetailPageState extends State<AccountDetailPage>
|
||||
Widget _widgetOrders() {
|
||||
return _isLoadingOrders
|
||||
? showAppLoader()
|
||||
: _orders.length <= 0
|
||||
? Center(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Icon(
|
||||
Icons.shopping_cart,
|
||||
color: Colors.black54,
|
||||
size: 40,
|
||||
),
|
||||
Text(
|
||||
trans(context, "No orders found"),
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
: ListView.builder(
|
||||
itemBuilder: (cxt, i) {
|
||||
return Card(
|
||||
child: ListTile(
|
||||
contentPadding:
|
||||
EdgeInsets.only(top: 5, bottom: 5, left: 8, right: 6),
|
||||
title: Container(
|
||||
decoration: BoxDecoration(
|
||||
border: Border(
|
||||
bottom: BorderSide(
|
||||
color: HexColor("#fcfcfc"),
|
||||
width: 1,
|
||||
: SmartRefresher(
|
||||
enablePullDown: true,
|
||||
enablePullUp: true,
|
||||
footer: CustomFooter(
|
||||
builder: (BuildContext context, LoadStatus mode) {
|
||||
Widget body;
|
||||
if (mode == LoadStatus.idle) {
|
||||
body = Text(trans(context, "pull up load"));
|
||||
} else if (mode == LoadStatus.loading) {
|
||||
body = CupertinoActivityIndicator();
|
||||
} else if (mode == LoadStatus.failed) {
|
||||
body = Text(trans(context, "Load Failed! Click retry!"));
|
||||
} else if (mode == LoadStatus.canLoading) {
|
||||
body = Text(trans(context, "release to load more"));
|
||||
} else {
|
||||
body = Text(trans(context, "No more orders"));
|
||||
}
|
||||
return Container(
|
||||
height: 55.0,
|
||||
child: Center(child: body),
|
||||
);
|
||||
},
|
||||
),
|
||||
controller: _refreshController,
|
||||
onRefresh: _onRefresh,
|
||||
onLoading: _onLoading,
|
||||
child: (_orders.length != null && _orders.length > 0
|
||||
? ListView.builder(
|
||||
itemBuilder: (cxt, i) {
|
||||
return Card(
|
||||
child: ListTile(
|
||||
contentPadding: EdgeInsets.only(
|
||||
top: 5, bottom: 5, left: 8, right: 6),
|
||||
title: Container(
|
||||
decoration: BoxDecoration(
|
||||
border: Border(
|
||||
bottom: BorderSide(
|
||||
color: HexColor("#fcfcfc"),
|
||||
width: 1,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: <Widget>[
|
||||
Text(
|
||||
"#" + _orders[i].id.toString(),
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
Text(
|
||||
capitalize(_orders[i].status),
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
subtitle: Padding(
|
||||
padding: const EdgeInsets.only(top: 10),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: <Widget>[
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: <Widget>[
|
||||
Text(
|
||||
formatStringCurrency(total: _orders[i].total),
|
||||
style: Theme.of(context)
|
||||
.primaryTextTheme
|
||||
.bodyText2
|
||||
.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Colors.black),
|
||||
textAlign: TextAlign.left,
|
||||
"#" + _orders[i].id.toString(),
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
Text(
|
||||
_orders[i].lineItems.length.toString() +
|
||||
" " +
|
||||
trans(context, "items"),
|
||||
capitalize(_orders[i].status),
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
subtitle: Padding(
|
||||
padding: const EdgeInsets.only(top: 10),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: <Widget>[
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Text(
|
||||
formatStringCurrency(
|
||||
total: _orders[i].total),
|
||||
style: Theme.of(context)
|
||||
.primaryTextTheme
|
||||
.bodyText2
|
||||
.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Colors.black),
|
||||
textAlign: TextAlign.left,
|
||||
),
|
||||
Text(
|
||||
_orders[i].lineItems.length.toString() +
|
||||
" " +
|
||||
trans(context, "items"),
|
||||
style: Theme.of(context)
|
||||
.primaryTextTheme
|
||||
.bodyText1
|
||||
.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Colors.black),
|
||||
textAlign: TextAlign.left,
|
||||
),
|
||||
],
|
||||
),
|
||||
Text(
|
||||
dateFormatted(
|
||||
date: _orders[i].dateCreated,
|
||||
formatType:
|
||||
formatForDateTime(FormatType.Date),
|
||||
) +
|
||||
"\n" +
|
||||
dateFormatted(
|
||||
date: _orders[i].dateCreated,
|
||||
formatType:
|
||||
formatForDateTime(FormatType.Time),
|
||||
),
|
||||
textAlign: TextAlign.right,
|
||||
style: Theme.of(context)
|
||||
.primaryTextTheme
|
||||
.bodyText1
|
||||
.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Colors.black),
|
||||
textAlign: TextAlign.left,
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Colors.black,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Text(
|
||||
dateFormatted(
|
||||
date: _orders[i].dateCreated,
|
||||
formatType:
|
||||
formatForDateTime(FormatType.Date),
|
||||
) +
|
||||
"\n" +
|
||||
dateFormatted(
|
||||
date: _orders[i].dateCreated,
|
||||
formatType:
|
||||
formatForDateTime(FormatType.Time),
|
||||
),
|
||||
textAlign: TextAlign.right,
|
||||
style: Theme.of(context)
|
||||
.primaryTextTheme
|
||||
.bodyText1
|
||||
.copyWith(
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Colors.black),
|
||||
),
|
||||
],
|
||||
),
|
||||
trailing: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Icon(Icons.chevron_right),
|
||||
],
|
||||
),
|
||||
onTap: () => _viewProfileDetail(i),
|
||||
),
|
||||
),
|
||||
trailing: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Icon(Icons.chevron_right),
|
||||
],
|
||||
),
|
||||
onTap: () {
|
||||
int orderId = _orders[i].id;
|
||||
Navigator.pushNamed(context, "/account-order-detail",
|
||||
arguments: orderId);
|
||||
},
|
||||
);
|
||||
},
|
||||
itemCount: _orders.length,
|
||||
)
|
||||
: Center(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Icon(
|
||||
Icons.shopping_cart,
|
||||
color: Colors.black54,
|
||||
size: 40,
|
||||
),
|
||||
Text(
|
||||
trans(context, "No orders found"),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
itemCount: _orders.length,
|
||||
);
|
||||
)),
|
||||
);
|
||||
}
|
||||
|
||||
void _onRefresh() async {
|
||||
_orders = [];
|
||||
_page = 1;
|
||||
_shouldStopRequests = false;
|
||||
waitForNextRequest = false;
|
||||
await _fetchOrders();
|
||||
_refreshController.refreshCompleted();
|
||||
}
|
||||
|
||||
void _onLoading() async {
|
||||
await _fetchOrders();
|
||||
|
||||
if (mounted) {
|
||||
setState(() {});
|
||||
if (_shouldStopRequests) {
|
||||
_refreshController.loadNoData();
|
||||
} else {
|
||||
_refreshController.loadComplete();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_viewProfileDetail(int i) {
|
||||
int orderId = _orders[i].id;
|
||||
Navigator.pushNamed(
|
||||
context,
|
||||
"/account-order-detail",
|
||||
arguments: orderId,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -17,7 +17,11 @@ import 'package:label_storemax/labelconfig.dart';
|
||||
import 'package:label_storemax/widgets/buttons.dart';
|
||||
import 'package:label_storemax/widgets/woosignal_ui.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
import 'package:wp_json_api/models/responses/WPUserLoginResponse.dart';
|
||||
import 'package:wp_json_api/exceptions/incorrect_password_exception.dart';
|
||||
import 'package:wp_json_api/exceptions/invalid_email_exception.dart';
|
||||
import 'package:wp_json_api/exceptions/invalid_nonce_exception.dart';
|
||||
import 'package:wp_json_api/exceptions/invalid_username_exception.dart';
|
||||
import 'package:wp_json_api/models/responses/wp_user_login_response.dart';
|
||||
import 'package:wp_json_api/wp_json_api.dart';
|
||||
|
||||
class AccountLandingPage extends StatefulWidget {
|
||||
@ -148,16 +152,69 @@ class _AccountLandingPageState extends State<AccountLandingPage> {
|
||||
String email = _tfEmailController.text;
|
||||
String password = _tfPasswordController.text;
|
||||
|
||||
if (email != null) {
|
||||
email = email.trim();
|
||||
}
|
||||
|
||||
if (email == "" || password == "") {
|
||||
showEdgeAlertWith(context,
|
||||
title: trans(context, "Invalid details"),
|
||||
desc: trans(context, "The email and password field cannot be empty"),
|
||||
style: EdgeAlertStyle.DANGER);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isEmail(email)) {
|
||||
showEdgeAlertWith(context,
|
||||
title: trans(context, "Oops"),
|
||||
desc: trans(context, "That email address is not valid"),
|
||||
style: EdgeAlertStyle.DANGER);
|
||||
return;
|
||||
}
|
||||
|
||||
if (_hasTappedLogin == false) {
|
||||
setState(() {
|
||||
_hasTappedLogin = true;
|
||||
});
|
||||
|
||||
WPUserLoginResponse wpUserLoginResponse = await WPJsonAPI.instance
|
||||
.api((request) => request.wpLogin(email: email, password: password));
|
||||
_hasTappedLogin = false;
|
||||
WPUserLoginResponse wpUserLoginResponse;
|
||||
try {
|
||||
wpUserLoginResponse = await WPJsonAPI.instance.api(
|
||||
(request) => request.wpLogin(email: email, password: password));
|
||||
} on InvalidNonceException catch (_) {
|
||||
showEdgeAlertWith(context,
|
||||
title: trans(context, "Invalid details"),
|
||||
desc: trans(
|
||||
context, "Something went wrong, please contact our store"),
|
||||
style: EdgeAlertStyle.DANGER);
|
||||
} on InvalidEmailException catch (_) {
|
||||
showEdgeAlertWith(context,
|
||||
title: trans(context, "Invalid details"),
|
||||
desc: trans(context, "That email does not match our records"),
|
||||
style: EdgeAlertStyle.DANGER);
|
||||
} on InvalidUsernameException catch (_) {
|
||||
showEdgeAlertWith(context,
|
||||
title: trans(context, "Invalid details"),
|
||||
desc: trans(context, "That username does not match our records"),
|
||||
style: EdgeAlertStyle.DANGER);
|
||||
} on IncorrectPasswordException catch (_) {
|
||||
showEdgeAlertWith(context,
|
||||
title: trans(context, "Invalid details"),
|
||||
desc: trans(context, "That password does not match our records"),
|
||||
style: EdgeAlertStyle.DANGER);
|
||||
} on Exception catch (_) {
|
||||
showEdgeAlertWith(context,
|
||||
title: trans(context, "Oops!"),
|
||||
desc: trans(context, "Invalid login credentials"),
|
||||
style: EdgeAlertStyle.DANGER,
|
||||
icon: Icons.account_circle);
|
||||
} finally {
|
||||
setState(() {
|
||||
_hasTappedLogin = false;
|
||||
});
|
||||
}
|
||||
|
||||
if (wpUserLoginResponse != null) {
|
||||
if (wpUserLoginResponse != null && wpUserLoginResponse.status == 200) {
|
||||
String token = wpUserLoginResponse.data.userToken;
|
||||
authUser(token);
|
||||
storeUserId(wpUserLoginResponse.data.userId.toString());
|
||||
@ -169,15 +226,6 @@ class _AccountLandingPageState extends State<AccountLandingPage> {
|
||||
icon: Icons.account_circle);
|
||||
navigatorPush(context,
|
||||
routeName: UserAuth.instance.redirect, forgetLast: 1);
|
||||
} else {
|
||||
showEdgeAlertWith(context,
|
||||
title: trans(context, "Oops!"),
|
||||
desc: trans(context, "Invalid login credentials"),
|
||||
style: EdgeAlertStyle.WARNING,
|
||||
icon: Icons.account_circle);
|
||||
setState(() {
|
||||
_hasTappedLogin = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -134,8 +134,10 @@ class _AccountOrderDetailPageState extends State<AccountOrderDetailPage> {
|
||||
),
|
||||
),
|
||||
Text(
|
||||
capitalize(formatStringCurrency(
|
||||
total: _order.lineItems[i].price)),
|
||||
capitalize(
|
||||
formatStringCurrency(
|
||||
total: _order.lineItems[i].price),
|
||||
),
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
|
||||
@ -15,8 +15,8 @@ import 'package:label_storemax/helpers/tools.dart';
|
||||
import 'package:label_storemax/widgets/app_loader.dart';
|
||||
import 'package:label_storemax/widgets/buttons.dart';
|
||||
import 'package:label_storemax/widgets/woosignal_ui.dart';
|
||||
import 'package:wp_json_api/models/responses/WPUserInfoResponse.dart';
|
||||
import 'package:wp_json_api/models/responses/WPUserInfoUpdatedResponse.dart';
|
||||
import 'package:wp_json_api/models/responses/wp_user_info_response.dart';
|
||||
import 'package:wp_json_api/models/responses/wp_user_info_updated_response.dart';
|
||||
import 'package:wp_json_api/wp_json_api.dart';
|
||||
|
||||
class AccountProfileUpdatePage extends StatefulWidget {
|
||||
@ -132,22 +132,31 @@ class _AccountProfileUpdatePageState extends State<AccountProfileUpdatePage> {
|
||||
);
|
||||
}
|
||||
|
||||
bool _isNetworking = false;
|
||||
_updateDetails() async {
|
||||
String firstName = _tfFirstName.text;
|
||||
String lastName = _tfLastName.text;
|
||||
|
||||
if (_isNetworking == false) {
|
||||
if (isLoading == false) {
|
||||
setState(() {
|
||||
_isNetworking = true;
|
||||
isLoading = true;
|
||||
});
|
||||
|
||||
WPUserInfoUpdatedResponse wpUserInfoUpdatedResponse =
|
||||
await WPJsonAPI.instance.api((request) async {
|
||||
return request.wpUpdateUserInfo(await readAuthToken(),
|
||||
firstName: firstName, lastName: lastName);
|
||||
});
|
||||
String userToken = await readAuthToken();
|
||||
WPUserInfoUpdatedResponse wpUserInfoUpdatedResponse;
|
||||
try {
|
||||
wpUserInfoUpdatedResponse = await WPJsonAPI.instance.api((request) =>
|
||||
request.wpUpdateUserInfo(userToken,
|
||||
firstName: firstName, lastName: lastName));
|
||||
} on Exception catch (e) {
|
||||
showEdgeAlertWith(context,
|
||||
title: trans(context, "Invalid details"),
|
||||
desc: trans(context, "Please check your email and password"),
|
||||
style: EdgeAlertStyle.DANGER);
|
||||
} finally {
|
||||
setState(() {
|
||||
isLoading = false;
|
||||
});
|
||||
}
|
||||
|
||||
if (wpUserInfoUpdatedResponse != null &&
|
||||
wpUserInfoUpdatedResponse.status == 200) {
|
||||
@ -155,16 +164,8 @@ class _AccountProfileUpdatePageState extends State<AccountProfileUpdatePage> {
|
||||
title: trans(context, "Success"),
|
||||
desc: trans(context, "Account updated"),
|
||||
style: EdgeAlertStyle.SUCCESS);
|
||||
} else {
|
||||
showEdgeAlertWith(context,
|
||||
title: trans(context, "Invalid details"),
|
||||
desc: trans(context, "Please check your email and password"),
|
||||
style: EdgeAlertStyle.WARNING);
|
||||
Navigator.pop(context);
|
||||
}
|
||||
setState(() {
|
||||
_isNetworking = false;
|
||||
isLoading = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -16,7 +16,13 @@ import 'package:label_storemax/labelconfig.dart';
|
||||
import 'package:label_storemax/widgets/buttons.dart';
|
||||
import 'package:label_storemax/widgets/woosignal_ui.dart';
|
||||
import 'package:woosignal/helpers/shared_pref.dart';
|
||||
import 'package:wp_json_api/models/responses/WPUserRegisterResponse.dart';
|
||||
import 'package:wp_json_api/exceptions/empty_username_exception.dart';
|
||||
import 'package:wp_json_api/exceptions/existing_user_email_exception.dart';
|
||||
import 'package:wp_json_api/exceptions/existing_user_login_exception.dart';
|
||||
import 'package:wp_json_api/exceptions/invalid_nonce_exception.dart';
|
||||
import 'package:wp_json_api/exceptions/user_already_exist_exception.dart';
|
||||
import 'package:wp_json_api/exceptions/username_taken_exception.dart';
|
||||
import 'package:wp_json_api/models/responses/wp_user_register_response.dart';
|
||||
import 'package:wp_json_api/wp_json_api.dart';
|
||||
|
||||
class AccountRegistrationPage extends StatefulWidget {
|
||||
@ -72,18 +78,22 @@ class _AccountRegistrationPageState extends State<AccountRegistrationPage> {
|
||||
child: Row(
|
||||
children: <Widget>[
|
||||
Flexible(
|
||||
child: wsTextEditingRow(context,
|
||||
heading: trans(context, "First Name"),
|
||||
controller: _tfFirstNameController,
|
||||
shouldAutoFocus: true,
|
||||
keyboardType: TextInputType.text),
|
||||
child: wsTextEditingRow(
|
||||
context,
|
||||
heading: trans(context, "First Name"),
|
||||
controller: _tfFirstNameController,
|
||||
shouldAutoFocus: true,
|
||||
keyboardType: TextInputType.text,
|
||||
),
|
||||
),
|
||||
Flexible(
|
||||
child: wsTextEditingRow(context,
|
||||
heading: trans(context, "Last Name"),
|
||||
controller: _tfLastNameController,
|
||||
shouldAutoFocus: false,
|
||||
keyboardType: TextInputType.text),
|
||||
child: wsTextEditingRow(
|
||||
context,
|
||||
heading: trans(context, "Last Name"),
|
||||
controller: _tfLastNameController,
|
||||
shouldAutoFocus: false,
|
||||
keyboardType: TextInputType.text,
|
||||
),
|
||||
),
|
||||
],
|
||||
)),
|
||||
@ -144,6 +154,10 @@ class _AccountRegistrationPageState extends State<AccountRegistrationPage> {
|
||||
String firstName = _tfFirstNameController.text;
|
||||
String lastName = _tfLastNameController.text;
|
||||
|
||||
if (email != null) {
|
||||
email = email.trim();
|
||||
}
|
||||
|
||||
if (!isEmail(email)) {
|
||||
showEdgeAlertWith(context,
|
||||
title: trans(context, "Oops"),
|
||||
@ -168,13 +182,59 @@ class _AccountRegistrationPageState extends State<AccountRegistrationPage> {
|
||||
String username =
|
||||
(email.replaceAll(new RegExp(r'(@|\.)'), "")) + randomStr(4);
|
||||
|
||||
WPUserRegisterResponse wpUserRegisterResponse = await WPJsonAPI.instance
|
||||
.api((request) => request.wpRegister(
|
||||
email: email.toLowerCase(),
|
||||
password: password,
|
||||
username: username));
|
||||
WPUserRegisterResponse wpUserRegisterResponse;
|
||||
try {
|
||||
wpUserRegisterResponse = await WPJsonAPI.instance.api(
|
||||
(request) => request.wpRegister(
|
||||
email: email.toLowerCase(),
|
||||
password: password,
|
||||
username: username,
|
||||
),
|
||||
);
|
||||
} on UsernameTakenException catch (e) {
|
||||
showEdgeAlertWith(context,
|
||||
title: trans(context, "Oops!"),
|
||||
desc: trans(context, e.message),
|
||||
style: EdgeAlertStyle.DANGER);
|
||||
} on InvalidNonceException catch (_) {
|
||||
showEdgeAlertWith(context,
|
||||
title: trans(context, "Invalid details"),
|
||||
desc: trans(
|
||||
context, "Something went wrong, please contact our store"),
|
||||
style: EdgeAlertStyle.DANGER);
|
||||
} on ExistingUserLoginException catch (_) {
|
||||
showEdgeAlertWith(context,
|
||||
title: trans(context, "Oops!"),
|
||||
desc: trans(context, "A user already exists"),
|
||||
style: EdgeAlertStyle.DANGER);
|
||||
} on ExistingUserEmailException catch (_) {
|
||||
showEdgeAlertWith(context,
|
||||
title: trans(context, "Oops!"),
|
||||
desc: trans(context, "That email is taken, try another"),
|
||||
style: EdgeAlertStyle.DANGER);
|
||||
} on UserAlreadyExistException catch (_) {
|
||||
showEdgeAlertWith(context,
|
||||
title: trans(context, "Oops!"),
|
||||
desc: trans(context, "A user already exists"),
|
||||
style: EdgeAlertStyle.DANGER);
|
||||
} on EmptyUsernameException catch (e) {
|
||||
showEdgeAlertWith(context,
|
||||
title: trans(context, "Oops!"),
|
||||
desc: trans(context, e.message),
|
||||
style: EdgeAlertStyle.DANGER);
|
||||
} on Exception catch (_) {
|
||||
showEdgeAlertWith(context,
|
||||
title: trans(context, "Oops!"),
|
||||
desc: trans(context, "Something went wrong"),
|
||||
style: EdgeAlertStyle.DANGER);
|
||||
} finally {
|
||||
setState(() {
|
||||
_hasTappedRegister = false;
|
||||
});
|
||||
}
|
||||
|
||||
if (wpUserRegisterResponse != null) {
|
||||
if (wpUserRegisterResponse != null &&
|
||||
wpUserRegisterResponse.status == 200) {
|
||||
String token = wpUserRegisterResponse.data.userToken;
|
||||
authUser(token);
|
||||
storeUserId(wpUserRegisterResponse.data.userId.toString());
|
||||
@ -189,14 +249,6 @@ class _AccountRegistrationPageState extends State<AccountRegistrationPage> {
|
||||
icon: Icons.account_circle);
|
||||
navigatorPush(context,
|
||||
routeName: UserAuth.instance.redirect, forgetLast: 2);
|
||||
} else {
|
||||
setState(() {
|
||||
showEdgeAlertWith(context,
|
||||
title: trans(context, "Invalid"),
|
||||
desc: trans(context, "Please check your details"),
|
||||
style: EdgeAlertStyle.WARNING);
|
||||
_hasTappedRegister = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -15,8 +15,8 @@ import 'package:label_storemax/helpers/tools.dart';
|
||||
import 'package:label_storemax/widgets/app_loader.dart';
|
||||
import 'package:label_storemax/widgets/buttons.dart';
|
||||
import 'package:label_storemax/widgets/woosignal_ui.dart';
|
||||
import 'package:wp_json_api/models/responses/WCCustomerInfoResponse.dart';
|
||||
import 'package:wp_json_api/models/responses/WCCustomerUpdatedResponse.dart';
|
||||
import 'package:wp_json_api/models/responses/wc_customer_info_response.dart';
|
||||
import 'package:wp_json_api/models/responses/wc_customer_updated_response.dart';
|
||||
import 'package:wp_json_api/wp_json_api.dart';
|
||||
|
||||
class AccountShippingDetailsPage extends StatefulWidget {
|
||||
@ -62,24 +62,39 @@ class _AccountShippingDetailsPageState
|
||||
}
|
||||
|
||||
_fetchUserDetails() async {
|
||||
WCCustomerInfoResponse wcCustomerInfoResponse =
|
||||
await WPJsonAPI.instance.api((request) async {
|
||||
return request.wcCustomerInfo(await readAuthToken());
|
||||
});
|
||||
String userToken = await readAuthToken();
|
||||
|
||||
Shipping shipping = wcCustomerInfoResponse.data.shipping;
|
||||
_txtShippingFirstName.text = shipping.firstName;
|
||||
_txtShippingLastName.text = shipping.lastName;
|
||||
WCCustomerInfoResponse wcCustomerInfoResponse;
|
||||
try {
|
||||
wcCustomerInfoResponse = await WPJsonAPI.instance
|
||||
.api((request) => request.wcCustomerInfo(userToken));
|
||||
} on Exception catch (_) {
|
||||
showEdgeAlertWith(
|
||||
context,
|
||||
title: trans(context, "Oops!"),
|
||||
desc: trans(context, "Something went wrong"),
|
||||
style: EdgeAlertStyle.DANGER,
|
||||
);
|
||||
Navigator.pop(context);
|
||||
return;
|
||||
} finally {
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
}
|
||||
|
||||
_txtShippingAddressLine.text = shipping.address1;
|
||||
_txtShippingCity.text = shipping.city;
|
||||
_txtShippingState.text = shipping.state;
|
||||
_txtShippingPostalCode.text = shipping.postcode;
|
||||
_txtShippingCountry.text = shipping.country;
|
||||
if (wcCustomerInfoResponse != null &&
|
||||
wcCustomerInfoResponse.status == 200) {
|
||||
Shipping shipping = wcCustomerInfoResponse.data.shipping;
|
||||
_txtShippingFirstName.text = shipping.firstName;
|
||||
_txtShippingLastName.text = shipping.lastName;
|
||||
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
_txtShippingAddressLine.text = shipping.address1;
|
||||
_txtShippingCity.text = shipping.city;
|
||||
_txtShippingState.text = shipping.state;
|
||||
_txtShippingPostalCode.text = shipping.postcode;
|
||||
_txtShippingCountry.text = shipping.country;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
@ -228,28 +243,46 @@ class _AccountShippingDetailsPageState
|
||||
|
||||
String userToken = await readAuthToken();
|
||||
|
||||
if (_isUpdating == true) {
|
||||
return;
|
||||
}
|
||||
|
||||
setState(() {
|
||||
_isUpdating = true;
|
||||
});
|
||||
|
||||
WCCustomerUpdatedResponse wcCustomerUpdatedResponse = await WPJsonAPI
|
||||
.instance
|
||||
.api((request) => request.wcUpdateCustomerInfo(userToken,
|
||||
shippingFirstName: firstName,
|
||||
shippingLastName: lastName,
|
||||
shippingAddress1: addressLine,
|
||||
shippingCity: city,
|
||||
shippingState: state,
|
||||
shippingPostcode: postalCode,
|
||||
shippingCountry: country));
|
||||
|
||||
if (wcCustomerUpdatedResponse.status != 200) {
|
||||
WCCustomerUpdatedResponse wcCustomerUpdatedResponse;
|
||||
try {
|
||||
wcCustomerUpdatedResponse = await WPJsonAPI.instance.api(
|
||||
(request) => request.wcUpdateCustomerInfo(
|
||||
userToken,
|
||||
shippingFirstName: firstName,
|
||||
shippingLastName: lastName,
|
||||
shippingAddress1: addressLine,
|
||||
shippingCity: city,
|
||||
shippingState: state,
|
||||
shippingPostcode: postalCode,
|
||||
shippingCountry: country,
|
||||
),
|
||||
);
|
||||
} on Exception catch (_) {
|
||||
showEdgeAlertWith(context,
|
||||
title: trans(context, "Oops!"),
|
||||
desc: trans(context, "Something went wrong"),
|
||||
style: EdgeAlertStyle.WARNING);
|
||||
return;
|
||||
style: EdgeAlertStyle.DANGER);
|
||||
} finally {
|
||||
setState(() {
|
||||
_isUpdating = true;
|
||||
});
|
||||
}
|
||||
|
||||
if (wcCustomerUpdatedResponse != null &&
|
||||
wcCustomerUpdatedResponse.status == 200) {
|
||||
showEdgeAlertWith(context,
|
||||
title: trans(context, "Success"),
|
||||
desc: trans(context, "Account updated"),
|
||||
style: EdgeAlertStyle.SUCCESS);
|
||||
Navigator.pop(context);
|
||||
}
|
||||
Navigator.pop(context);
|
||||
}
|
||||
}
|
||||
|
||||
@ -10,6 +10,8 @@
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:label_storemax/helpers/tools.dart';
|
||||
import 'package:label_storemax/models/cart.dart';
|
||||
import 'package:label_storemax/models/checkout_session.dart';
|
||||
import 'package:woosignal/models/response/products.dart' as WS;
|
||||
import 'package:woosignal/models/response/order.dart' as WS;
|
||||
|
||||
@ -31,6 +33,9 @@ class _CheckoutStatusState extends State<CheckoutStatusPage> {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
Cart.getInstance.clear();
|
||||
CheckoutSession.getInstance.clear();
|
||||
}
|
||||
|
||||
@override
|
||||
@ -151,7 +156,8 @@ class _CheckoutStatusState extends State<CheckoutStatusPage> {
|
||||
),
|
||||
Text(
|
||||
formatStringCurrency(
|
||||
total: lineItem.total.toString()),
|
||||
total: lineItem.total.toString(),
|
||||
),
|
||||
style:
|
||||
Theme.of(context).primaryTextTheme.bodyText1,
|
||||
)
|
||||
|
||||
@ -29,8 +29,6 @@ cashOnDeliveryPay(context,
|
||||
Order order = await appWooSignal((api) => api.createOrder(orderWC));
|
||||
|
||||
if (order != null) {
|
||||
Cart.getInstance.clear();
|
||||
CheckoutSession.getInstance.clear();
|
||||
Navigator.pushNamed(context, "/checkout-status", arguments: order);
|
||||
} else {
|
||||
showEdgeAlertWith(
|
||||
|
||||
@ -48,7 +48,6 @@ examplePay(context,
|
||||
|
||||
// CHECK IF ORDER IS NULL
|
||||
if (order != null) {
|
||||
Cart.getInstance.clear();
|
||||
Navigator.pushNamed(context, "/checkout-status", arguments: order);
|
||||
} else {
|
||||
showEdgeAlertWith(
|
||||
|
||||
@ -34,8 +34,6 @@ razorPay(context,
|
||||
Order order = await appWooSignal((api) => api.createOrder(orderWC));
|
||||
|
||||
if (order != null) {
|
||||
Cart.getInstance.clear();
|
||||
CheckoutSession.getInstance.clear();
|
||||
_razorpay.clear();
|
||||
Navigator.pushNamed(context, "/checkout-status", arguments: order);
|
||||
} else {
|
||||
|
||||
@ -78,8 +78,6 @@ stripePay(context,
|
||||
Order order = await appWooSignal((api) => api.createOrder(orderWC));
|
||||
|
||||
if (order != null) {
|
||||
Cart.getInstance.clear();
|
||||
CheckoutSession.getInstance.clear();
|
||||
Navigator.pushNamed(context, "/checkout-status", arguments: order);
|
||||
} else {
|
||||
showEdgeAlertWith(
|
||||
|
||||
@ -8,6 +8,7 @@
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
|
||||
import 'package:auto_size_text/auto_size_text.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:label_storemax/labelconfig.dart';
|
||||
import 'package:label_storemax/models/cart.dart';
|
||||
@ -211,93 +212,118 @@ Widget wsCardProductItem(BuildContext context,
|
||||
margin: EdgeInsets.all(4),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
Container(
|
||||
height: constraints.maxHeight / 1.75,
|
||||
height: constraints.maxHeight / 2,
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(3.0),
|
||||
child: CachedNetworkImage(
|
||||
imageUrl: (product.images.length > 0
|
||||
? product.images.first.src
|
||||
: ""),
|
||||
placeholder: (context, url) => Container(
|
||||
child: Center(
|
||||
child: CircularProgressIndicator(),
|
||||
child: Stack(
|
||||
children: [
|
||||
CachedNetworkImage(
|
||||
imageUrl: (product.images.length > 0
|
||||
? product.images.first.src
|
||||
: ""),
|
||||
placeholder: (context, url) => Container(
|
||||
child: Center(
|
||||
child: CircularProgressIndicator(),
|
||||
),
|
||||
height: constraints.maxHeight / 2,
|
||||
),
|
||||
height: constraints.maxHeight / 1.75,
|
||||
errorWidget: (context, url, error) => new Icon(Icons.error),
|
||||
fit: BoxFit.contain,
|
||||
height: constraints.maxHeight / 2,
|
||||
width: double.infinity,
|
||||
),
|
||||
errorWidget: (context, url, error) => new Icon(Icons.error),
|
||||
fit: BoxFit.fitWidth,
|
||||
height: constraints.maxHeight / 1.75,
|
||||
width: double.infinity,
|
||||
),
|
||||
(product.onSale && product.type != "variable"
|
||||
? Positioned(
|
||||
bottom: 5,
|
||||
left: 8,
|
||||
right: 8,
|
||||
child: Container(
|
||||
padding: EdgeInsets.all(2),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white70,
|
||||
borderRadius: BorderRadius.circular(4),
|
||||
),
|
||||
child: RichText(
|
||||
textAlign: TextAlign.center,
|
||||
text: TextSpan(
|
||||
text: '',
|
||||
style: Theme.of(context).textTheme.bodyText1,
|
||||
children: <TextSpan>[
|
||||
TextSpan(
|
||||
text:
|
||||
"${workoutSaleDiscount(salePrice: product.salePrice, priceBefore: product.regularPrice)}% ${trans(context, "off")}",
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.bodyText1
|
||||
.copyWith(
|
||||
color: Colors.black87,
|
||||
fontSize: 11,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
: null),
|
||||
].where((e) => e != null).toList()),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 1),
|
||||
Container(
|
||||
margin: const EdgeInsets.only(top: 8, bottom: 8),
|
||||
child: Text(
|
||||
product.name,
|
||||
style: Theme.of(context).textTheme.bodyText2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
maxLines: 2,
|
||||
textAlign: TextAlign.left,
|
||||
),
|
||||
),
|
||||
Flexible(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(top: 1),
|
||||
child: Text(
|
||||
formatStringCurrency(total: product.price),
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.bodyText2
|
||||
.copyWith(fontWeight: FontWeight.w600),
|
||||
textAlign: TextAlign.left,
|
||||
),
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
),
|
||||
Flexible(
|
||||
child: Container(
|
||||
child: (product.onSale && product.type != "variable"
|
||||
? RichText(
|
||||
textAlign: TextAlign.left,
|
||||
text: TextSpan(
|
||||
text: '',
|
||||
style: Theme.of(context).textTheme.bodyText1,
|
||||
children: <TextSpan>[
|
||||
TextSpan(
|
||||
text: '${trans(context, "Was")}: ',
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.bodyText1
|
||||
.copyWith(
|
||||
color: Colors.black54, fontSize: 11),
|
||||
),
|
||||
TextSpan(
|
||||
text: formatStringCurrency(
|
||||
total: product.regularPrice),
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.bodyText1
|
||||
.copyWith(
|
||||
decoration: TextDecoration.lineThrough,
|
||||
color: Colors.grey,
|
||||
fontSize: 11),
|
||||
),
|
||||
TextSpan(
|
||||
text:
|
||||
" | ${workoutSaleDiscount(salePrice: product.salePrice, priceBefore: product.regularPrice)}% ${trans(context, "off")}",
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.bodyText1
|
||||
.copyWith(
|
||||
color: Colors.black87, fontSize: 11),
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
: null),
|
||||
width: double.infinity,
|
||||
height: 50,
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
AutoSizeText(
|
||||
formatStringCurrency(total: product.price) + " ",
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.bodyText2
|
||||
.copyWith(fontWeight: FontWeight.w600),
|
||||
textAlign: TextAlign.left,
|
||||
),
|
||||
(product.onSale && product.type != "variable"
|
||||
? RichText(
|
||||
text: TextSpan(children: [
|
||||
TextSpan(
|
||||
text: '${trans(context, "Was")}: ',
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.bodyText1
|
||||
.copyWith(
|
||||
color: Colors.black54, fontSize: 11),
|
||||
),
|
||||
TextSpan(
|
||||
text: formatStringCurrency(
|
||||
total: product.regularPrice,
|
||||
),
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.bodyText1
|
||||
.copyWith(
|
||||
decoration: TextDecoration.lineThrough,
|
||||
color: Colors.grey,
|
||||
fontSize: 11),
|
||||
),
|
||||
]),
|
||||
)
|
||||
: null),
|
||||
].where((e) => e != null).toList(),
|
||||
),
|
||||
),
|
||||
),
|
||||
].where((e) => e != null).toList(),
|
||||
|
||||
@ -105,7 +105,7 @@ packages:
|
||||
name: device_info
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.4.2+3"
|
||||
version: "0.4.2+4"
|
||||
dio:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -133,7 +133,7 @@ packages:
|
||||
name: file
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "5.1.0"
|
||||
version: "5.2.0"
|
||||
flare_dart:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -159,7 +159,7 @@ packages:
|
||||
name: flutter_cache_manager
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.2"
|
||||
version: "1.4.1"
|
||||
flutter_launcher_icons:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -252,13 +252,6 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.16.1"
|
||||
js:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: js
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.6.1+1"
|
||||
matcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -286,7 +279,7 @@ packages:
|
||||
name: package_info
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.4.0+18"
|
||||
version: "0.4.1"
|
||||
page_transition:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -307,21 +300,28 @@ packages:
|
||||
name: path_provider
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.6.7"
|
||||
version: "1.6.11"
|
||||
path_provider_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_linux
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.0.1+1"
|
||||
path_provider_macos:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_macos
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.0.4+2"
|
||||
version: "0.0.4+3"
|
||||
path_provider_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_platform_interface
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.1"
|
||||
version: "1.0.2"
|
||||
pedantic:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -350,6 +350,13 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.0+2"
|
||||
platform_detect:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: platform_detect
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.4.0"
|
||||
plugin_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -357,6 +364,20 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.2"
|
||||
process:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: process
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.0.13"
|
||||
pub_semver:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pub_semver
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.4.4"
|
||||
pull_to_refresh:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -384,7 +405,7 @@ packages:
|
||||
name: rxdart
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.24.0"
|
||||
version: "0.24.1"
|
||||
shared_preferences:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -398,21 +419,21 @@ packages:
|
||||
name: shared_preferences_macos
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.0.1+8"
|
||||
version: "0.0.1+10"
|
||||
shared_preferences_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shared_preferences_platform_interface
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.3"
|
||||
version: "1.0.4"
|
||||
shared_preferences_web:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shared_preferences_web
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.2+5"
|
||||
version: "0.1.2+7"
|
||||
sky_engine:
|
||||
dependency: transitive
|
||||
description: flutter
|
||||
@ -431,14 +452,14 @@ packages:
|
||||
name: sqflite
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.3.0+1"
|
||||
version: "1.3.1"
|
||||
sqflite_common:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: sqflite_common
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.1"
|
||||
version: "1.0.2+1"
|
||||
stack_trace:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -473,7 +494,7 @@ packages:
|
||||
name: synchronized
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.2.0"
|
||||
version: "2.2.0+1"
|
||||
term_glyph:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -508,35 +529,35 @@ packages:
|
||||
name: url_launcher
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "5.4.7"
|
||||
version: "5.4.11"
|
||||
url_launcher_macos:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_macos
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.0.1+5"
|
||||
version: "0.0.1+7"
|
||||
url_launcher_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_platform_interface
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.6"
|
||||
version: "1.0.7"
|
||||
url_launcher_web:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_web
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.1+4"
|
||||
version: "0.1.1+6"
|
||||
uuid:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: uuid
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.4"
|
||||
version: "2.1.0"
|
||||
vector_math:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -550,21 +571,28 @@ packages:
|
||||
name: woosignal
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.9"
|
||||
version: "1.1.0"
|
||||
woosignal_stripe:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: woosignal_stripe
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.0.4"
|
||||
version: "0.0.6"
|
||||
wp_json_api:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: wp_json_api
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.3"
|
||||
version: "0.1.4"
|
||||
xdg_directories:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: xdg_directories
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.0"
|
||||
xml:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -580,5 +608,5 @@ packages:
|
||||
source: hosted
|
||||
version: "2.2.1"
|
||||
sdks:
|
||||
dart: ">=2.7.0 <3.0.0"
|
||||
dart: ">=2.8.0 <3.0.0"
|
||||
flutter: ">=1.12.13+hotfix.5 <2.0.0"
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
# Label StoreMax
|
||||
# Version 2.0.8
|
||||
# Version 2.0.9
|
||||
#authors: - "Anthony Gordon"
|
||||
#documentation: https://woosignal.com/docs/app/ios/label-storemax
|
||||
#homepage: https://woosignal.com/
|
||||
@ -24,15 +24,15 @@ environment:
|
||||
sdk: ">=2.1.0 <3.0.0"
|
||||
|
||||
dependencies:
|
||||
woosignal: ^1.0.9
|
||||
woosignal_stripe: ^0.0.4
|
||||
woosignal: ^1.1.0
|
||||
woosignal_stripe: ^0.0.6
|
||||
razorpay_flutter: ^1.2.1
|
||||
wp_json_api: ^0.1.3
|
||||
wp_json_api: ^0.1.4
|
||||
shared_preferences: ^0.5.7+3
|
||||
cached_network_image: ^2.2.0+1
|
||||
page_transition: ^1.1.5
|
||||
package_info: ^0.4.0+16
|
||||
url_launcher: ^5.4.7
|
||||
url_launcher: ^5.4.11
|
||||
flutter_money_formatter: ^0.8.3
|
||||
platform_alert_dialog: ^1.0.0+2
|
||||
flutter_web_browser: ^0.11.0
|
||||
|
||||
@ -5,26 +5,4 @@
|
||||
// gestures. You can also use WidgetTester to find child widgets in the widget
|
||||
// tree, read text, and verify that the values of widget properties are correct.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
import 'package:label_storemax/main.dart';
|
||||
|
||||
void main() {
|
||||
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
|
||||
// Build our app and trigger a frame.
|
||||
await tester.pumpWidget(MaterialApp());
|
||||
|
||||
// Verify that our counter starts at 0.
|
||||
expect(find.text('0'), findsOneWidget);
|
||||
expect(find.text('1'), findsNothing);
|
||||
|
||||
// Tap the '+' icon and trigger a frame.
|
||||
await tester.tap(find.byIcon(Icons.add));
|
||||
await tester.pump();
|
||||
|
||||
// Verify that our counter has incremented.
|
||||
expect(find.text('0'), findsNothing);
|
||||
expect(find.text('1'), findsOneWidget);
|
||||
});
|
||||
}
|
||||
void main() {}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user