backup. before shop update
@@ -24,9 +24,10 @@ if (flutterVersionName == null) {
|
||||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'kotlin-android'
|
||||
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
|
||||
apply plugin: 'com.google.gms.google-services'
|
||||
|
||||
android {
|
||||
compileSdkVersion 29
|
||||
compileSdkVersion 30
|
||||
|
||||
sourceSets {
|
||||
main.java.srcDirs += 'src/main/kotlin'
|
||||
@@ -39,10 +40,11 @@ android {
|
||||
defaultConfig {
|
||||
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
|
||||
applicationId "us.minipos.flutter_wisetronic"
|
||||
minSdkVersion 16
|
||||
targetSdkVersion 29
|
||||
minSdkVersion 19
|
||||
targetSdkVersion 30
|
||||
versionCode flutterVersionCode.toInteger()
|
||||
versionName flutterVersionName
|
||||
multiDexEnabled true
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
@@ -60,4 +62,6 @@ flutter {
|
||||
|
||||
dependencies {
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||
implementation 'com.android.support:multidex:1.0.3'
|
||||
implementation 'com.google.firebase:firebase-messaging:21.0.1'
|
||||
}
|
||||
|
||||
39
android/app/google-services.json
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"project_info": {
|
||||
"project_number": "972052001940",
|
||||
"project_id": "wisetronicsite",
|
||||
"storage_bucket": "wisetronicsite.appspot.com"
|
||||
},
|
||||
"client": [
|
||||
{
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:972052001940:android:6c418edf0744da8d5c3081",
|
||||
"android_client_info": {
|
||||
"package_name": "us.minipos.flutter_wisetronic"
|
||||
}
|
||||
},
|
||||
"oauth_client": [
|
||||
{
|
||||
"client_id": "972052001940-95is9u4av26k6qag4aaq6fgqi716s1ap.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
],
|
||||
"api_key": [
|
||||
{
|
||||
"current_key": "AIzaSyCZoTVIxTKDaqoZz-aM0uVWKNMvc5nco0s"
|
||||
}
|
||||
],
|
||||
"services": {
|
||||
"appinvite_service": {
|
||||
"other_platform_oauth_client": [
|
||||
{
|
||||
"client_id": "972052001940-95is9u4av26k6qag4aaq6fgqi716s1ap.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"configuration_version": "1"
|
||||
}
|
||||
@@ -1,8 +1,20 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="us.minipos.flutter_wisetronic">
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
<application
|
||||
android:name=".Application"
|
||||
android:label="flutter_wisetronic"
|
||||
android:icon="@mipmap/ic_launcher">
|
||||
android:icon="@mipmap/launcher_icon">
|
||||
<provider
|
||||
android:name="com.pichillilorenzo.flutter_inappwebview.InAppWebViewFileProvider"
|
||||
android:authorities="${applicationId}.flutter_inappwebview.fileprovider"
|
||||
android:exported="false"
|
||||
android:grantUriPermissions="true">
|
||||
<meta-data
|
||||
android:name="android.support.FILE_PROVIDER_PATHS"
|
||||
android:resource="@xml/provider_paths" />
|
||||
</provider>
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:launchMode="singleTop"
|
||||
@@ -31,11 +43,25 @@
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<data
|
||||
android:scheme="stripesdk"
|
||||
android:host="3ds.stripesdk.io" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="FLUTTER_NOTIFICATION_CLICK" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<!-- Don't delete the meta-data below.
|
||||
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
|
||||
<meta-data
|
||||
android:name="flutterEmbedding"
|
||||
android:value="2" />
|
||||
<meta-data android:name="com.google.android.geo.API_KEY"
|
||||
android:value="AIzaSyA8BezbDC1M9Em7uzEIW4NCxXq0JZNL4ko" />
|
||||
</application>
|
||||
</manifest>
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package us.minipos.flutter_wisetronic
|
||||
|
||||
import io.flutter.app.FlutterApplication
|
||||
import io.flutter.plugin.common.PluginRegistry
|
||||
import io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin
|
||||
import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService
|
||||
|
||||
class Application : FlutterApplication(), PluginRegistry.PluginRegistrantCallback {
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
FlutterFirebaseMessagingService.setPluginRegistrant(this)
|
||||
}
|
||||
|
||||
override fun registerWith(registry: PluginRegistry?) {
|
||||
// GeneratedPluginRegistrant.registerWith(registry)
|
||||
FirebaseMessagingPlugin.registerWith(registry?.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,12 @@
|
||||
package us.minipos.flutter_wisetronic
|
||||
|
||||
import androidx.annotation.NonNull
|
||||
import io.flutter.embedding.android.FlutterActivity
|
||||
import io.flutter.embedding.engine.FlutterEngine
|
||||
import io.flutter.plugins.GeneratedPluginRegistrant
|
||||
|
||||
class MainActivity: FlutterActivity() {
|
||||
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
|
||||
GeneratedPluginRegistrant.registerWith(flutterEngine);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,8 +6,9 @@ buildscript {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.5.0'
|
||||
classpath 'com.android.tools.build:gradle:3.5.3'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
classpath 'com.google.gms:google-services:4.3.5'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
BIN
assets/images/apple_pay.png
Normal file
|
After Width: | Height: | Size: 9.3 KiB |
BIN
assets/images/denied.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
BIN
assets/images/google_pay.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
assets/images/group_number.png
Normal file
|
After Width: | Height: | Size: 73 KiB |
BIN
assets/images/icon.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
assets/images/master.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
assets/images/under_renovation.png
Normal file
|
After Width: | Height: | Size: 8.2 KiB |
BIN
assets/images/visa.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
assets/tessdata/OCRB.traineddata
Normal file
BIN
assets/tessdata/chi_sim.traineddata
Normal file
BIN
assets/tessdata/chi_sim_vert.traineddata
Normal file
BIN
assets/tessdata/chi_tra.traineddata
Normal file
BIN
assets/tessdata/chi_tra_vert.traineddata
Normal file
BIN
assets/tessdata/eng.traineddata
Normal file
BIN
assets/tessdata/financial.traineddata
Normal file
BIN
assets/tessdata/pdf.ttf
Normal file
12
assets/tessdata_config.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"files": [
|
||||
"eng.traineddata",
|
||||
"OCRB.traineddata",
|
||||
"pdf.ttf",
|
||||
"financial.traineddata",
|
||||
"chi_sim.traineddata",
|
||||
"chi_sim_vert.traineddata",
|
||||
"chi_tra.traineddata",
|
||||
"chi_tra_vert.traineddata"
|
||||
]
|
||||
}
|
||||
61
build.sh
Executable file
@@ -0,0 +1,61 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
function build_all() {
|
||||
echo "1. Build Web"
|
||||
flutter build web --dart-define=FLUTTER_WEB_USE_EXPERIMENTAL_CANVAS_TEXT=true --web-renderer html
|
||||
echo "2.1 Build Android APK"
|
||||
flutter build apk --release --verbose
|
||||
echo "2.2 Build Android APK"
|
||||
flutter build apk --split-per-abi
|
||||
echo "2.3 Build Android AppBundle"
|
||||
flutter build appbundle
|
||||
echo "3. Build iOS"
|
||||
flutter build ios --release
|
||||
echo "All done!"
|
||||
exit
|
||||
}
|
||||
|
||||
function build_web() {
|
||||
echo "<<< Build Web >>>"
|
||||
flutter build web --dart-define=FLUTTER_WEB_USE_EXPERIMENTAL_CANVAS_TEXT=true --web-renderer html
|
||||
echo "Done!"
|
||||
exit
|
||||
}
|
||||
|
||||
function build_android() {
|
||||
echo "1 Build Android APK"
|
||||
flutter build apk --release --verbose
|
||||
echo "2 Build Android APK"
|
||||
flutter build apk --split-per-abi
|
||||
echo "3 Build Android AppBundle"
|
||||
flutter build appbundle
|
||||
echo "Done!"
|
||||
exit
|
||||
}
|
||||
|
||||
function build_ios() {
|
||||
echo "<<< Build iOS >>>"
|
||||
flutter build ios --release
|
||||
echo "Done!"
|
||||
}
|
||||
|
||||
PS3='Please choice: '
|
||||
options=("Build All" "Build Web" "Build Android" "Build iOS")
|
||||
select opt in "${options[@]}"; do
|
||||
case $opt in
|
||||
"Build All")
|
||||
build_all
|
||||
;;
|
||||
"Build Web")
|
||||
build_web
|
||||
;;
|
||||
"Build Android")
|
||||
build_android
|
||||
;;
|
||||
"Build iOS")
|
||||
build_ios
|
||||
;;
|
||||
*) echo "Invalid option $REPLY";;
|
||||
esac
|
||||
done
|
||||
@@ -1,2 +1,3 @@
|
||||
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
|
||||
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
|
||||
#include "Generated.xcconfig"
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
|
||||
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
|
||||
#include "Generated.xcconfig"
|
||||
|
||||
@@ -492,4 +492,4 @@
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 97C146E61CF9000F007C117D /* Project object */;
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import Flutter
|
||||
_ application: UIApplication,
|
||||
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
|
||||
) -> Bool {
|
||||
GMSServices.provideAPIKey("AIzaSyA8BezbDC1M9Em7uzEIW4NCxXq0JZNL4ko")
|
||||
GeneratedPluginRegistrant.register(with: self)
|
||||
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 564 B After Width: | Height: | Size: 616 B |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 830 B |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 5.1 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 4.4 KiB |
@@ -41,5 +41,20 @@
|
||||
</array>
|
||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||
<false/>
|
||||
<key>io.flutter.embedded_views_preview</key>
|
||||
<true/>
|
||||
<key>CFBundleURLTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
<key>CFBundleURLName</key>
|
||||
<string>3ds.stripesdk.io</string>
|
||||
<key>CFBundleURLSchemes</key>
|
||||
<array>
|
||||
<string>stripesdk</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
|
||||
class Constants {
|
||||
|
||||
static const bool ENABLE_NATIVE_PAY = false;
|
||||
|
||||
static const int FONT_GOOGLE = 0xe800;
|
||||
static const int FONT_ALEXA = 0xe801;
|
||||
static const int FONT_APPLE = 0xe802;
|
||||
@@ -16,8 +19,49 @@ class Constants {
|
||||
static const int FONT_TOPTONS = 0xe813;
|
||||
|
||||
static const bool DEBUG = false;
|
||||
static const BASE_API_URL = 'https://api.minipos.us/';
|
||||
static const int BUSINESS_ID = 310; //310, 680, 357(notjust), 651(kiosk);
|
||||
static const String APP_TITLE = 'MiniPOS Ponit of Sale System';
|
||||
static const String BASE_API_URL = 'https://api.minipos.us/'; //'https://sandbox.minipos.us/', 'https://api.minipos.us/'
|
||||
static const String TUTORIAL_URL = 'https://archive.wisetronic.com/wisetronic-products-documentation/';
|
||||
static const String API_SECRET = 'pei326sami1223HellowWorldabcdEd';
|
||||
static const KEY_USER_ID = 'user_id';
|
||||
static const KEY_ACCESS_TOKEN = 'access_token';
|
||||
static const KEY_CARTINFOS = "cart_infos";
|
||||
static const ORDERS_PER_PAGE = 10;
|
||||
|
||||
static const KEY_LAST_VISIT = 'last-visits';
|
||||
|
||||
static const int TICKET_PER_PAGE_MOBILE = 20;
|
||||
static const int TICKET_PER_PAGE_DESKTOP = 40;
|
||||
static const int BLOG_PER_PAGE_MOBILE = 20;
|
||||
static const int BLOG_PER_PAGE_DESKTOP = 30;
|
||||
|
||||
static const double BREADCRUMB_HEIGHT = 38;
|
||||
|
||||
static const int HOT_SALE_ID = -1;
|
||||
static const int FEATURED_PRODUCT_ID = -2;
|
||||
|
||||
static const String PAYMENT_METHOD_PAY_ON_DELIVERY = 'POD';
|
||||
static const String PAYMENT_METHOD_CODE_CHASE = 'chase';
|
||||
static const String PAYMENT_METHOD_CODE_SQUARE = 'web-credit-card';
|
||||
static const String PAYMENT_METHOD_CODE_OTT_ALIPAY = 'ALIPAY';
|
||||
static const String PAYMENT_METHOD_CODE_OTT_WECHATPAY = 'WECHATPAY';
|
||||
static const String PAYMENT_METHOD_CODE_PAYPAL = 'paypal';
|
||||
static const String PAYMENT_METHOD_CODE_STRIPE = 'stripe';
|
||||
static const String PAYMENT_METHOD_CODE_POD = 'payondeliverypickup';
|
||||
static const String PAYMENT_METHOD_NATIVE_PAY = 'native_pay';
|
||||
|
||||
static const String STRIPE_STATUS_REQUIRES_CONFIRMATION = 'requires_confirmation';
|
||||
static const String STRIPE_CLIENT_SECRET = 'client_secret';
|
||||
static const String STRIPE_STATUS_SUCCEDED = 'succeeded';
|
||||
|
||||
static const int STATUS_PENDING = 0;
|
||||
static const int STATUS_ACCEPT = 1;
|
||||
static const int STATUS_PROCESSING = 2;
|
||||
static const int STATUS_COMPLETE = 5;
|
||||
static const int STATUS_CANCELLED = -1;
|
||||
|
||||
static const String PAYMENT_STATUS_UNPAID = 'UNPAID';
|
||||
static const String PAYMENT_STATUS_PAID = 'PAID';
|
||||
static const String PAYMENT_STATUS_PARTIALPAID = 'PARTIALPAID';
|
||||
}
|
||||
31
lib/dialog/image_viewer.dart
Normal file
@@ -0,0 +1,31 @@
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:photo_view/photo_view.dart';
|
||||
|
||||
class ImageViewer extends StatefulWidget {
|
||||
final Key key;
|
||||
final ImageProvider imageProvider;
|
||||
|
||||
ImageViewer(this.imageProvider, {this.key}) :
|
||||
super(key: key);
|
||||
|
||||
@override
|
||||
State<StatefulWidget> createState() {
|
||||
return ImageViewState();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class ImageViewState extends State<ImageViewer> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
width: MediaQuery.of(context).size.width - 100.0,
|
||||
height: MediaQuery.of(context).size.height - 120.0,
|
||||
child: PhotoView(
|
||||
imageProvider: widget.imageProvider,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
52
lib/dialog/logout_dialog.dart
Normal file
@@ -0,0 +1,52 @@
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import '../constants.dart';
|
||||
import '../events/eventbus.dart';
|
||||
import '../events/events.dart';
|
||||
import '../generated/l10n.dart';
|
||||
import '../routes.dart';
|
||||
import '../store/actions.dart';
|
||||
import '../store/store.dart';
|
||||
import '../utils/utils.dart';
|
||||
|
||||
AlertDialog logoutDialog(BuildContext context) {
|
||||
return AlertDialog(
|
||||
title: Text(S
|
||||
.of(context)
|
||||
.warning),
|
||||
content: Text(S
|
||||
.of(context)
|
||||
.are_you_sure_to_logout),
|
||||
actions: <Widget>[
|
||||
FlatButton(
|
||||
child: Text(S
|
||||
.of(context)
|
||||
.cancel),
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
),
|
||||
FlatButton(
|
||||
child: Text(S
|
||||
.of(context)
|
||||
.yes_i_am_sure),
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop();
|
||||
Utils.getBox().then((box) {
|
||||
box.delete(Constants.KEY_USER_ID);
|
||||
box.delete(
|
||||
Constants.KEY_ACCESS_TOKEN);
|
||||
store.dispatch(
|
||||
new UpdateCurrentUser(null));
|
||||
eventBus.fire(
|
||||
new OnCurrentUserUpdated());
|
||||
Routes.router.navigateTo(
|
||||
context, '/', replace: true,
|
||||
clearStack: true);
|
||||
});
|
||||
},
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
@@ -1,4 +1,123 @@
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import '../models/business.dart';
|
||||
import '../models/comment.dart';
|
||||
import '../models/position.dart';
|
||||
import '../models/product.dart';
|
||||
|
||||
class OpenDrawer {
|
||||
|
||||
}
|
||||
|
||||
class OnGetCurrentUserFailed {
|
||||
dynamic error;
|
||||
OnGetCurrentUserFailed(this.error);
|
||||
}
|
||||
|
||||
class OnCurrentUserUpdated {
|
||||
OnCurrentUserUpdated();
|
||||
}
|
||||
|
||||
class OnProgressEvent {
|
||||
bool showProgress;
|
||||
double progress;
|
||||
OnProgressEvent(this.showProgress, this.progress);
|
||||
}
|
||||
|
||||
class OnUploadCommentImageProgressEvent {
|
||||
bool showProgress;
|
||||
double progress;
|
||||
OnUploadCommentImageProgressEvent(this.showProgress, this.progress);
|
||||
}
|
||||
|
||||
class OnCommentUpdatedEvent {
|
||||
Comment comment;
|
||||
OnCommentUpdatedEvent(this.comment);
|
||||
}
|
||||
|
||||
class OnAddressesUpdated {
|
||||
OnAddressesUpdated();
|
||||
}
|
||||
|
||||
class OnTicketsUpdated {
|
||||
OnTicketsUpdated();
|
||||
}
|
||||
|
||||
class OnUpdateLocatedAddressSuccess {
|
||||
OnUpdateLocatedAddressSuccess();
|
||||
}
|
||||
|
||||
class OnGotDeepLinkUri {
|
||||
Uri uri;
|
||||
OnGotDeepLinkUri(this.uri);
|
||||
}
|
||||
|
||||
class OnUploadImageProgressEvent {
|
||||
int id;
|
||||
bool showProgress;
|
||||
double progress;
|
||||
OnUploadImageProgressEvent(this.id, this.showProgress, this.progress);
|
||||
}
|
||||
|
||||
class OnSubmitProgressEvent {
|
||||
bool showProgress;
|
||||
double progress;
|
||||
OnSubmitProgressEvent(this.showProgress, this.progress);
|
||||
}
|
||||
|
||||
class OnCartInfoUpdated {
|
||||
OnCartInfoUpdated();
|
||||
}
|
||||
|
||||
class OnAttributePageChanged {
|
||||
int index;
|
||||
OnAttributePageChanged(this.index);
|
||||
}
|
||||
|
||||
class OnAttributeSelectionsChanged {
|
||||
Map<String, dynamic> selections;
|
||||
OnAttributeSelectionsChanged(this.selections);
|
||||
}
|
||||
|
||||
class OnProductWillAddToCart {
|
||||
Product product;
|
||||
Map<String, dynamic> selections;
|
||||
double price;
|
||||
String description;
|
||||
Business business;
|
||||
GlobalKey buttonKey;
|
||||
OnProductWillAddToCart(this.product, this.selections, this.price, this.description, this.business, {this.buttonKey});
|
||||
}
|
||||
|
||||
class OnProductWillRemoveFromCart {
|
||||
Product product;
|
||||
int productListIndex;
|
||||
Business business;
|
||||
OnProductWillRemoveFromCart(this.product, this.productListIndex, this.business);
|
||||
}
|
||||
|
||||
class OnOrderUpdated {
|
||||
OnOrderUpdated();
|
||||
}
|
||||
|
||||
class SubscribeToTopic {
|
||||
String topic;
|
||||
SubscribeToTopic(this.topic);
|
||||
}
|
||||
|
||||
class UnSubscribeToTopic {
|
||||
String topic;
|
||||
UnSubscribeToTopic(this.topic);
|
||||
}
|
||||
|
||||
class GetCurrentPositionSuccess {
|
||||
Position position;
|
||||
bool getAddressFromServer = true;
|
||||
GetCurrentPositionSuccess(this.position, this.getAddressFromServer);
|
||||
}
|
||||
|
||||
class GetCurrentPositionFailed {
|
||||
Exception exception;
|
||||
GetCurrentPositionFailed(this.exception);
|
||||
}
|
||||
@@ -19,41 +19,465 @@ typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
|
||||
class MessageLookup extends MessageLookupByLibrary {
|
||||
String get localeName => 'en';
|
||||
|
||||
static m0(oss) => "Download at ${oss}";
|
||||
static m0(qty) => "and ${qty} items more";
|
||||
|
||||
static m1(value) => "Available for order over \$${value}";
|
||||
|
||||
static m2(hour) => "Order now and delivery start at ${hour}:00.";
|
||||
|
||||
static m3(optionName) => "Multiple choice ${optionName}";
|
||||
|
||||
static m4(km, time) => "The delivery guy are ${km} away from the customer, and it will take about ${time} to deliver.";
|
||||
|
||||
static m5(shippingfee) => "Delivery fee ${shippingfee}+";
|
||||
|
||||
static m6(length, width, height) => "Dimentions: ${length}(L)x${width}(W)x${height}(H)";
|
||||
|
||||
static m7(discount) => "-\$${discount}";
|
||||
|
||||
static m8(oss) => "Download at ${oss}";
|
||||
|
||||
static m9(expirationDate) => "Expires on ${expirationDate}";
|
||||
|
||||
static m10(mon, yer) => "Exp: ${mon}/${yer}";
|
||||
|
||||
static m11(name, rate) => "${name}(${rate}%)";
|
||||
|
||||
static m12(num) => "${num} follow-ups";
|
||||
|
||||
static m13(second) => "Retry after ${second}s";
|
||||
|
||||
static m14(hours) => "${Intl.plural(hours, one: '1 hr', other: '${hours} hrs')}";
|
||||
|
||||
static m15(minamount) => "\$${minamount}+";
|
||||
|
||||
static m16(shipfee) => "Delivery \$${shipfee}+";
|
||||
|
||||
static m17(minutes) => "${Intl.plural(minutes, one: '1 min', other: '${minutes} mins')}";
|
||||
|
||||
static m18(minprice) => "${minprice} more";
|
||||
|
||||
static m19(amount) => "Pay \$${amount} now";
|
||||
|
||||
static m20(method) => "Pay with ${method}";
|
||||
|
||||
static m21(mobile) => "Payment verification code has been sent to your mobile phone ${mobile}. Please enter the verification code below.";
|
||||
|
||||
static m22(discount) => "${discount}%off";
|
||||
|
||||
static m23(amount, discount) => "-\$${amount}(${discount}%off)";
|
||||
|
||||
static m24(optionName) => "Please choice ${optionName}.";
|
||||
|
||||
static m25(sold_qty) => " ${sold_qty} sold/mo";
|
||||
|
||||
static m26(subtotal) => "Subtotal: ${subtotal}";
|
||||
|
||||
static m27(num) => "Table#: ${num}";
|
||||
|
||||
static m28(num) => "Ticket #${num}";
|
||||
|
||||
static m29(time) => "Today ${time}";
|
||||
|
||||
static m30(time) => "Tomorrow ${time}";
|
||||
|
||||
static m31(weight) => "Weight: ${weight}";
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
static _notInlinedMessages(_) => <String, Function> {
|
||||
"about" : MessageLookupByLibrary.simpleMessage("About"),
|
||||
"about_us" : MessageLookupByLibrary.simpleMessage("About us"),
|
||||
"account_binding" : MessageLookupByLibrary.simpleMessage("Account binding"),
|
||||
"add_credit_card" : MessageLookupByLibrary.simpleMessage("Add credit card"),
|
||||
"add_new_address" : MessageLookupByLibrary.simpleMessage("Add new address"),
|
||||
"add_new_ticket" : MessageLookupByLibrary.simpleMessage("Create a new ticket"),
|
||||
"add_new_ticket_desc" : MessageLookupByLibrary.simpleMessage("Please enter your question."),
|
||||
"add_pictures" : MessageLookupByLibrary.simpleMessage("Add pictures"),
|
||||
"add_to_basket" : MessageLookupByLibrary.simpleMessage("Add to basket"),
|
||||
"address" : MessageLookupByLibrary.simpleMessage("Address"),
|
||||
"after_renewed" : MessageLookupByLibrary.simpleMessage("After renewal"),
|
||||
"alipay" : MessageLookupByLibrary.simpleMessage("Alipay"),
|
||||
"amount_not_meet" : MessageLookupByLibrary.simpleMessage("The order amount does not meet the minimum requirements."),
|
||||
"and_more_item_token" : m0,
|
||||
"are_you_sure_to_cancel_the_order" : MessageLookupByLibrary.simpleMessage("Are you sure you want to cancel the order?"),
|
||||
"are_you_sure_to_delete_the_address" : MessageLookupByLibrary.simpleMessage("Are you sure you want to delete the address?"),
|
||||
"are_you_sure_to_empty_basket" : MessageLookupByLibrary.simpleMessage("Are you sure you want to empty the basket?"),
|
||||
"are_you_sure_to_logout" : MessageLookupByLibrary.simpleMessage("Are you sure you want to logout?"),
|
||||
"are_you_sure_to_remove_the_card" : MessageLookupByLibrary.simpleMessage("Are you srue you want to remove the credit card?"),
|
||||
"are_you_sure_to_remove_the_item" : MessageLookupByLibrary.simpleMessage("Are you sure you want to remove the item?"),
|
||||
"are_you_sure_to_remove_the_picture" : MessageLookupByLibrary.simpleMessage("Are you sure you want to remove the picture?"),
|
||||
"attach_pictures" : MessageLookupByLibrary.simpleMessage("Attach pictures"),
|
||||
"attach_pictures_desc" : MessageLookupByLibrary.simpleMessage("Upload pictures(screen shot) to make your question clearer."),
|
||||
"available_for_order_over_token" : m1,
|
||||
"avatar" : MessageLookupByLibrary.simpleMessage("Avatar"),
|
||||
"back" : MessageLookupByLibrary.simpleMessage("Back"),
|
||||
"basic_info" : MessageLookupByLibrary.simpleMessage("Basic info."),
|
||||
"blog" : MessageLookupByLibrary.simpleMessage("Blog"),
|
||||
"book_now_delivery_later_token" : m2,
|
||||
"business_card" : MessageLookupByLibrary.simpleMessage("Business card"),
|
||||
"business_cooperation" : MessageLookupByLibrary.simpleMessage("Business cooperation"),
|
||||
"by_email" : MessageLookupByLibrary.simpleMessage("By Emails"),
|
||||
"by_phone" : MessageLookupByLibrary.simpleMessage("By phone"),
|
||||
"camera" : MessageLookupByLibrary.simpleMessage("Camera"),
|
||||
"canada_post" : MessageLookupByLibrary.simpleMessage("Canada Post"),
|
||||
"canada_post_delivery" : MessageLookupByLibrary.simpleMessage("Canada Post delivery"),
|
||||
"cancel" : MessageLookupByLibrary.simpleMessage("Cancel"),
|
||||
"cancel_order" : MessageLookupByLibrary.simpleMessage("Cancel order"),
|
||||
"change_email" : MessageLookupByLibrary.simpleMessage("Change email address"),
|
||||
"change_email_desc" : MessageLookupByLibrary.simpleMessage("Enter your new Email, and then click \'Get code\' button to get the validation code."),
|
||||
"change_mobile" : MessageLookupByLibrary.simpleMessage("Change mobile number"),
|
||||
"change_mobile_desc" : MessageLookupByLibrary.simpleMessage("Enter your new mobile number, and then click \'Get code\' button to get the validation code."),
|
||||
"change_nickname" : MessageLookupByLibrary.simpleMessage("Change nickname"),
|
||||
"change_password" : MessageLookupByLibrary.simpleMessage("Change password"),
|
||||
"change_password_desc" : MessageLookupByLibrary.simpleMessage("Please enter the old password and your desired new password."),
|
||||
"check_option_is_optional" : MessageLookupByLibrary.simpleMessage("Optional. You can tap Next without selection."),
|
||||
"check_option_is_required" : MessageLookupByLibrary.simpleMessage("Option is required. Select at lease an option then tap Next."),
|
||||
"check_option_select_token" : m3,
|
||||
"checkout" : MessageLookupByLibrary.simpleMessage("Check out"),
|
||||
"checkout_no_deliver" : MessageLookupByLibrary.simpleMessage("We don\'t deliver at this time."),
|
||||
"chinese_simplified" : MessageLookupByLibrary.simpleMessage("Chinese simplified"),
|
||||
"chinese_traditional" : MessageLookupByLibrary.simpleMessage("Chinese tranditional"),
|
||||
"choose_a_shipping_rate" : MessageLookupByLibrary.simpleMessage("Choose a shipping rate"),
|
||||
"city" : MessageLookupByLibrary.simpleMessage("City"),
|
||||
"city_is_required" : MessageLookupByLibrary.simpleMessage("City is required"),
|
||||
"close" : MessageLookupByLibrary.simpleMessage("Close"),
|
||||
"closed" : MessageLookupByLibrary.simpleMessage("Closed"),
|
||||
"comment" : MessageLookupByLibrary.simpleMessage("Comment"),
|
||||
"comment_empty" : MessageLookupByLibrary.simpleMessage("Please type your comment."),
|
||||
"comments" : MessageLookupByLibrary.simpleMessage("Comments"),
|
||||
"confirm_order" : MessageLookupByLibrary.simpleMessage("Order confirmation"),
|
||||
"confirmation" : MessageLookupByLibrary.simpleMessage("Confirmation"),
|
||||
"contact_name" : MessageLookupByLibrary.simpleMessage("Contact name"),
|
||||
"contact_name_is_required" : MessageLookupByLibrary.simpleMessage("Contact name is required"),
|
||||
"contact_us" : MessageLookupByLibrary.simpleMessage("Contact us"),
|
||||
"copy" : MessageLookupByLibrary.simpleMessage("Copy"),
|
||||
"coupons" : MessageLookupByLibrary.simpleMessage("Coupons"),
|
||||
"credit_card" : MessageLookupByLibrary.simpleMessage("Credit card"),
|
||||
"credit_coupon" : MessageLookupByLibrary.simpleMessage("Credit/Coupon"),
|
||||
"credit_debit_card" : MessageLookupByLibrary.simpleMessage("Credit or debit card"),
|
||||
"current_password_is_required" : MessageLookupByLibrary.simpleMessage("Current password is required."),
|
||||
"current_plan" : MessageLookupByLibrary.simpleMessage("Current plan"),
|
||||
"customer" : MessageLookupByLibrary.simpleMessage("Customer"),
|
||||
"delete" : MessageLookupByLibrary.simpleMessage("Delete"),
|
||||
"delivery" : MessageLookupByLibrary.simpleMessage("Delivery"),
|
||||
"delivery_address" : MessageLookupByLibrary.simpleMessage("Delivery address"),
|
||||
"delivery_distance_token" : m4,
|
||||
"delivery_fee" : m5,
|
||||
"delivery_guy" : MessageLookupByLibrary.simpleMessage("Delivery guy"),
|
||||
"delivery_info" : MessageLookupByLibrary.simpleMessage("Delivery Info."),
|
||||
"delivery_method" : MessageLookupByLibrary.simpleMessage("Delivery method"),
|
||||
"delivery_now" : MessageLookupByLibrary.simpleMessage("Delivery ASAP"),
|
||||
"delivery_unavailable" : MessageLookupByLibrary.simpleMessage("Delivery time"),
|
||||
"detail" : MessageLookupByLibrary.simpleMessage("Detail"),
|
||||
"developer_of" : MessageLookupByLibrary.simpleMessage("Developers of"),
|
||||
"dimentions_token" : m6,
|
||||
"discount_amount_token" : m7,
|
||||
"document_langage" : MessageLookupByLibrary.simpleMessage("Document language"),
|
||||
"document_type" : MessageLookupByLibrary.simpleMessage("Document type"),
|
||||
"dont_use" : MessageLookupByLibrary.simpleMessage("Do not redeem"),
|
||||
"download" : MessageLookupByLibrary.simpleMessage("Download"),
|
||||
"download_with_token" : m0,
|
||||
"download_with_token" : m8,
|
||||
"downloads" : MessageLookupByLibrary.simpleMessage("Downloads"),
|
||||
"edit_address" : MessageLookupByLibrary.simpleMessage("Edit address"),
|
||||
"email" : MessageLookupByLibrary.simpleMessage("Email"),
|
||||
"email_is_not_valid" : MessageLookupByLibrary.simpleMessage("Email is not valid"),
|
||||
"email_is_required" : MessageLookupByLibrary.simpleMessage("Email is required"),
|
||||
"email_needed" : MessageLookupByLibrary.simpleMessage("Email needed"),
|
||||
"empty_address_change_keyword" : MessageLookupByLibrary.simpleMessage("No address found. Tap here to skip address lookup."),
|
||||
"empty_basket" : MessageLookupByLibrary.simpleMessage("Empty basket"),
|
||||
"empty_result_change_keyword" : MessageLookupByLibrary.simpleMessage("No data found, please change keyword and try again."),
|
||||
"end_of_the_list" : MessageLookupByLibrary.simpleMessage("End of the list"),
|
||||
"english" : MessageLookupByLibrary.simpleMessage("English"),
|
||||
"enter_coupon_code" : MessageLookupByLibrary.simpleMessage("Enter coupon code"),
|
||||
"enter_delivery_address" : MessageLookupByLibrary.simpleMessage("Enter delivery address"),
|
||||
"enter_mobile_or_email" : MessageLookupByLibrary.simpleMessage("Enter mobile or email"),
|
||||
"enter_new_nickname" : MessageLookupByLibrary.simpleMessage("Enter new nickname"),
|
||||
"enter_product_keyword" : MessageLookupByLibrary.simpleMessage("Enter product keyword"),
|
||||
"error" : MessageLookupByLibrary.simpleMessage("Error"),
|
||||
"error_read_file" : MessageLookupByLibrary.simpleMessage("Error occurred while reading the file."),
|
||||
"expiration_date" : MessageLookupByLibrary.simpleMessage("Expiration date"),
|
||||
"expiration_date_token" : m9,
|
||||
"expire_token" : m10,
|
||||
"expired_at" : MessageLookupByLibrary.simpleMessage("Expired at"),
|
||||
"extra_fee_token" : m11,
|
||||
"fax" : MessageLookupByLibrary.simpleMessage("Fax"),
|
||||
"feature_not_available_web" : MessageLookupByLibrary.simpleMessage("This feature is not available on the web. Please install the App version."),
|
||||
"featured_product" : MessageLookupByLibrary.simpleMessage("Featured"),
|
||||
"finish" : MessageLookupByLibrary.simpleMessage("Finish"),
|
||||
"follow_ups" : MessageLookupByLibrary.simpleMessage("Follow ups"),
|
||||
"followups_token" : m12,
|
||||
"forgot_password" : MessageLookupByLibrary.simpleMessage("Forgot password"),
|
||||
"forgot_password_description" : MessageLookupByLibrary.simpleMessage("Enter the Email or mobile number you used when registering, and then click the \'Get code\' button to get the validation code."),
|
||||
"forgot_password_question" : MessageLookupByLibrary.simpleMessage("Forgot password?"),
|
||||
"fri" : MessageLookupByLibrary.simpleMessage("Fri"),
|
||||
"friday" : MessageLookupByLibrary.simpleMessage("Friday"),
|
||||
"from_camera" : MessageLookupByLibrary.simpleMessage("From camera"),
|
||||
"from_gallery" : MessageLookupByLibrary.simpleMessage("From gallery"),
|
||||
"gallery" : MessageLookupByLibrary.simpleMessage("Gallery"),
|
||||
"general_coupon" : MessageLookupByLibrary.simpleMessage("General coupon"),
|
||||
"get_code" : MessageLookupByLibrary.simpleMessage("Get code"),
|
||||
"get_code_again" : MessageLookupByLibrary.simpleMessage("Get code again"),
|
||||
"get_code_token" : m13,
|
||||
"get_coupon" : MessageLookupByLibrary.simpleMessage("Get coupon"),
|
||||
"get_picture" : MessageLookupByLibrary.simpleMessage("Get picture"),
|
||||
"get_picture_from" : MessageLookupByLibrary.simpleMessage("Get picture from..."),
|
||||
"group_license_renewal" : MessageLookupByLibrary.simpleMessage("Group Lisence Renewal"),
|
||||
"group_number" : MessageLookupByLibrary.simpleMessage("Group number"),
|
||||
"group_number_can_be_found" : MessageLookupByLibrary.simpleMessage("Group number can be found..."),
|
||||
"home" : MessageLookupByLibrary.simpleMessage("Home"),
|
||||
"hot_sale" : MessageLookupByLibrary.simpleMessage("Hot sale"),
|
||||
"hour_token" : m14,
|
||||
"igoshow" : MessageLookupByLibrary.simpleMessage("iGoShow"),
|
||||
"includes" : MessageLookupByLibrary.simpleMessage("Includes"),
|
||||
"information" : MessageLookupByLibrary.simpleMessage("Information"),
|
||||
"input_your_comment" : MessageLookupByLibrary.simpleMessage("Input your comment"),
|
||||
"install_in_store" : MessageLookupByLibrary.simpleMessage("Install in store"),
|
||||
"learn_more" : MessageLookupByLibrary.simpleMessage("Learn more..."),
|
||||
"learn_more_about_igoshow" : MessageLookupByLibrary.simpleMessage("Learn more about iGoShow"),
|
||||
"learn_more_about_minipos" : MessageLookupByLibrary.simpleMessage("Learn more about MiniPOS"),
|
||||
"license_agreement" : MessageLookupByLibrary.simpleMessage("License agreement"),
|
||||
"light_tase" : MessageLookupByLibrary.simpleMessage("Light tase"),
|
||||
"load_failed_retry" : MessageLookupByLibrary.simpleMessage("Load failed, please retry"),
|
||||
"loading" : MessageLookupByLibrary.simpleMessage("Loading..."),
|
||||
"loading_please_wait" : MessageLookupByLibrary.simpleMessage("Loading, please wait..."),
|
||||
"login" : MessageLookupByLibrary.simpleMessage("Login"),
|
||||
"login_instruction" : MessageLookupByLibrary.simpleMessage("If you have already registered an account, please use the following form to login.\nIf you are a MiniOffice user, you can directly enter your MiniOffice username and password to login."),
|
||||
"logout" : MessageLookupByLibrary.simpleMessage("Logout"),
|
||||
"main_content_1" : MessageLookupByLibrary.simpleMessage("Since 1999, we have been committed to developing a complete and powerful sales system, helping thousands of small businesses handle sales smoothly. Currently we have two main products."),
|
||||
"me" : MessageLookupByLibrary.simpleMessage("Me"),
|
||||
"min_order_amount_token" : m15,
|
||||
"min_shipping_fee" : m16,
|
||||
"minipos" : MessageLookupByLibrary.simpleMessage("MiniPOS"),
|
||||
"minute_token" : m17,
|
||||
"mobile_email_username" : MessageLookupByLibrary.simpleMessage("Mobile, Email or MiniOffice username"),
|
||||
"mobile_is_required" : MessageLookupByLibrary.simpleMessage("Mobile is required"),
|
||||
"mobile_number" : MessageLookupByLibrary.simpleMessage("Mobile number"),
|
||||
"mobile_or_email" : MessageLookupByLibrary.simpleMessage("Mobile or email"),
|
||||
"mobile_or_email_is_required" : MessageLookupByLibrary.simpleMessage("Mobile or email is required"),
|
||||
"mobile_phone_number" : MessageLookupByLibrary.simpleMessage("Mobile number"),
|
||||
"mobile_phone_number_is_required" : MessageLookupByLibrary.simpleMessage("Mobile number is required"),
|
||||
"mon" : MessageLookupByLibrary.simpleMessage("Mon"),
|
||||
"monday" : MessageLookupByLibrary.simpleMessage("Monday"),
|
||||
"mr" : MessageLookupByLibrary.simpleMessage("Mr."),
|
||||
"ms" : MessageLookupByLibrary.simpleMessage("Ms."),
|
||||
"my_addresses" : MessageLookupByLibrary.simpleMessage("My addresses"),
|
||||
"my_cards" : MessageLookupByLibrary.simpleMessage("My cards"),
|
||||
"my_favorites" : MessageLookupByLibrary.simpleMessage("My favorites"),
|
||||
"my_orders" : MessageLookupByLibrary.simpleMessage("My orders"),
|
||||
"my_support" : MessageLookupByLibrary.simpleMessage("My support"),
|
||||
"navigation" : MessageLookupByLibrary.simpleMessage("Navigation"),
|
||||
"new_address" : MessageLookupByLibrary.simpleMessage("New address"),
|
||||
"new_comment" : MessageLookupByLibrary.simpleMessage("New comment"),
|
||||
"new_ticket" : MessageLookupByLibrary.simpleMessage("New ticket"),
|
||||
"new_user_question" : MessageLookupByLibrary.simpleMessage("New user?"),
|
||||
"next" : MessageLookupByLibrary.simpleMessage("Next"),
|
||||
"nick_name" : MessageLookupByLibrary.simpleMessage("Nick name"),
|
||||
"nickname_is_required" : MessageLookupByLibrary.simpleMessage("Nickname is required"),
|
||||
"no" : MessageLookupByLibrary.simpleMessage("No"),
|
||||
"no_address_yet" : MessageLookupByLibrary.simpleMessage("You have not entered any address."),
|
||||
"no_blog_yet" : MessageLookupByLibrary.simpleMessage("There is no blog to show yet."),
|
||||
"no_comments_yet" : MessageLookupByLibrary.simpleMessage("No comments yet"),
|
||||
"no_coupon_available" : MessageLookupByLibrary.simpleMessage("No coupon available"),
|
||||
"no_delivery_method" : MessageLookupByLibrary.simpleMessage("No shipping method available."),
|
||||
"no_expiration" : MessageLookupByLibrary.simpleMessage("No expiration"),
|
||||
"no_instance_delivery_desc" : MessageLookupByLibrary.simpleMessage("Tracking information will be provided when available."),
|
||||
"no_more_record" : MessageLookupByLibrary.simpleMessage("No more record"),
|
||||
"no_onion" : MessageLookupByLibrary.simpleMessage("No onion"),
|
||||
"no_pickle" : MessageLookupByLibrary.simpleMessage("No pickle"),
|
||||
"no_restriction" : MessageLookupByLibrary.simpleMessage("No restriction"),
|
||||
"no_spicy" : MessageLookupByLibrary.simpleMessage("No spicy"),
|
||||
"no_ticket_yet" : MessageLookupByLibrary.simpleMessage("There is no ticket yet. If you have any question/issue please tap the plus icon above to create a ticket."),
|
||||
"not_binding" : MessageLookupByLibrary.simpleMessage("Not binding"),
|
||||
"number_of_people" : MessageLookupByLibrary.simpleMessage("Number of people"),
|
||||
"ocr_scan" : MessageLookupByLibrary.simpleMessage("OCR scan"),
|
||||
"ok" : MessageLookupByLibrary.simpleMessage("OK"),
|
||||
"old_password" : MessageLookupByLibrary.simpleMessage("Old password"),
|
||||
"online_payment" : MessageLookupByLibrary.simpleMessage("Online payment"),
|
||||
"optional_information" : MessageLookupByLibrary.simpleMessage("Optional Info."),
|
||||
"order_acceipt" : MessageLookupByLibrary.simpleMessage("Accept"),
|
||||
"order_again" : MessageLookupByLibrary.simpleMessage("Order again"),
|
||||
"order_cancelled" : MessageLookupByLibrary.simpleMessage("Cancelled"),
|
||||
"order_complete" : MessageLookupByLibrary.simpleMessage("Complete"),
|
||||
"order_datetime" : MessageLookupByLibrary.simpleMessage("Order datetime"),
|
||||
"order_detail" : MessageLookupByLibrary.simpleMessage("Order detail"),
|
||||
"order_fulfillment" : MessageLookupByLibrary.simpleMessage("Order fulfillment"),
|
||||
"order_info" : MessageLookupByLibrary.simpleMessage("Order info."),
|
||||
"order_more" : m18,
|
||||
"order_number" : MessageLookupByLibrary.simpleMessage("Order No."),
|
||||
"order_number_copied_to_clipboard" : MessageLookupByLibrary.simpleMessage("Order number copied to clipboard"),
|
||||
"order_processing" : MessageLookupByLibrary.simpleMessage("Processing"),
|
||||
"order_remark" : MessageLookupByLibrary.simpleMessage("Order remark"),
|
||||
"out_of_stock" : MessageLookupByLibrary.simpleMessage("Out of stock"),
|
||||
"over_delivery_distance" : MessageLookupByLibrary.simpleMessage("The address is beyond the scope of delivery."),
|
||||
"paid" : MessageLookupByLibrary.simpleMessage("Paid"),
|
||||
"password" : MessageLookupByLibrary.simpleMessage("Password"),
|
||||
"password_again" : MessageLookupByLibrary.simpleMessage("Password again"),
|
||||
"password_has_been_changed" : MessageLookupByLibrary.simpleMessage("Password has been changed"),
|
||||
"password_is_not_match_password_again" : MessageLookupByLibrary.simpleMessage("Password and confirm password does not match."),
|
||||
"password_is_required" : MessageLookupByLibrary.simpleMessage("Password is required."),
|
||||
"pay" : MessageLookupByLibrary.simpleMessage("Pay"),
|
||||
"pay_after_meal" : MessageLookupByLibrary.simpleMessage("Pay after meal"),
|
||||
"pay_amount_token" : m19,
|
||||
"pay_later" : MessageLookupByLibrary.simpleMessage("Pay later"),
|
||||
"pay_now" : MessageLookupByLibrary.simpleMessage("Pay now"),
|
||||
"pay_on_deliery" : MessageLookupByLibrary.simpleMessage("Pay on delivery"),
|
||||
"pay_on_deliery_pickup" : MessageLookupByLibrary.simpleMessage("Pay on delivery or pickup"),
|
||||
"pay_with" : MessageLookupByLibrary.simpleMessage("Pay with"),
|
||||
"pay_with_existing_cards" : MessageLookupByLibrary.simpleMessage("Pay with existing cards"),
|
||||
"pay_with_token" : m20,
|
||||
"payment_amount" : MessageLookupByLibrary.simpleMessage("Payment amount"),
|
||||
"payment_method" : MessageLookupByLibrary.simpleMessage("Payment method"),
|
||||
"payment_method_not_set" : MessageLookupByLibrary.simpleMessage("No payment method specified. Please pay on delivery or pickup."),
|
||||
"payment_status" : MessageLookupByLibrary.simpleMessage("Payment status"),
|
||||
"payment_verification" : MessageLookupByLibrary.simpleMessage("Payment verification"),
|
||||
"payment_verification_sent" : m21,
|
||||
"paypal" : MessageLookupByLibrary.simpleMessage("Paypal"),
|
||||
"pending" : MessageLookupByLibrary.simpleMessage("Pending"),
|
||||
"percent_discount" : MessageLookupByLibrary.simpleMessage("%OFF"),
|
||||
"percentage_discount_token" : m22,
|
||||
"percentage_discount_token2" : m23,
|
||||
"pick_a_coupon" : MessageLookupByLibrary.simpleMessage("Pick a coupon"),
|
||||
"pickup" : MessageLookupByLibrary.simpleMessage("Pickup"),
|
||||
"pickup_address" : MessageLookupByLibrary.simpleMessage("Pickup address"),
|
||||
"pickup_at" : MessageLookupByLibrary.simpleMessage("Please pickup at"),
|
||||
"pickup_discount" : MessageLookupByLibrary.simpleMessage("Pickup discount"),
|
||||
"please_enter_coupon_code" : MessageLookupByLibrary.simpleMessage("Please enter a coupon code."),
|
||||
"please_enter_group_number" : MessageLookupByLibrary.simpleMessage("Please enter your group number."),
|
||||
"please_login" : MessageLookupByLibrary.simpleMessage("Please login"),
|
||||
"please_provide_shipping_address" : MessageLookupByLibrary.simpleMessage("Please provide shipping address."),
|
||||
"please_select" : MessageLookupByLibrary.simpleMessage("Please select"),
|
||||
"please_select_an_image" : MessageLookupByLibrary.simpleMessage("Please select an image"),
|
||||
"point" : MessageLookupByLibrary.simpleMessage("Points"),
|
||||
"point_of_sale_system_solution" : MessageLookupByLibrary.simpleMessage("Point of sale system solution"),
|
||||
"postal_code" : MessageLookupByLibrary.simpleMessage("Postal code"),
|
||||
"postal_code_is_required" : MessageLookupByLibrary.simpleMessage("Postal code is required"),
|
||||
"previous" : MessageLookupByLibrary.simpleMessage("Previous"),
|
||||
"price" : MessageLookupByLibrary.simpleMessage("Price"),
|
||||
"privacy_policy" : MessageLookupByLibrary.simpleMessage("Privacy policy"),
|
||||
"product_insufficient" : MessageLookupByLibrary.simpleMessage("The product quantity is insufficient."),
|
||||
"products" : MessageLookupByLibrary.simpleMessage("Products"),
|
||||
"profile" : MessageLookupByLibrary.simpleMessage("Profile"),
|
||||
"promotions" : MessageLookupByLibrary.simpleMessage("Promotions"),
|
||||
"province" : MessageLookupByLibrary.simpleMessage("Province"),
|
||||
"pull_up_to_load_more" : MessageLookupByLibrary.simpleMessage("Pull up to load more"),
|
||||
"purchase_renew_service" : MessageLookupByLibrary.simpleMessage("Purchase/Renew service"),
|
||||
"quick_input" : MessageLookupByLibrary.simpleMessage("Quick input"),
|
||||
"radio_option_is_optional" : MessageLookupByLibrary.simpleMessage("Optional. You can tap Next without selection."),
|
||||
"radio_option_is_required" : MessageLookupByLibrary.simpleMessage("Option is required. Select an option then tap Next."),
|
||||
"radio_option_select_token" : m24,
|
||||
"recalculating" : MessageLookupByLibrary.simpleMessage("Recalculating..."),
|
||||
"red_coupon" : MessageLookupByLibrary.simpleMessage("Coupon"),
|
||||
"redeem_coupon" : MessageLookupByLibrary.simpleMessage("Redeem"),
|
||||
"register" : MessageLookupByLibrary.simpleMessage("Register"),
|
||||
"registration" : MessageLookupByLibrary.simpleMessage("Registration"),
|
||||
"release_to_load_more" : MessageLookupByLibrary.simpleMessage("Release to load more"),
|
||||
"renew_license" : MessageLookupByLibrary.simpleMessage("Renew license"),
|
||||
"renewal_fee" : MessageLookupByLibrary.simpleMessage("Renewal fee"),
|
||||
"reply" : MessageLookupByLibrary.simpleMessage("Reply"),
|
||||
"reset_password" : MessageLookupByLibrary.simpleMessage("Reset password"),
|
||||
"reset_password_desc" : MessageLookupByLibrary.simpleMessage("Enter the new password you desired twice."),
|
||||
"reset_password_success" : MessageLookupByLibrary.simpleMessage("Reset password success"),
|
||||
"response_from_store" : MessageLookupByLibrary.simpleMessage("Response from store"),
|
||||
"return_policy" : MessageLookupByLibrary.simpleMessage("Return policy"),
|
||||
"revise_user_profile" : MessageLookupByLibrary.simpleMessage("Revise user profile"),
|
||||
"sat" : MessageLookupByLibrary.simpleMessage("Sat"),
|
||||
"saturday" : MessageLookupByLibrary.simpleMessage("Saturday"),
|
||||
"save" : MessageLookupByLibrary.simpleMessage("Save"),
|
||||
"schedule_delivery" : MessageLookupByLibrary.simpleMessage("Schedule delivery"),
|
||||
"search_place" : MessageLookupByLibrary.simpleMessage("Search place"),
|
||||
"search_product" : MessageLookupByLibrary.simpleMessage("Search product"),
|
||||
"search_products" : MessageLookupByLibrary.simpleMessage("Search products"),
|
||||
"select" : MessageLookupByLibrary.simpleMessage("Select"),
|
||||
"select_a_payment_method" : MessageLookupByLibrary.simpleMessage("Select a payment method"),
|
||||
"select_a_plan" : MessageLookupByLibrary.simpleMessage("Select a plan"),
|
||||
"select_canada_post_shipping_rate" : MessageLookupByLibrary.simpleMessage("Please select Canada Post shipping rate."),
|
||||
"select_delivery_time" : MessageLookupByLibrary.simpleMessage("Select delivery time"),
|
||||
"select_document_lanuage" : MessageLookupByLibrary.simpleMessage("Select a language"),
|
||||
"select_document_type" : MessageLookupByLibrary.simpleMessage("Select a document type"),
|
||||
"select_options" : MessageLookupByLibrary.simpleMessage("Select options"),
|
||||
"service_descritpion" : MessageLookupByLibrary.simpleMessage("Service description"),
|
||||
"service_fee" : MessageLookupByLibrary.simpleMessage("Service fee"),
|
||||
"service_policy" : MessageLookupByLibrary.simpleMessage("Service policy"),
|
||||
"set_password" : MessageLookupByLibrary.simpleMessage("Set password"),
|
||||
"set_password_desc" : MessageLookupByLibrary.simpleMessage("Enter the password you desired twice."),
|
||||
"shipping_time_will_schedule" : MessageLookupByLibrary.simpleMessage("Delivery time cannot be determined. Usually we will send it out as soon as possible. If you wish to deliver at a certain time, please state in the remarks."),
|
||||
"shop" : MessageLookupByLibrary.simpleMessage("Shop"),
|
||||
"show_less" : MessageLookupByLibrary.simpleMessage("Show less"),
|
||||
"show_more" : MessageLookupByLibrary.simpleMessage("Show more"),
|
||||
"sold_per_month_token" : m25,
|
||||
"specification" : MessageLookupByLibrary.simpleMessage("Specification"),
|
||||
"store" : MessageLookupByLibrary.simpleMessage("Store"),
|
||||
"store_closed" : MessageLookupByLibrary.simpleMessage("Store closed"),
|
||||
"store_delivery" : MessageLookupByLibrary.simpleMessage("Store delivery"),
|
||||
"store_introduction" : MessageLookupByLibrary.simpleMessage("Store introduction"),
|
||||
"store_policy" : MessageLookupByLibrary.simpleMessage("Store policy"),
|
||||
"street_line_1" : MessageLookupByLibrary.simpleMessage("Street line 1"),
|
||||
"street_line_1_is_required" : MessageLookupByLibrary.simpleMessage("Street line 1 is required"),
|
||||
"street_line_2" : MessageLookupByLibrary.simpleMessage("Street line 2"),
|
||||
"submit" : MessageLookupByLibrary.simpleMessage("Submit"),
|
||||
"submit_to_change" : MessageLookupByLibrary.simpleMessage("Submit to change"),
|
||||
"submit_to_generate" : MessageLookupByLibrary.simpleMessage("Submit to generate"),
|
||||
"submitting" : MessageLookupByLibrary.simpleMessage("Submitting..."),
|
||||
"submitting_please_wait" : MessageLookupByLibrary.simpleMessage("Submitting, please wait..."),
|
||||
"subtotal" : MessageLookupByLibrary.simpleMessage("Subtotal"),
|
||||
"subtotal_token" : m26,
|
||||
"success" : MessageLookupByLibrary.simpleMessage("Success"),
|
||||
"sun" : MessageLookupByLibrary.simpleMessage("Sun"),
|
||||
"sunday" : MessageLookupByLibrary.simpleMessage("Sunday"),
|
||||
"support" : MessageLookupByLibrary.simpleMessage("Support"),
|
||||
"support_ticket" : MessageLookupByLibrary.simpleMessage("Support ticket"),
|
||||
"table_token" : m27,
|
||||
"tap_back_again_to_exit" : MessageLookupByLibrary.simpleMessage("Tap back again to exit"),
|
||||
"tax" : MessageLookupByLibrary.simpleMessage("Tax"),
|
||||
"thank_you_for_your_comment" : MessageLookupByLibrary.simpleMessage("Thank you for your comment."),
|
||||
"the_address_has_been_deleted" : MessageLookupByLibrary.simpleMessage("The address has been deleted."),
|
||||
"the_email_is_same_as_current" : MessageLookupByLibrary.simpleMessage("The email is the same as the current one."),
|
||||
"the_mobile_number_is_same_as_current" : MessageLookupByLibrary.simpleMessage("The mobile number is the same as the current one."),
|
||||
"the_ticket_is_closed_desc" : MessageLookupByLibrary.simpleMessage("The ticket has been closed. If you still have questions, please create a new ticket."),
|
||||
"this_credit_card_is_invalid" : MessageLookupByLibrary.simpleMessage("This credit card is invalid"),
|
||||
"this_field_is_required" : MessageLookupByLibrary.simpleMessage("This field is required."),
|
||||
"thu" : MessageLookupByLibrary.simpleMessage("Thu"),
|
||||
"thursday" : MessageLookupByLibrary.simpleMessage("Thursday"),
|
||||
"ticket_created_success" : MessageLookupByLibrary.simpleMessage("Ticket has been created successfully."),
|
||||
"ticket_number_token" : m28,
|
||||
"today" : MessageLookupByLibrary.simpleMessage("Today"),
|
||||
"today_with_time" : m29,
|
||||
"toll_free" : MessageLookupByLibrary.simpleMessage("Toll free: "),
|
||||
"tomorrow" : MessageLookupByLibrary.simpleMessage("Tomorrow"),
|
||||
"tomorrow_with_time" : m30,
|
||||
"total" : MessageLookupByLibrary.simpleMessage("Total"),
|
||||
"tue" : MessageLookupByLibrary.simpleMessage("Tue"),
|
||||
"tuesday" : MessageLookupByLibrary.simpleMessage("Tuesday"),
|
||||
"tutorials" : MessageLookupByLibrary.simpleMessage("Tutorials"),
|
||||
"wiki" : MessageLookupByLibrary.simpleMessage("Wiki")
|
||||
"type_your_order_remark" : MessageLookupByLibrary.simpleMessage("Type your order remark"),
|
||||
"ubereats_receipt" : MessageLookupByLibrary.simpleMessage("UberEats receipt"),
|
||||
"under_renovation" : MessageLookupByLibrary.simpleMessage("The store is under renovation"),
|
||||
"unpaid" : MessageLookupByLibrary.simpleMessage("Unpaid"),
|
||||
"update_success" : MessageLookupByLibrary.simpleMessage("Updated success"),
|
||||
"user_account_created_success" : MessageLookupByLibrary.simpleMessage("User account created success"),
|
||||
"user_registration" : MessageLookupByLibrary.simpleMessage("User registration"),
|
||||
"user_registration_desc" : MessageLookupByLibrary.simpleMessage("Please enter your mobile phone number then click the \'Get code\' button to get the validation code."),
|
||||
"verification_code" : MessageLookupByLibrary.simpleMessage("Verification code"),
|
||||
"verification_code_is_required" : MessageLookupByLibrary.simpleMessage("Verification code is required"),
|
||||
"verification_code_sent" : MessageLookupByLibrary.simpleMessage("Verification code has been sent."),
|
||||
"verify" : MessageLookupByLibrary.simpleMessage("Verify"),
|
||||
"view_blog" : MessageLookupByLibrary.simpleMessage("View blog"),
|
||||
"view_on_google_map" : MessageLookupByLibrary.simpleMessage("View on Google maps"),
|
||||
"view_ticket" : MessageLookupByLibrary.simpleMessage("View ticket"),
|
||||
"wallet" : MessageLookupByLibrary.simpleMessage("Wallet"),
|
||||
"warning" : MessageLookupByLibrary.simpleMessage("Warning"),
|
||||
"wechatpay" : MessageLookupByLibrary.simpleMessage("Wechat pay"),
|
||||
"wed" : MessageLookupByLibrary.simpleMessage("Wed"),
|
||||
"wednesday" : MessageLookupByLibrary.simpleMessage("Wednesday"),
|
||||
"weight_token" : m31,
|
||||
"wiki" : MessageLookupByLibrary.simpleMessage("Wiki"),
|
||||
"wrong_payment_verification_code" : MessageLookupByLibrary.simpleMessage("Wrong payment verification code. Please check and enter again."),
|
||||
"yes" : MessageLookupByLibrary.simpleMessage("Yes"),
|
||||
"yes_i_am_sure" : MessageLookupByLibrary.simpleMessage("Yes! I am sure."),
|
||||
"you_have_no_orders_yet" : MessageLookupByLibrary.simpleMessage("You have no orders yet"),
|
||||
"your_basket_is_empty" : MessageLookupByLibrary.simpleMessage("Your basket is empty."),
|
||||
"your_group" : MessageLookupByLibrary.simpleMessage("Your group"),
|
||||
"your_question_issue" : MessageLookupByLibrary.simpleMessage("Your question/issue"),
|
||||
"your_reply" : MessageLookupByLibrary.simpleMessage("Your reply")
|
||||
};
|
||||
}
|
||||
|
||||
@@ -19,41 +19,461 @@ typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
|
||||
class MessageLookup extends MessageLookupByLibrary {
|
||||
String get localeName => 'zh_CN';
|
||||
|
||||
static m0(oss) => "在${oss}下载";
|
||||
static m0(qty) => "等${qty}件";
|
||||
|
||||
static m1(value) => "订单满\$${value}可用";
|
||||
|
||||
static m2(hour) => "现在预定,${hour}:00后开始配送。";
|
||||
|
||||
static m3(optionName) => "多项选择${optionName}";
|
||||
|
||||
static m4(km, time) => "配送员离您${km},大概需时${time}送达。";
|
||||
|
||||
static m5(shippingfee) => "配送费${shippingfee}起";
|
||||
|
||||
static m6(length, width, height) => "尺寸:${length}(L)x${width}(W)x${height}(H)";
|
||||
|
||||
static m7(discount) => "-\$${discount}";
|
||||
|
||||
static m8(oss) => "在${oss}下载";
|
||||
|
||||
static m9(expirationDate) => "${expirationDate}到期";
|
||||
|
||||
static m10(mon, yer) => "到期:${mon}/${yer}";
|
||||
|
||||
static m11(name, rate) => "${name}(${rate}%)";
|
||||
|
||||
static m12(num) => "${num}条回复";
|
||||
|
||||
static m13(second) => "${second}秒后重试";
|
||||
|
||||
static m14(hours) => "${Intl.plural(hours, one: '1小时', other: '${hours}小时')}";
|
||||
|
||||
static m15(minamount) => "\$${minamount}起送";
|
||||
|
||||
static m16(shipfee) => "配送费\$${shipfee}起";
|
||||
|
||||
static m17(minutes) => "${Intl.plural(minutes, one: '1分钟', other: '${minutes}分钟')}";
|
||||
|
||||
static m18(minprice) => "还差${minprice}起送";
|
||||
|
||||
static m19(amount) => "马上付款 \$${amount}";
|
||||
|
||||
static m20(method) => "使用${method}付款";
|
||||
|
||||
static m21(mobile) => "付款码已经发送到您的手机${mobile}。请在下面输入付款码。";
|
||||
|
||||
static m22(discount) => "${discount}%折扣";
|
||||
|
||||
static m23(amount, discount) => "-\$${amount}(${discount}%折扣)";
|
||||
|
||||
static m24(optionName) => "请选择${optionName}";
|
||||
|
||||
static m25(sold_qty) => " 月售${sold_qty}单";
|
||||
|
||||
static m26(subtotal) => "小计:${subtotal}";
|
||||
|
||||
static m27(num) => "桌号:${num}";
|
||||
|
||||
static m28(num) => "票号 #${num}";
|
||||
|
||||
static m29(time) => "今天${time}";
|
||||
|
||||
static m30(time) => "明天${time}";
|
||||
|
||||
static m31(weight) => "重量:${weight}";
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
static _notInlinedMessages(_) => <String, Function> {
|
||||
"about" : MessageLookupByLibrary.simpleMessage("关于"),
|
||||
"about_us" : MessageLookupByLibrary.simpleMessage("关于我们"),
|
||||
"account_binding" : MessageLookupByLibrary.simpleMessage("账号绑定"),
|
||||
"add_new_address" : MessageLookupByLibrary.simpleMessage("添加新地址"),
|
||||
"add_new_ticket" : MessageLookupByLibrary.simpleMessage("创建一个新的支持票"),
|
||||
"add_new_ticket_desc" : MessageLookupByLibrary.simpleMessage("请输入您的问题。您还可以上传文件或图片来使您的提问更清楚。"),
|
||||
"add_pictures" : MessageLookupByLibrary.simpleMessage("晒照片"),
|
||||
"add_to_basket" : MessageLookupByLibrary.simpleMessage("放入购物篮"),
|
||||
"address" : MessageLookupByLibrary.simpleMessage("地址"),
|
||||
"after_renewed" : MessageLookupByLibrary.simpleMessage("续约后"),
|
||||
"alipay" : MessageLookupByLibrary.simpleMessage("支付宝"),
|
||||
"amount_not_meet" : MessageLookupByLibrary.simpleMessage("订单金额没有达到最低要求。"),
|
||||
"and_more_item_token" : m0,
|
||||
"are_you_sure_to_cancel_the_order" : MessageLookupByLibrary.simpleMessage("您确定要取消该订单吗?"),
|
||||
"are_you_sure_to_delete_the_address" : MessageLookupByLibrary.simpleMessage("您确定要删除该地址吗?"),
|
||||
"are_you_sure_to_empty_basket" : MessageLookupByLibrary.simpleMessage("您确定要清空购物篮吗?"),
|
||||
"are_you_sure_to_logout" : MessageLookupByLibrary.simpleMessage("您确定要登出吗?"),
|
||||
"are_you_sure_to_remove_the_card" : MessageLookupByLibrary.simpleMessage("您确定要移除该信用卡吗?"),
|
||||
"are_you_sure_to_remove_the_item" : MessageLookupByLibrary.simpleMessage("您确定要移除该物品吗?"),
|
||||
"are_you_sure_to_remove_the_picture" : MessageLookupByLibrary.simpleMessage("您确定要移除该图片吗?"),
|
||||
"attach_pictures" : MessageLookupByLibrary.simpleMessage("图片附件"),
|
||||
"attach_pictures_desc" : MessageLookupByLibrary.simpleMessage("建议附上图片(屏幕截图)让问题更清楚。"),
|
||||
"available_for_order_over_token" : m1,
|
||||
"avatar" : MessageLookupByLibrary.simpleMessage("头像"),
|
||||
"back" : MessageLookupByLibrary.simpleMessage("返回"),
|
||||
"basic_info" : MessageLookupByLibrary.simpleMessage("基本信息"),
|
||||
"blog" : MessageLookupByLibrary.simpleMessage("博客"),
|
||||
"book_now_delivery_later_token" : m2,
|
||||
"business_card" : MessageLookupByLibrary.simpleMessage("名片"),
|
||||
"business_cooperation" : MessageLookupByLibrary.simpleMessage("商业合作"),
|
||||
"by_email" : MessageLookupByLibrary.simpleMessage("电子邮箱"),
|
||||
"by_phone" : MessageLookupByLibrary.simpleMessage("联系电话"),
|
||||
"camera" : MessageLookupByLibrary.simpleMessage("相机"),
|
||||
"canada_post" : MessageLookupByLibrary.simpleMessage("加拿大邮政"),
|
||||
"canada_post_delivery" : MessageLookupByLibrary.simpleMessage("加拿大邮政配送"),
|
||||
"cancel" : MessageLookupByLibrary.simpleMessage("取消"),
|
||||
"cancel_order" : MessageLookupByLibrary.simpleMessage("取消订单"),
|
||||
"change_email" : MessageLookupByLibrary.simpleMessage("修改电子邮箱"),
|
||||
"change_email_desc" : MessageLookupByLibrary.simpleMessage("输入新的Email,然后点击\'获取验证码\'按钮。"),
|
||||
"change_mobile" : MessageLookupByLibrary.simpleMessage("修改手机号码"),
|
||||
"change_mobile_desc" : MessageLookupByLibrary.simpleMessage("输入新的手机号码,然后点击\'获取验证码\'按钮。"),
|
||||
"change_nickname" : MessageLookupByLibrary.simpleMessage("修改昵称"),
|
||||
"change_password" : MessageLookupByLibrary.simpleMessage("修改密码"),
|
||||
"change_password_desc" : MessageLookupByLibrary.simpleMessage("请输入旧密码和希望的新密码。"),
|
||||
"check_option_is_optional" : MessageLookupByLibrary.simpleMessage("可选选项。如果不选择可以直接点下一步。"),
|
||||
"check_option_is_required" : MessageLookupByLibrary.simpleMessage("选项必选。选择至少一项再点击下一步。"),
|
||||
"check_option_select_token" : m3,
|
||||
"checkout" : MessageLookupByLibrary.simpleMessage("去结算"),
|
||||
"checkout_no_deliver" : MessageLookupByLibrary.simpleMessage("现在这时间我们不派送。"),
|
||||
"chinese_simplified" : MessageLookupByLibrary.simpleMessage("简体中文"),
|
||||
"chinese_traditional" : MessageLookupByLibrary.simpleMessage("繁体中文"),
|
||||
"choose_a_shipping_rate" : MessageLookupByLibrary.simpleMessage("选择运费"),
|
||||
"city" : MessageLookupByLibrary.simpleMessage("城市"),
|
||||
"city_is_required" : MessageLookupByLibrary.simpleMessage("城市必填"),
|
||||
"close" : MessageLookupByLibrary.simpleMessage("关闭"),
|
||||
"comment" : MessageLookupByLibrary.simpleMessage("评价"),
|
||||
"comment_empty" : MessageLookupByLibrary.simpleMessage("请输入您的评价。"),
|
||||
"comments" : MessageLookupByLibrary.simpleMessage("评价"),
|
||||
"confirm_order" : MessageLookupByLibrary.simpleMessage("订单确定"),
|
||||
"confirmation" : MessageLookupByLibrary.simpleMessage("请确定"),
|
||||
"contact_name" : MessageLookupByLibrary.simpleMessage("联系人姓名"),
|
||||
"contact_name_is_required" : MessageLookupByLibrary.simpleMessage("联系人姓名必填"),
|
||||
"contact_us" : MessageLookupByLibrary.simpleMessage("联系我们"),
|
||||
"copy" : MessageLookupByLibrary.simpleMessage("复制"),
|
||||
"coupons" : MessageLookupByLibrary.simpleMessage("优惠券"),
|
||||
"credit_card" : MessageLookupByLibrary.simpleMessage("信用卡"),
|
||||
"credit_coupon" : MessageLookupByLibrary.simpleMessage("红包/抵用券"),
|
||||
"credit_debit_card" : MessageLookupByLibrary.simpleMessage("信用卡或银行卡"),
|
||||
"current_password_is_required" : MessageLookupByLibrary.simpleMessage("需要当前密码"),
|
||||
"current_plan" : MessageLookupByLibrary.simpleMessage("当前计划"),
|
||||
"customer" : MessageLookupByLibrary.simpleMessage("客户"),
|
||||
"delete" : MessageLookupByLibrary.simpleMessage("删除"),
|
||||
"delivery" : MessageLookupByLibrary.simpleMessage("外卖配送"),
|
||||
"delivery_address" : MessageLookupByLibrary.simpleMessage("收货地址"),
|
||||
"delivery_distance_token" : m4,
|
||||
"delivery_fee" : m5,
|
||||
"delivery_guy" : MessageLookupByLibrary.simpleMessage("配送员"),
|
||||
"delivery_info" : MessageLookupByLibrary.simpleMessage("配送信息"),
|
||||
"delivery_method" : MessageLookupByLibrary.simpleMessage("配送方式"),
|
||||
"delivery_now" : MessageLookupByLibrary.simpleMessage("立刻配送"),
|
||||
"delivery_unavailable" : MessageLookupByLibrary.simpleMessage("配送时间"),
|
||||
"detail" : MessageLookupByLibrary.simpleMessage("详细描述"),
|
||||
"developer_of" : MessageLookupByLibrary.simpleMessage("开发者"),
|
||||
"dimentions_token" : m6,
|
||||
"discount_amount_token" : m7,
|
||||
"document_langage" : MessageLookupByLibrary.simpleMessage("文档语言"),
|
||||
"document_type" : MessageLookupByLibrary.simpleMessage("文件类型"),
|
||||
"dont_use" : MessageLookupByLibrary.simpleMessage("不使用"),
|
||||
"download" : MessageLookupByLibrary.simpleMessage("下载"),
|
||||
"download_with_token" : m0,
|
||||
"download_with_token" : m8,
|
||||
"downloads" : MessageLookupByLibrary.simpleMessage("下载"),
|
||||
"edit_address" : MessageLookupByLibrary.simpleMessage("修改地址"),
|
||||
"email" : MessageLookupByLibrary.simpleMessage("电子邮箱"),
|
||||
"email_is_not_valid" : MessageLookupByLibrary.simpleMessage("电子邮箱无效"),
|
||||
"email_is_required" : MessageLookupByLibrary.simpleMessage("电子邮箱必填"),
|
||||
"email_needed" : MessageLookupByLibrary.simpleMessage("需要电子邮箱"),
|
||||
"empty_address_change_keyword" : MessageLookupByLibrary.simpleMessage("找不到地址。点击这里跳过地址搜索。"),
|
||||
"empty_basket" : MessageLookupByLibrary.simpleMessage("清空购物篮"),
|
||||
"empty_result_change_keyword" : MessageLookupByLibrary.simpleMessage("找不到您需要的数据,请改变关键字再试。"),
|
||||
"end_of_the_list" : MessageLookupByLibrary.simpleMessage("全部加载"),
|
||||
"english" : MessageLookupByLibrary.simpleMessage("英文"),
|
||||
"enter_coupon_code" : MessageLookupByLibrary.simpleMessage("输入红包号码"),
|
||||
"enter_delivery_address" : MessageLookupByLibrary.simpleMessage("输入送货地址"),
|
||||
"enter_mobile_or_email" : MessageLookupByLibrary.simpleMessage("输入手机号码或电子邮箱地址"),
|
||||
"enter_new_nickname" : MessageLookupByLibrary.simpleMessage("输入新昵称"),
|
||||
"enter_product_keyword" : MessageLookupByLibrary.simpleMessage("输入产品关键字"),
|
||||
"error" : MessageLookupByLibrary.simpleMessage("错误"),
|
||||
"error_read_file" : MessageLookupByLibrary.simpleMessage("读取文件过程中出错。"),
|
||||
"expiration_date" : MessageLookupByLibrary.simpleMessage("到期日期"),
|
||||
"expiration_date_token" : m9,
|
||||
"expire_token" : m10,
|
||||
"expired_at" : MessageLookupByLibrary.simpleMessage("到期日期"),
|
||||
"extra_fee_token" : m11,
|
||||
"fax" : MessageLookupByLibrary.simpleMessage("传真"),
|
||||
"feature_not_available_web" : MessageLookupByLibrary.simpleMessage("该功能在网页版上不能用。请下载App版本。"),
|
||||
"featured_product" : MessageLookupByLibrary.simpleMessage("特色产品"),
|
||||
"finish" : MessageLookupByLibrary.simpleMessage("完成"),
|
||||
"follow_ups" : MessageLookupByLibrary.simpleMessage("跟进"),
|
||||
"followups_token" : m12,
|
||||
"forgot_password" : MessageLookupByLibrary.simpleMessage("忘记密码"),
|
||||
"forgot_password_description" : MessageLookupByLibrary.simpleMessage("输入您注册时用的Email或手机号码,然后点击‘获取验证码’ 按钮。"),
|
||||
"forgot_password_question" : MessageLookupByLibrary.simpleMessage("忘记密码?"),
|
||||
"fri" : MessageLookupByLibrary.simpleMessage("周五"),
|
||||
"friday" : MessageLookupByLibrary.simpleMessage("星期五"),
|
||||
"from_camera" : MessageLookupByLibrary.simpleMessage("手机照相机"),
|
||||
"from_gallery" : MessageLookupByLibrary.simpleMessage("手机图库"),
|
||||
"gallery" : MessageLookupByLibrary.simpleMessage("图库"),
|
||||
"general_coupon" : MessageLookupByLibrary.simpleMessage("通用优惠券"),
|
||||
"get_code" : MessageLookupByLibrary.simpleMessage("获取验证码"),
|
||||
"get_code_again" : MessageLookupByLibrary.simpleMessage("重新获取验证码"),
|
||||
"get_code_token" : m13,
|
||||
"get_coupon" : MessageLookupByLibrary.simpleMessage("获取红包"),
|
||||
"get_picture" : MessageLookupByLibrary.simpleMessage("获取图片"),
|
||||
"get_picture_from" : MessageLookupByLibrary.simpleMessage("从...获取图片"),
|
||||
"group_license_renewal" : MessageLookupByLibrary.simpleMessage("集团许可续订"),
|
||||
"group_number" : MessageLookupByLibrary.simpleMessage("集团号码"),
|
||||
"group_number_can_be_found" : MessageLookupByLibrary.simpleMessage("按如下图找到集团号码..."),
|
||||
"home" : MessageLookupByLibrary.simpleMessage("首页"),
|
||||
"hot_sale" : MessageLookupByLibrary.simpleMessage("热卖"),
|
||||
"hour_token" : m14,
|
||||
"igoshow" : MessageLookupByLibrary.simpleMessage("iGoShow"),
|
||||
"includes" : MessageLookupByLibrary.simpleMessage("包含"),
|
||||
"information" : MessageLookupByLibrary.simpleMessage("信息"),
|
||||
"input_your_comment" : MessageLookupByLibrary.simpleMessage("写下您的评价"),
|
||||
"install_in_store" : MessageLookupByLibrary.simpleMessage("店内安装"),
|
||||
"learn_more" : MessageLookupByLibrary.simpleMessage("了解更多..."),
|
||||
"learn_more_about_igoshow" : MessageLookupByLibrary.simpleMessage("详细了解iGoShow"),
|
||||
"learn_more_about_minipos" : MessageLookupByLibrary.simpleMessage("详细了解MiniPOS"),
|
||||
"license_agreement" : MessageLookupByLibrary.simpleMessage("许可协议"),
|
||||
"light_tase" : MessageLookupByLibrary.simpleMessage("清淡口味"),
|
||||
"load_failed_retry" : MessageLookupByLibrary.simpleMessage("载入失败,请重试。"),
|
||||
"loading" : MessageLookupByLibrary.simpleMessage("装载中..."),
|
||||
"loading_please_wait" : MessageLookupByLibrary.simpleMessage("装载中,清稍候..."),
|
||||
"login" : MessageLookupByLibrary.simpleMessage("登入"),
|
||||
"login_instruction" : MessageLookupByLibrary.simpleMessage("如果您已经注册了账号,请使用如下表单登陆。\n如果您是MiniOffice的用户,您可直接输入您的MiniOffice用户名和密码登陆。"),
|
||||
"logout" : MessageLookupByLibrary.simpleMessage("登出"),
|
||||
"main_content_1" : MessageLookupByLibrary.simpleMessage("自从1999年来,我们一直致力于开发完整的强大的销售系统,帮助了上千小企业平滑的处理销售业务。当前我们有两个主要的产品。"),
|
||||
"me" : MessageLookupByLibrary.simpleMessage("我的"),
|
||||
"min_order_amount_token" : m15,
|
||||
"min_shipping_fee" : m16,
|
||||
"minipos" : MessageLookupByLibrary.simpleMessage("MiniPOS"),
|
||||
"minute_token" : m17,
|
||||
"mobile_email_username" : MessageLookupByLibrary.simpleMessage("手机号码,Email或MiniOffice用户名"),
|
||||
"mobile_is_required" : MessageLookupByLibrary.simpleMessage("手机号码必填"),
|
||||
"mobile_number" : MessageLookupByLibrary.simpleMessage("手机号码"),
|
||||
"mobile_or_email" : MessageLookupByLibrary.simpleMessage("手机号码或电子邮箱"),
|
||||
"mobile_or_email_is_required" : MessageLookupByLibrary.simpleMessage("必须输入手机号码或电子邮箱地址"),
|
||||
"mobile_phone_number" : MessageLookupByLibrary.simpleMessage("手机号码"),
|
||||
"mobile_phone_number_is_required" : MessageLookupByLibrary.simpleMessage("手机号码必填"),
|
||||
"mon" : MessageLookupByLibrary.simpleMessage("周一"),
|
||||
"monday" : MessageLookupByLibrary.simpleMessage("星期一"),
|
||||
"mr" : MessageLookupByLibrary.simpleMessage("先生"),
|
||||
"ms" : MessageLookupByLibrary.simpleMessage("女士"),
|
||||
"my_addresses" : MessageLookupByLibrary.simpleMessage("我的地址"),
|
||||
"my_cards" : MessageLookupByLibrary.simpleMessage("我的卡"),
|
||||
"my_favorites" : MessageLookupByLibrary.simpleMessage("我的收藏"),
|
||||
"my_orders" : MessageLookupByLibrary.simpleMessage("我的订单"),
|
||||
"my_support" : MessageLookupByLibrary.simpleMessage("支持"),
|
||||
"navigation" : MessageLookupByLibrary.simpleMessage("导航"),
|
||||
"new_address" : MessageLookupByLibrary.simpleMessage("添加新地址"),
|
||||
"new_comment" : MessageLookupByLibrary.simpleMessage("新的评价"),
|
||||
"new_ticket" : MessageLookupByLibrary.simpleMessage("新的支持票"),
|
||||
"new_user_question" : MessageLookupByLibrary.simpleMessage("新用户?"),
|
||||
"next" : MessageLookupByLibrary.simpleMessage("下一步"),
|
||||
"nick_name" : MessageLookupByLibrary.simpleMessage("昵称"),
|
||||
"nickname_is_required" : MessageLookupByLibrary.simpleMessage("昵称不能为空"),
|
||||
"no" : MessageLookupByLibrary.simpleMessage("不是"),
|
||||
"no_address_yet" : MessageLookupByLibrary.simpleMessage("您还没有输入任何地址。"),
|
||||
"no_blog_yet" : MessageLookupByLibrary.simpleMessage("尚无要显示的博客。"),
|
||||
"no_comments_yet" : MessageLookupByLibrary.simpleMessage("还没评价"),
|
||||
"no_coupon_available" : MessageLookupByLibrary.simpleMessage("无可用红包"),
|
||||
"no_delivery_method" : MessageLookupByLibrary.simpleMessage("没有可用的送货方式"),
|
||||
"no_instance_delivery_desc" : MessageLookupByLibrary.simpleMessage("跟踪信息将在可用时提供。"),
|
||||
"no_more_record" : MessageLookupByLibrary.simpleMessage("没有更多记录了"),
|
||||
"no_onion" : MessageLookupByLibrary.simpleMessage("不要洋葱"),
|
||||
"no_pickle" : MessageLookupByLibrary.simpleMessage("不要泡菜"),
|
||||
"no_restriction" : MessageLookupByLibrary.simpleMessage("无门槛"),
|
||||
"no_spicy" : MessageLookupByLibrary.simpleMessage("不要辣"),
|
||||
"no_ticket_yet" : MessageLookupByLibrary.simpleMessage("还没有支持票。 如果您有任何疑问/问题,请点击上方的加号图标以创建支持票。"),
|
||||
"not_binding" : MessageLookupByLibrary.simpleMessage("未绑定"),
|
||||
"number_of_people" : MessageLookupByLibrary.simpleMessage("人数"),
|
||||
"ocr_scan" : MessageLookupByLibrary.simpleMessage("OCR扫描"),
|
||||
"ok" : MessageLookupByLibrary.simpleMessage("确定"),
|
||||
"old_password" : MessageLookupByLibrary.simpleMessage("旧密码"),
|
||||
"online_payment" : MessageLookupByLibrary.simpleMessage("在线付款"),
|
||||
"optional_information" : MessageLookupByLibrary.simpleMessage("可选填信息"),
|
||||
"order_acceipt" : MessageLookupByLibrary.simpleMessage("已接单"),
|
||||
"order_again" : MessageLookupByLibrary.simpleMessage("再来一单"),
|
||||
"order_cancelled" : MessageLookupByLibrary.simpleMessage("已取消"),
|
||||
"order_complete" : MessageLookupByLibrary.simpleMessage("已完成"),
|
||||
"order_datetime" : MessageLookupByLibrary.simpleMessage("下单时间"),
|
||||
"order_detail" : MessageLookupByLibrary.simpleMessage("订单详情"),
|
||||
"order_fulfillment" : MessageLookupByLibrary.simpleMessage("订单完成度"),
|
||||
"order_info" : MessageLookupByLibrary.simpleMessage("订单信息"),
|
||||
"order_more" : m18,
|
||||
"order_number" : MessageLookupByLibrary.simpleMessage("订单号码"),
|
||||
"order_number_copied_to_clipboard" : MessageLookupByLibrary.simpleMessage("订单号码复制到剪切板"),
|
||||
"order_processing" : MessageLookupByLibrary.simpleMessage("准备中"),
|
||||
"order_remark" : MessageLookupByLibrary.simpleMessage("订单备注"),
|
||||
"out_of_stock" : MessageLookupByLibrary.simpleMessage("脱销"),
|
||||
"over_delivery_distance" : MessageLookupByLibrary.simpleMessage("地址超出配送范围"),
|
||||
"paid" : MessageLookupByLibrary.simpleMessage("已付款"),
|
||||
"password" : MessageLookupByLibrary.simpleMessage("密码"),
|
||||
"password_again" : MessageLookupByLibrary.simpleMessage("再输入密码"),
|
||||
"password_has_been_changed" : MessageLookupByLibrary.simpleMessage("密码修改成功"),
|
||||
"password_is_not_match_password_again" : MessageLookupByLibrary.simpleMessage("两次输入密码不一致。"),
|
||||
"password_is_required" : MessageLookupByLibrary.simpleMessage("密码必填。"),
|
||||
"pay" : MessageLookupByLibrary.simpleMessage("付款"),
|
||||
"pay_after_meal" : MessageLookupByLibrary.simpleMessage("餐后付款"),
|
||||
"pay_amount_token" : m19,
|
||||
"pay_later" : MessageLookupByLibrary.simpleMessage("稍后付款"),
|
||||
"pay_now" : MessageLookupByLibrary.simpleMessage("去支付"),
|
||||
"pay_on_deliery" : MessageLookupByLibrary.simpleMessage("到货付款"),
|
||||
"pay_on_deliery_pickup" : MessageLookupByLibrary.simpleMessage("自提或到货付款"),
|
||||
"pay_with" : MessageLookupByLibrary.simpleMessage("使用"),
|
||||
"pay_with_existing_cards" : MessageLookupByLibrary.simpleMessage("用现有的卡付款"),
|
||||
"pay_with_token" : m20,
|
||||
"payment_amount" : MessageLookupByLibrary.simpleMessage("付款金额"),
|
||||
"payment_method" : MessageLookupByLibrary.simpleMessage("付款方式"),
|
||||
"payment_method_not_set" : MessageLookupByLibrary.simpleMessage("没有指定付款方式,请货到付款或自提付款。"),
|
||||
"payment_status" : MessageLookupByLibrary.simpleMessage("付款状态"),
|
||||
"payment_verification" : MessageLookupByLibrary.simpleMessage("付款验证"),
|
||||
"payment_verification_sent" : m21,
|
||||
"paypal" : MessageLookupByLibrary.simpleMessage("Paypal"),
|
||||
"pending" : MessageLookupByLibrary.simpleMessage("待接单"),
|
||||
"percent_discount" : MessageLookupByLibrary.simpleMessage("%折扣"),
|
||||
"percentage_discount_token" : m22,
|
||||
"percentage_discount_token2" : m23,
|
||||
"pick_a_coupon" : MessageLookupByLibrary.simpleMessage("使用红包"),
|
||||
"pickup" : MessageLookupByLibrary.simpleMessage("到店自提"),
|
||||
"pickup_address" : MessageLookupByLibrary.simpleMessage("自提地址"),
|
||||
"pickup_at" : MessageLookupByLibrary.simpleMessage("自提地址"),
|
||||
"pickup_discount" : MessageLookupByLibrary.simpleMessage("自提折扣"),
|
||||
"please_enter_coupon_code" : MessageLookupByLibrary.simpleMessage("请输入红包号码。"),
|
||||
"please_enter_group_number" : MessageLookupByLibrary.simpleMessage("请输入您的集团号码。"),
|
||||
"please_login" : MessageLookupByLibrary.simpleMessage("请登陆"),
|
||||
"please_provide_shipping_address" : MessageLookupByLibrary.simpleMessage("请提供收货地址"),
|
||||
"please_select" : MessageLookupByLibrary.simpleMessage("请选取"),
|
||||
"please_select_an_image" : MessageLookupByLibrary.simpleMessage("请选取一张图片"),
|
||||
"point" : MessageLookupByLibrary.simpleMessage("积分"),
|
||||
"point_of_sale_system_solution" : MessageLookupByLibrary.simpleMessage("收款系统方案"),
|
||||
"postal_code" : MessageLookupByLibrary.simpleMessage("邮政编码"),
|
||||
"postal_code_is_required" : MessageLookupByLibrary.simpleMessage("邮政编码必填"),
|
||||
"previous" : MessageLookupByLibrary.simpleMessage("上一步"),
|
||||
"price" : MessageLookupByLibrary.simpleMessage("价格"),
|
||||
"privacy_policy" : MessageLookupByLibrary.simpleMessage("私隐条款"),
|
||||
"product_insufficient" : MessageLookupByLibrary.simpleMessage("该产品数量不足。"),
|
||||
"products" : MessageLookupByLibrary.simpleMessage("产品"),
|
||||
"profile" : MessageLookupByLibrary.simpleMessage("个人资料"),
|
||||
"promotions" : MessageLookupByLibrary.simpleMessage("推广"),
|
||||
"province" : MessageLookupByLibrary.simpleMessage("省份"),
|
||||
"pull_up_to_load_more" : MessageLookupByLibrary.simpleMessage("上拉加载更多"),
|
||||
"purchase_renew_service" : MessageLookupByLibrary.simpleMessage("购买/续期服务"),
|
||||
"quick_input" : MessageLookupByLibrary.simpleMessage("快速输入"),
|
||||
"radio_option_is_optional" : MessageLookupByLibrary.simpleMessage("可选选项。如果不选择可以直接点下一步。"),
|
||||
"radio_option_is_required" : MessageLookupByLibrary.simpleMessage("选项必选。选择一个选项后点下一步。"),
|
||||
"radio_option_select_token" : m24,
|
||||
"recalculating" : MessageLookupByLibrary.simpleMessage("运算中..."),
|
||||
"red_coupon" : MessageLookupByLibrary.simpleMessage("红包"),
|
||||
"redeem_coupon" : MessageLookupByLibrary.simpleMessage("去使用"),
|
||||
"register" : MessageLookupByLibrary.simpleMessage("注册"),
|
||||
"registration" : MessageLookupByLibrary.simpleMessage("注册"),
|
||||
"release_to_load_more" : MessageLookupByLibrary.simpleMessage("松开载入"),
|
||||
"renew_license" : MessageLookupByLibrary.simpleMessage("证书续期"),
|
||||
"renewal_fee" : MessageLookupByLibrary.simpleMessage("续订费用"),
|
||||
"reply" : MessageLookupByLibrary.simpleMessage("回复"),
|
||||
"reset_password" : MessageLookupByLibrary.simpleMessage("重置密码"),
|
||||
"reset_password_desc" : MessageLookupByLibrary.simpleMessage("输入您想要的新密码两次。"),
|
||||
"reset_password_success" : MessageLookupByLibrary.simpleMessage("重置密码成功"),
|
||||
"response_from_store" : MessageLookupByLibrary.simpleMessage("店家回复"),
|
||||
"return_policy" : MessageLookupByLibrary.simpleMessage("退货条款"),
|
||||
"revise_user_profile" : MessageLookupByLibrary.simpleMessage("修改用户信息"),
|
||||
"sat" : MessageLookupByLibrary.simpleMessage("周六"),
|
||||
"saturday" : MessageLookupByLibrary.simpleMessage("星期六"),
|
||||
"save" : MessageLookupByLibrary.simpleMessage("保存"),
|
||||
"schedule_delivery" : MessageLookupByLibrary.simpleMessage("预约送货时间"),
|
||||
"search_place" : MessageLookupByLibrary.simpleMessage("搜索地址"),
|
||||
"search_product" : MessageLookupByLibrary.simpleMessage("搜索产品"),
|
||||
"search_products" : MessageLookupByLibrary.simpleMessage("搜索产品"),
|
||||
"select" : MessageLookupByLibrary.simpleMessage("选取"),
|
||||
"select_a_payment_method" : MessageLookupByLibrary.simpleMessage("选择付款方式"),
|
||||
"select_a_plan" : MessageLookupByLibrary.simpleMessage("选择一个计划"),
|
||||
"select_canada_post_shipping_rate" : MessageLookupByLibrary.simpleMessage("请选择加拿大邮政运费。"),
|
||||
"select_delivery_time" : MessageLookupByLibrary.simpleMessage("选择配送时间"),
|
||||
"select_document_lanuage" : MessageLookupByLibrary.simpleMessage("选择一种语言"),
|
||||
"select_document_type" : MessageLookupByLibrary.simpleMessage("选择一种文件类型"),
|
||||
"select_options" : MessageLookupByLibrary.simpleMessage("选择选项"),
|
||||
"service_descritpion" : MessageLookupByLibrary.simpleMessage("服务描述"),
|
||||
"service_fee" : MessageLookupByLibrary.simpleMessage("服务费"),
|
||||
"service_policy" : MessageLookupByLibrary.simpleMessage("服务条款"),
|
||||
"set_password" : MessageLookupByLibrary.simpleMessage("设置密码"),
|
||||
"set_password_desc" : MessageLookupByLibrary.simpleMessage("输入您想要的密码两次。"),
|
||||
"shipping_time_will_schedule" : MessageLookupByLibrary.simpleMessage("配送时间无法确定。通常我们会尽快送出。如果您希望在某时配送,请在备注里注明。"),
|
||||
"shop" : MessageLookupByLibrary.simpleMessage("线上购买"),
|
||||
"show_less" : MessageLookupByLibrary.simpleMessage("显示更少"),
|
||||
"show_more" : MessageLookupByLibrary.simpleMessage("显示更多"),
|
||||
"sold_per_month_token" : m25,
|
||||
"specification" : MessageLookupByLibrary.simpleMessage("规格"),
|
||||
"store" : MessageLookupByLibrary.simpleMessage("店家"),
|
||||
"store_closed" : MessageLookupByLibrary.simpleMessage("商店已关"),
|
||||
"store_delivery" : MessageLookupByLibrary.simpleMessage("商家配送"),
|
||||
"store_introduction" : MessageLookupByLibrary.simpleMessage("店家简介"),
|
||||
"store_policy" : MessageLookupByLibrary.simpleMessage("商家政策"),
|
||||
"street_line_1" : MessageLookupByLibrary.simpleMessage("街道名称第一行"),
|
||||
"street_line_1_is_required" : MessageLookupByLibrary.simpleMessage("街道名称第一行必填"),
|
||||
"street_line_2" : MessageLookupByLibrary.simpleMessage("街道名称第二行"),
|
||||
"submit" : MessageLookupByLibrary.simpleMessage("提交"),
|
||||
"submit_to_change" : MessageLookupByLibrary.simpleMessage("提交修改"),
|
||||
"submit_to_generate" : MessageLookupByLibrary.simpleMessage("提交生成"),
|
||||
"submitting" : MessageLookupByLibrary.simpleMessage("提交中..."),
|
||||
"submitting_please_wait" : MessageLookupByLibrary.simpleMessage("提交中,清稍候..."),
|
||||
"subtotal" : MessageLookupByLibrary.simpleMessage("小计"),
|
||||
"subtotal_token" : m26,
|
||||
"success" : MessageLookupByLibrary.simpleMessage("成功"),
|
||||
"sun" : MessageLookupByLibrary.simpleMessage("周日"),
|
||||
"sunday" : MessageLookupByLibrary.simpleMessage("星期日"),
|
||||
"support" : MessageLookupByLibrary.simpleMessage("技术支持"),
|
||||
"support_ticket" : MessageLookupByLibrary.simpleMessage("客户提问"),
|
||||
"table_token" : m27,
|
||||
"tap_back_again_to_exit" : MessageLookupByLibrary.simpleMessage("再次点击返回退出"),
|
||||
"tax" : MessageLookupByLibrary.simpleMessage("税费"),
|
||||
"thank_you_for_your_comment" : MessageLookupByLibrary.simpleMessage("谢谢您的评价。"),
|
||||
"the_address_has_been_deleted" : MessageLookupByLibrary.simpleMessage("地址成功删除"),
|
||||
"the_email_is_same_as_current" : MessageLookupByLibrary.simpleMessage("电子邮箱和当前的是一样的。"),
|
||||
"the_mobile_number_is_same_as_current" : MessageLookupByLibrary.simpleMessage("手机号码和当前的是一样的。"),
|
||||
"the_ticket_is_closed_desc" : MessageLookupByLibrary.simpleMessage("该支持票已经关闭。如果您还有问题,请创建新的支持票。"),
|
||||
"this_field_is_required" : MessageLookupByLibrary.simpleMessage("该字段必填。"),
|
||||
"thu" : MessageLookupByLibrary.simpleMessage("周四"),
|
||||
"thursday" : MessageLookupByLibrary.simpleMessage("星期四"),
|
||||
"ticket_created_success" : MessageLookupByLibrary.simpleMessage("支持票成功创建。"),
|
||||
"ticket_number_token" : m28,
|
||||
"today" : MessageLookupByLibrary.simpleMessage("今天"),
|
||||
"today_with_time" : m29,
|
||||
"toll_free" : MessageLookupByLibrary.simpleMessage("无费号码:"),
|
||||
"tomorrow" : MessageLookupByLibrary.simpleMessage("明天"),
|
||||
"tomorrow_with_time" : m30,
|
||||
"total" : MessageLookupByLibrary.simpleMessage("总计"),
|
||||
"tue" : MessageLookupByLibrary.simpleMessage("周二"),
|
||||
"tuesday" : MessageLookupByLibrary.simpleMessage("星期二"),
|
||||
"tutorials" : MessageLookupByLibrary.simpleMessage("教程"),
|
||||
"wiki" : MessageLookupByLibrary.simpleMessage("维基")
|
||||
"type_your_order_remark" : MessageLookupByLibrary.simpleMessage("输入订单备注"),
|
||||
"ubereats_receipt" : MessageLookupByLibrary.simpleMessage("UberEats收据"),
|
||||
"under_renovation" : MessageLookupByLibrary.simpleMessage("本店还在装修"),
|
||||
"unpaid" : MessageLookupByLibrary.simpleMessage("未付款"),
|
||||
"update_success" : MessageLookupByLibrary.simpleMessage("更新成功"),
|
||||
"user_account_created_success" : MessageLookupByLibrary.simpleMessage("用户账号成功创建"),
|
||||
"user_registration" : MessageLookupByLibrary.simpleMessage("用户注册"),
|
||||
"user_registration_desc" : MessageLookupByLibrary.simpleMessage("请输入您的手机号码,然后单击“获取验证码”按钮。"),
|
||||
"verification_code" : MessageLookupByLibrary.simpleMessage("验证码"),
|
||||
"verification_code_is_required" : MessageLookupByLibrary.simpleMessage("必须输入验证码"),
|
||||
"verification_code_sent" : MessageLookupByLibrary.simpleMessage("验证码已经发送。"),
|
||||
"verify" : MessageLookupByLibrary.simpleMessage("验证"),
|
||||
"view_blog" : MessageLookupByLibrary.simpleMessage("查看博客"),
|
||||
"view_on_google_map" : MessageLookupByLibrary.simpleMessage("在谷歌地图打开"),
|
||||
"view_ticket" : MessageLookupByLibrary.simpleMessage("查看支持票"),
|
||||
"wallet" : MessageLookupByLibrary.simpleMessage("钱包"),
|
||||
"warning" : MessageLookupByLibrary.simpleMessage("注意"),
|
||||
"wechatpay" : MessageLookupByLibrary.simpleMessage("微信支付"),
|
||||
"wed" : MessageLookupByLibrary.simpleMessage("周三"),
|
||||
"wednesday" : MessageLookupByLibrary.simpleMessage("星期三"),
|
||||
"weight_token" : m31,
|
||||
"wiki" : MessageLookupByLibrary.simpleMessage("维基"),
|
||||
"wrong_payment_verification_code" : MessageLookupByLibrary.simpleMessage("错误的付款码,请查证后再输入。"),
|
||||
"yes" : MessageLookupByLibrary.simpleMessage("是的"),
|
||||
"yes_i_am_sure" : MessageLookupByLibrary.simpleMessage("是的!我确定。"),
|
||||
"you_have_no_orders_yet" : MessageLookupByLibrary.simpleMessage("您还没有订单"),
|
||||
"your_basket_is_empty" : MessageLookupByLibrary.simpleMessage("您的购物篮是空的"),
|
||||
"your_group" : MessageLookupByLibrary.simpleMessage("您的集团"),
|
||||
"your_question_issue" : MessageLookupByLibrary.simpleMessage("您的问题"),
|
||||
"your_reply" : MessageLookupByLibrary.simpleMessage("您的回复")
|
||||
};
|
||||
}
|
||||
|
||||
@@ -30,5 +30,367 @@
|
||||
"login": "Login",
|
||||
"logout": "Logout",
|
||||
"download_with_token": "Download at {oss}",
|
||||
"install_in_store": "Install in store"
|
||||
"install_in_store": "Install in store",
|
||||
"igoshow": "iGoShow",
|
||||
"mobile_email_username": "Mobile, Email or MiniOffice username",
|
||||
"this_field_is_required": "This field is required.",
|
||||
"password": "Password",
|
||||
"password_is_required": "Password is required.",
|
||||
"new_user_question": "New user?",
|
||||
"forgot_password_question": "Forgot password?",
|
||||
"error": "Error",
|
||||
"ok": "OK",
|
||||
"please_login": "Please login",
|
||||
"login_instruction": "If you have already registered an account, please use the following form to login.\nIf you are a MiniOffice user, you can directly enter your MiniOffice username and password to login.",
|
||||
"me": "Me",
|
||||
"wallet": "Wallet",
|
||||
"red_coupon": "Coupon",
|
||||
"point": "Points",
|
||||
"my_favorites": "My favorites",
|
||||
"my_addresses": "My addresses",
|
||||
"my_cards": "My cards",
|
||||
"my_support": "My support",
|
||||
"warning": "Warning",
|
||||
"email_needed": "Email needed",
|
||||
"cancel": "Cancel",
|
||||
"business_cooperation": "Business cooperation",
|
||||
"change_password": "Change password",
|
||||
"old_password": "Old password",
|
||||
"current_password_is_required": "Current password is required.",
|
||||
"password_again": "Password again",
|
||||
"password_is_not_match_password_again": "Password and confirm password does not match.",
|
||||
"submit": "Submit",
|
||||
"success": "Success",
|
||||
"password_has_been_changed": "Password has been changed",
|
||||
"profile": "Profile",
|
||||
"basic_info": "Basic info.",
|
||||
"avatar": "Avatar",
|
||||
"nick_name": "Nick name",
|
||||
"account_binding": "Account binding",
|
||||
"mobile_number": "Mobile number",
|
||||
"not_binding": "Not binding",
|
||||
"email": "Email",
|
||||
"get_picture": "Get picture",
|
||||
"get_picture_from": "Get picture from...",
|
||||
"gallery": "Gallery",
|
||||
"camera": "Camera",
|
||||
"please_select": "Please select",
|
||||
"please_select_an_image": "Please select an image",
|
||||
"select": "Select",
|
||||
"error_read_file": "Error occurred while reading the file.",
|
||||
"change_nickname": "Change nickname",
|
||||
"enter_new_nickname": "Enter new nickname",
|
||||
"nickname_is_required": "Nickname is required",
|
||||
"submit_to_change": "Submit to change",
|
||||
"are_you_sure_to_logout": "Are you sure you want to logout?",
|
||||
"yes_i_am_sure": "Yes! I am sure.",
|
||||
"registration": "Registration",
|
||||
"user_registration": "User registration",
|
||||
"mobile_or_email": "Mobile or email",
|
||||
"mobile_or_email_is_required": "Mobile or email is required",
|
||||
"verification_code": "Verification code",
|
||||
"verification_code_is_required": "Verification code is required",
|
||||
"register": "Register",
|
||||
"get_code": "Get code",
|
||||
"verification_code_sent": "Verification code has been sent.",
|
||||
"enter_mobile_or_email": "Enter mobile or email",
|
||||
"get_code_token": "Retry after {second}s",
|
||||
"get_code_again": "Get code again",
|
||||
"credit_debit_card": "Credit or debit card",
|
||||
"credit_card": "Credit card",
|
||||
"alipay": "Alipay",
|
||||
"wechatpay": "Wechat pay",
|
||||
"paypal": "Paypal",
|
||||
"pay_on_deliery_pickup": "Pay on delivery or pickup",
|
||||
"pay_on_deliery": "Pay on delivery",
|
||||
"set_password": "Set password",
|
||||
"user_account_created_success": "User account created success",
|
||||
"forgot_password": "Forgot password",
|
||||
"reset_password": "Reset password",
|
||||
"verify": "Verify",
|
||||
"reset_password_success": "Reset password success",
|
||||
"change_mobile": "Change mobile number",
|
||||
"change_email": "Change email address",
|
||||
"mobile_is_required": "Mobile is required",
|
||||
"email_is_required": "Email is required",
|
||||
"the_mobile_number_is_same_as_current": "The mobile number is the same as the current one.",
|
||||
"the_email_is_same_as_current": "The email is the same as the current one.",
|
||||
"update_success": "Updated success",
|
||||
"edit_address": "Edit address",
|
||||
"no_address_yet": "You have not entered any address.",
|
||||
"contact_name": "Contact name",
|
||||
"contact_name_is_required": "Contact name is required",
|
||||
"mr": "Mr.",
|
||||
"ms": "Ms.",
|
||||
"mobile_phone_number": "Mobile number",
|
||||
"mobile_phone_number_is_required": "Mobile number is required",
|
||||
"street_line_1": "Street line 1",
|
||||
"street_line_1_is_required": "Street line 1 is required",
|
||||
"street_line_2": "Street line 2",
|
||||
"city": "City",
|
||||
"city_is_required": "City is required",
|
||||
"province": "Province",
|
||||
"postal_code": "Postal code",
|
||||
"postal_code_is_required": "Postal code is required",
|
||||
"optional_information": "Optional Info.",
|
||||
"email_is_not_valid": "Email is not valid",
|
||||
"fax": "Fax",
|
||||
"delete": "Delete",
|
||||
"are_you_sure_to_delete_the_address": "Are you sure you want to delete the address?",
|
||||
"save": "Save",
|
||||
"the_address_has_been_deleted": "The address has been deleted.",
|
||||
"search_place": "Search place",
|
||||
"enter_delivery_address": "Enter delivery address",
|
||||
"empty_address_change_keyword": "No address found. Tap here to skip address lookup.",
|
||||
"empty_result_change_keyword": "No data found, please change keyword and try again.",
|
||||
"new_address": "New address",
|
||||
"change_password_desc": "Please enter the old password and your desired new password.",
|
||||
"back": "Back",
|
||||
"revise_user_profile": "Revise user profile",
|
||||
"learn_more_about_minipos": "Learn more about MiniPOS",
|
||||
"learn_more_about_igoshow": "Learn more about iGoShow",
|
||||
"downloads": "Downloads",
|
||||
"user_registration_desc": "Please enter your mobile phone number then click the 'Get code' button to get the validation code.",
|
||||
"forgot_password_description": "Enter the Email or mobile number you used when registering, and then click the 'Get code' button to get the validation code.",
|
||||
"change_mobile_desc": "Enter your new mobile number, and then click 'Get code' button to get the validation code.",
|
||||
"change_email_desc": "Enter your new Email, and then click 'Get code' button to get the validation code.",
|
||||
"add_new_address": "Add new address",
|
||||
"no_ticket_yet": "There is no ticket yet. If you have any question/issue please tap the plus icon above to create a ticket.",
|
||||
"today_with_time": "Today {time}",
|
||||
"tomorrow_with_time": "Tomorrow {time}",
|
||||
"followups_token": "{num} follow-ups",
|
||||
"pull_up_to_load_more": "Pull up to load more",
|
||||
"load_failed_retry": "Load failed, please retry",
|
||||
"release_to_load_more": "Release to load more",
|
||||
"no_more_record": "No more record",
|
||||
"add_new_ticket": "Create a new ticket",
|
||||
"new_ticket": "New ticket",
|
||||
"add_new_ticket_desc": "Please enter your question.",
|
||||
"your_question_issue": "Your question/issue",
|
||||
"are_you_sure_to_remove_the_picture": "Are you sure you want to remove the picture?",
|
||||
"attach_pictures": "Attach pictures",
|
||||
"attach_pictures_desc": "Upload pictures(screen shot) to make your question clearer.",
|
||||
"ticket_created_success": "Ticket has been created successfully.",
|
||||
"view_ticket": "View ticket",
|
||||
"ticket_number_token": "Ticket #{num}",
|
||||
"close": "Close",
|
||||
"follow_ups": "Follow ups",
|
||||
"reply": "Reply",
|
||||
"the_ticket_is_closed_desc": "The ticket has been closed. If you still have questions, please create a new ticket.",
|
||||
"your_reply": "Your reply",
|
||||
"no_blog_yet": "There is no blog to show yet.",
|
||||
"view_blog": "View blog",
|
||||
"reset_password_desc": "Enter the new password you desired twice.",
|
||||
"set_password_desc": "Enter the password you desired twice.",
|
||||
"order_more": "{minprice} more",
|
||||
"select_options": "Select options",
|
||||
"previous": "Previous",
|
||||
"next": "Next",
|
||||
"finish": "Finish",
|
||||
"radio_option_select_token": "Please choice {optionName}.",
|
||||
"radio_option_is_required": "Option is required. Select an option then tap Next.",
|
||||
"radio_option_is_optional": "Optional. You can tap Next without selection.",
|
||||
"check_option_select_token": "Multiple choice {optionName}",
|
||||
"check_option_is_required": "Option is required. Select at lease an option then tap Next.",
|
||||
"check_option_is_optional": "Optional. You can tap Next without selection.",
|
||||
"checkout": "Check out",
|
||||
"are_you_sure_to_remove_the_item": "Are you sure you want to remove the item?",
|
||||
"out_of_stock": "Out of stock",
|
||||
"product_insufficient": "The product quantity is insufficient.",
|
||||
"your_basket_is_empty": "Your basket is empty.",
|
||||
"empty_basket": "Empty basket",
|
||||
"delivery_fee": "Delivery fee {shippingfee}+",
|
||||
"are_you_sure_to_empty_basket": "Are you sure you want to empty the basket?",
|
||||
"search_product": "Search product",
|
||||
"search_products": "Search products",
|
||||
"enter_product_keyword": "Enter product keyword",
|
||||
"promotions": "Promotions",
|
||||
"products": "Products",
|
||||
"comments": "Comments",
|
||||
"no_comments_yet": "No comments yet",
|
||||
"response_from_store": "Response from store",
|
||||
"show_more": "Show more",
|
||||
"show_less": "Show less",
|
||||
"hour_token": "{hours, plural, one{1 hr} other{{hours} hrs}}",
|
||||
"minute_token": "{minutes, plural, one{1 min} other{{minutes} mins}}",
|
||||
"min_order_amount_token": "${minamount}+",
|
||||
"min_shipping_fee": "Delivery ${shipfee}+",
|
||||
"store_introduction": "Store introduction",
|
||||
"store_policy": "Store policy",
|
||||
"sold_per_month_token": " {sold_qty} sold/mo",
|
||||
"detail": "Detail",
|
||||
"specification": "Specification",
|
||||
"weight_token": "Weight: {weight}",
|
||||
"dimentions_token": "Dimentions: {length}(L)x{width}(W)x{height}(H)",
|
||||
"loading": "Loading...",
|
||||
"store_closed": "Store closed",
|
||||
"closed": "Closed",
|
||||
"book_now_delivery_later_token": "Order now and delivery start at {hour}:00.",
|
||||
"confirm_order": "Order confirmation",
|
||||
"delivery": "Delivery",
|
||||
"pickup": "Pickup",
|
||||
"delivery_now": "Delivery ASAP",
|
||||
"end_of_the_list": "End of the list",
|
||||
"hot_sale": "Hot sale",
|
||||
"featured_product": "Featured",
|
||||
"ocr_scan": "OCR scan",
|
||||
"from_camera": "From camera",
|
||||
"from_gallery": "From gallery",
|
||||
"feature_not_available_web": "This feature is not available on the web. Please install the App version.",
|
||||
"document_type": "Document type",
|
||||
"ubereats_receipt": "UberEats receipt",
|
||||
"business_card": "Business card",
|
||||
"select_document_type": "Select a document type",
|
||||
"english": "English",
|
||||
"chinese_simplified": "Chinese simplified",
|
||||
"chinese_traditional": "Chinese tranditional",
|
||||
"document_langage": "Document language",
|
||||
"select_document_lanuage": "Select a language",
|
||||
"submit_to_generate": "Submit to generate",
|
||||
"add_to_basket": "Add to basket",
|
||||
"no_delivery_method": "No shipping method available.",
|
||||
"under_renovation": "The store is under renovation",
|
||||
"pay_now": "Pay now",
|
||||
"canada_post": "Canada Post",
|
||||
"canada_post_delivery": "Canada Post delivery",
|
||||
"table_token": "Table#: {num}",
|
||||
"number_of_people": "Number of people",
|
||||
"pickup_at": "Please pickup at",
|
||||
"delivery_unavailable": "Delivery time",
|
||||
"select_delivery_time": "Select delivery time",
|
||||
"credit_coupon": "Credit/Coupon",
|
||||
"subtotal_token": "Subtotal: {subtotal}",
|
||||
"subtotal": "Subtotal",
|
||||
"extra_fee_token": "{name}({rate}%)",
|
||||
"total": "Total",
|
||||
"checkout_no_deliver": "We don't deliver at this time.",
|
||||
"payment_method": "Payment method",
|
||||
"order_remark": "Order remark",
|
||||
"please_provide_shipping_address": "Please provide shipping address.",
|
||||
"over_delivery_distance": "The address is beyond the scope of delivery.",
|
||||
"pickup_discount": "Pickup discount",
|
||||
"service_fee": "Service fee",
|
||||
"pending": "Pending",
|
||||
"order_acceipt": "Accept",
|
||||
"order_processing": "Processing",
|
||||
"order_complete": "Complete",
|
||||
"order_cancelled": "Cancelled",
|
||||
"my_orders": "My orders",
|
||||
"and_more_item_token": "and {qty} items more",
|
||||
"order_again": "Order again",
|
||||
"order_detail": "Order detail",
|
||||
"delivery_info": "Delivery Info.",
|
||||
"delivery_address": "Delivery address",
|
||||
"pickup_address": "Pickup address",
|
||||
"schedule_delivery": "Schedule delivery",
|
||||
"delivery_method": "Delivery method",
|
||||
"store_delivery": "Store delivery",
|
||||
"order_info": "Order info.",
|
||||
"order_number": "Order No.",
|
||||
"amount_not_meet": "The order amount does not meet the minimum requirements.",
|
||||
"select_canada_post_shipping_rate": "Please select Canada Post shipping rate.",
|
||||
"mon": "Mon",
|
||||
"monday": "Monday",
|
||||
"tue": "Tue",
|
||||
"tuesday": "Tuesday",
|
||||
"wed": "Wed",
|
||||
"wednesday": "Wednesday",
|
||||
"thu": "Thu",
|
||||
"thursday": "Thursday",
|
||||
"fri": "Fri",
|
||||
"friday": "Friday",
|
||||
"sat": "Sat",
|
||||
"saturday": "Saturday",
|
||||
"sun": "Sun",
|
||||
"sunday": "Sunday",
|
||||
"today": "Today",
|
||||
"tomorrow": "Tomorrow",
|
||||
"shipping_time_will_schedule": "Delivery time cannot be determined. Usually we will send it out as soon as possible. If you wish to deliver at a certain time, please state in the remarks.",
|
||||
"select_a_payment_method": "Select a payment method",
|
||||
"payment_method_not_set": "No payment method specified. Please pay on delivery or pickup.",
|
||||
"no_coupon_available": "No coupon available",
|
||||
"percentage_discount_token": "{discount}%off",
|
||||
"discount_amount_token": "-${discount}",
|
||||
"pick_a_coupon": "Pick a coupon",
|
||||
"dont_use": "Do not redeem",
|
||||
"percentage_discount_token2": "-${amount}({discount}%off)",
|
||||
"type_your_order_remark": "Type your order remark",
|
||||
"quick_input": "Quick input",
|
||||
"light_tase": "Light tase",
|
||||
"no_spicy": "No spicy",
|
||||
"no_onion": "No onion",
|
||||
"no_pickle": "No pickle",
|
||||
"enter_coupon_code": "Enter coupon code",
|
||||
"please_enter_coupon_code": "Please enter a coupon code.",
|
||||
"get_coupon": "Get coupon",
|
||||
"percent_discount": "%OFF",
|
||||
"expiration_date_token": "Expires on {expirationDate}",
|
||||
"no_restriction": "No restriction",
|
||||
"no_expiration": "No expiration",
|
||||
"redeem_coupon": "Redeem",
|
||||
"choose_a_shipping_rate": "Choose a shipping rate",
|
||||
"payment_amount": "Payment amount",
|
||||
"pay_later": "Pay later",
|
||||
"pay_after_meal": "Pay after meal",
|
||||
"pay_with_existing_cards": "Pay with existing cards",
|
||||
"add_credit_card": "Add credit card",
|
||||
"this_credit_card_is_invalid": "This credit card is invalid",
|
||||
"expire_token": "Exp: {mon}/{yer}",
|
||||
"confirmation": "Confirmation",
|
||||
"are_you_sure_to_remove_the_card": "Are you srue you want to remove the credit card?",
|
||||
"payment_verification": "Payment verification",
|
||||
"payment_verification_sent": "Payment verification code has been sent to your mobile phone {mobile}. Please enter the verification code below.",
|
||||
"wrong_payment_verification_code": "Wrong payment verification code. Please check and enter again.",
|
||||
"pay_with": "Pay with",
|
||||
"pay_with_token": "Pay with {method}",
|
||||
"you_have_no_orders_yet": "You have no orders yet",
|
||||
"comment": "Comment",
|
||||
"delivery_guy": "Delivery guy",
|
||||
"delivery_distance_token": "The delivery guy are {km} away from the customer, and it will take about {time} to deliver.",
|
||||
"copy": "Copy",
|
||||
"order_number_copied_to_clipboard": "Order number copied to clipboard",
|
||||
"online_payment": "Online payment",
|
||||
"order_datetime": "Order datetime",
|
||||
"payment_status": "Payment status",
|
||||
"paid": "Paid",
|
||||
"unpaid": "Unpaid",
|
||||
"order_fulfillment": "Order fulfillment",
|
||||
"cancel_order": "Cancel order",
|
||||
"store": "Store",
|
||||
"customer": "Customer",
|
||||
"are_you_sure_to_cancel_the_order": "Are you sure you want to cancel the order?",
|
||||
"no": "No",
|
||||
"yes": "Yes",
|
||||
"pay": "Pay",
|
||||
"no_instance_delivery_desc": "Tracking information will be provided when available.",
|
||||
"comment_empty": "Please type your comment.",
|
||||
"thank_you_for_your_comment": "Thank you for your comment.",
|
||||
"add_pictures": "Add pictures",
|
||||
"input_your_comment": "Input your comment",
|
||||
"new_comment": "New comment",
|
||||
"coupons": "Coupons",
|
||||
"general_coupon": "General coupon",
|
||||
"available_for_order_over_token": "Available for order over ${value}",
|
||||
"includes": "Includes",
|
||||
"by_email": "By Emails",
|
||||
"by_phone": "By phone",
|
||||
"address": "Address",
|
||||
"view_on_google_map": "View on Google maps",
|
||||
"toll_free": "Toll free: ",
|
||||
"group_number_can_be_found": "Group number can be found...",
|
||||
"group_number": "Group number",
|
||||
"please_enter_group_number": "Please enter your group number.",
|
||||
"group_license_renewal": "Group Lisence Renewal",
|
||||
"renewal_fee": "Renewal fee",
|
||||
"tax": "Tax",
|
||||
"pay_amount_token": "Pay ${amount} now",
|
||||
"expired_at": "Expired at",
|
||||
"after_renewed": "After renewal",
|
||||
"expiration_date": "Expiration date",
|
||||
"purchase_renew_service": "Purchase/Renew service",
|
||||
"service_descritpion": "Service description",
|
||||
"your_group": "Your group",
|
||||
"current_plan": "Current plan",
|
||||
"select_a_plan": "Select a plan",
|
||||
"price": "Price"
|
||||
}
|
||||
@@ -30,5 +30,363 @@
|
||||
"login": "登入",
|
||||
"logout": "登出",
|
||||
"download_with_token": "在{oss}下载",
|
||||
"install_in_store": "店内安装"
|
||||
"install_in_store": "店内安装",
|
||||
"igoshow": "iGoShow",
|
||||
"mobile_email_username": "手机号码,Email或MiniOffice用户名",
|
||||
"this_field_is_required": "该字段必填。",
|
||||
"password": "密码",
|
||||
"password_is_required": "密码必填。",
|
||||
"new_user_question": "新用户?",
|
||||
"forgot_password_question": "忘记密码?",
|
||||
"error": "错误",
|
||||
"ok": "确定",
|
||||
"please_login": "请登陆",
|
||||
"login_instruction": "如果您已经注册了账号,请使用如下表单登陆。\n如果您是MiniOffice的用户,您可直接输入您的MiniOffice用户名和密码登陆。",
|
||||
"me": "我的",
|
||||
"wallet": "钱包",
|
||||
"red_coupon": "红包",
|
||||
"point": "积分",
|
||||
"my_favorites": "我的收藏",
|
||||
"my_addresses": "我的地址",
|
||||
"my_cards": "我的卡",
|
||||
"my_support": "支持",
|
||||
"warning": "注意",
|
||||
"email_needed": "需要电子邮箱",
|
||||
"cancel": "取消",
|
||||
"business_cooperation": "商业合作",
|
||||
"change_password": "修改密码",
|
||||
"old_password": "旧密码",
|
||||
"current_password_is_required": "需要当前密码",
|
||||
"password_again": "再输入密码",
|
||||
"password_is_not_match_password_again": "两次输入密码不一致。",
|
||||
"submit": "提交",
|
||||
"success": "成功",
|
||||
"password_has_been_changed": "密码修改成功",
|
||||
"profile": "个人资料",
|
||||
"basic_info": "基本信息",
|
||||
"avatar": "头像",
|
||||
"nick_name": "昵称",
|
||||
"account_binding": "账号绑定",
|
||||
"mobile_number": "手机号码",
|
||||
"not_binding": "未绑定",
|
||||
"email": "电子邮箱",
|
||||
"get_picture": "获取图片",
|
||||
"get_picture_from": "从...获取图片",
|
||||
"gallery": "图库",
|
||||
"camera": "相机",
|
||||
"please_select": "请选取",
|
||||
"please_select_an_image": "请选取一张图片",
|
||||
"select": "选取",
|
||||
"error_read_file": "读取文件过程中出错。",
|
||||
"change_nickname": "修改昵称",
|
||||
"enter_new_nickname": "输入新昵称",
|
||||
"nickname_is_required": "昵称不能为空",
|
||||
"submit_to_change": "提交修改",
|
||||
"are_you_sure_to_logout": "您确定要登出吗?",
|
||||
"yes_i_am_sure": "是的!我确定。",
|
||||
"registration": "注册",
|
||||
"user_registration": "用户注册",
|
||||
"mobile_or_email": "手机号码或电子邮箱",
|
||||
"mobile_or_email_is_required": "必须输入手机号码或电子邮箱地址",
|
||||
"verification_code": "验证码",
|
||||
"verification_code_is_required": "必须输入验证码",
|
||||
"register": "注册",
|
||||
"get_code": "获取验证码",
|
||||
"verification_code_sent": "验证码已经发送。",
|
||||
"enter_mobile_or_email": "输入手机号码或电子邮箱地址",
|
||||
"get_code_token": "{second}秒后重试",
|
||||
"get_code_again": "重新获取验证码",
|
||||
"credit_debit_card": "信用卡或银行卡",
|
||||
"credit_card": "信用卡",
|
||||
"alipay": "支付宝",
|
||||
"wechatpay": "微信支付",
|
||||
"paypal": "Paypal",
|
||||
"pay_on_deliery_pickup": "自提或到货付款",
|
||||
"pay_on_deliery": "到货付款",
|
||||
"set_password": "设置密码",
|
||||
"user_account_created_success": "用户账号成功创建",
|
||||
"forgot_password": "忘记密码",
|
||||
"reset_password": "重置密码",
|
||||
"verify": "验证",
|
||||
"reset_password_success": "重置密码成功",
|
||||
"change_mobile": "修改手机号码",
|
||||
"change_email": "修改电子邮箱",
|
||||
"mobile_is_required": "手机号码必填",
|
||||
"email_is_required": "电子邮箱必填",
|
||||
"the_mobile_number_is_same_as_current": "手机号码和当前的是一样的。",
|
||||
"the_email_is_same_as_current": "电子邮箱和当前的是一样的。",
|
||||
"update_success": "更新成功",
|
||||
"edit_address": "修改地址",
|
||||
"no_address_yet": "您还没有输入任何地址。",
|
||||
"contact_name": "联系人姓名",
|
||||
"contact_name_is_required": "联系人姓名必填",
|
||||
"mr": "先生",
|
||||
"ms": "女士",
|
||||
"mobile_phone_number": "手机号码",
|
||||
"mobile_phone_number_is_required": "手机号码必填",
|
||||
"street_line_1": "街道名称第一行",
|
||||
"street_line_1_is_required": "街道名称第一行必填",
|
||||
"street_line_2": "街道名称第二行",
|
||||
"city": "城市",
|
||||
"city_is_required": "城市必填",
|
||||
"province": "省份",
|
||||
"postal_code": "邮政编码",
|
||||
"postal_code_is_required": "邮政编码必填",
|
||||
"optional_information": "可选填信息",
|
||||
"email_is_not_valid": "电子邮箱无效",
|
||||
"fax": "传真",
|
||||
"delete": "删除",
|
||||
"are_you_sure_to_delete_the_address": "您确定要删除该地址吗?",
|
||||
"save": "保存",
|
||||
"the_address_has_been_deleted": "地址成功删除",
|
||||
"search_place": "搜索地址",
|
||||
"enter_delivery_address": "输入送货地址",
|
||||
"empty_address_change_keyword": "找不到地址。点击这里跳过地址搜索。",
|
||||
"empty_result_change_keyword": "找不到您需要的数据,请改变关键字再试。",
|
||||
"new_address": "添加新地址",
|
||||
"change_password_desc": "请输入旧密码和希望的新密码。",
|
||||
"back": "返回",
|
||||
"revise_user_profile": "修改用户信息",
|
||||
"learn_more_about_minipos": "详细了解MiniPOS",
|
||||
"learn_more_about_igoshow": "详细了解iGoShow",
|
||||
"downloads": "下载",
|
||||
"user_registration_desc": "请输入您的手机号码,然后单击“获取验证码”按钮。",
|
||||
"forgot_password_description": "输入您注册时用的Email或手机号码,然后点击‘获取验证码’ 按钮。",
|
||||
"change_mobile_desc": "输入新的手机号码,然后点击'获取验证码'按钮。",
|
||||
"change_email_desc": "输入新的Email,然后点击'获取验证码'按钮。",
|
||||
"add_new_address": "添加新地址",
|
||||
"today_with_time": "今天{time}",
|
||||
"tomorrow_with_time": "明天{time}",
|
||||
"followups_token": "{num}条回复",
|
||||
"pull_up_to_load_more": "上拉加载更多",
|
||||
"load_failed_retry": "载入失败,请重试。",
|
||||
"release_to_load_more": "松开载入",
|
||||
"no_more_record": "没有更多记录了",
|
||||
"add_new_ticket": "创建一个新的支持票",
|
||||
"new_ticket": "新的支持票",
|
||||
"add_new_ticket_desc": "请输入您的问题。您还可以上传文件或图片来使您的提问更清楚。",
|
||||
"your_question_issue": "您的问题",
|
||||
"are_you_sure_to_remove_the_picture": "您确定要移除该图片吗?",
|
||||
"attach_pictures": "图片附件",
|
||||
"attach_pictures_desc": "建议附上图片(屏幕截图)让问题更清楚。",
|
||||
"ticket_created_success": "支持票成功创建。",
|
||||
"view_ticket": "查看支持票",
|
||||
"ticket_number_token": "票号 #{num}",
|
||||
"close": "关闭",
|
||||
"follow_ups": "跟进",
|
||||
"reply": "回复",
|
||||
"the_ticket_is_closed_desc": "该支持票已经关闭。如果您还有问题,请创建新的支持票。",
|
||||
"your_reply": "您的回复",
|
||||
"no_blog_yet": "尚无要显示的博客。",
|
||||
"view_blog": "查看博客",
|
||||
"reset_password_desc": "输入您想要的新密码两次。",
|
||||
"set_password_desc": "输入您想要的密码两次。",
|
||||
"order_more": "还差{minprice}起送",
|
||||
"select_options": "选择选项",
|
||||
"previous": "上一步",
|
||||
"next": "下一步",
|
||||
"finish": "完成",
|
||||
"radio_option_select_token": "请选择{optionName}",
|
||||
"radio_option_is_required": "选项必选。选择一个选项后点下一步。",
|
||||
"radio_option_is_optional": "可选选项。如果不选择可以直接点下一步。",
|
||||
"check_option_select_token": "多项选择{optionName}",
|
||||
"check_option_is_required": "选项必选。选择至少一项再点击下一步。",
|
||||
"check_option_is_optional": "可选选项。如果不选择可以直接点下一步。",
|
||||
"checkout": "去结算",
|
||||
"are_you_sure_to_remove_the_item": "您确定要移除该物品吗?",
|
||||
"out_of_stock": "脱销",
|
||||
"product_insufficient": "该产品数量不足。",
|
||||
"your_basket_is_empty": "您的购物篮是空的",
|
||||
"empty_basket": "清空购物篮",
|
||||
"delivery_fee": "配送费{shippingfee}起",
|
||||
"are_you_sure_to_empty_basket": "您确定要清空购物篮吗?",
|
||||
"search_product": "搜索产品",
|
||||
"search_products": "搜索产品",
|
||||
"enter_product_keyword": "输入产品关键字",
|
||||
"promotions": "推广",
|
||||
"products": "产品",
|
||||
"comments": "评价",
|
||||
"no_comments_yet": "还没评价",
|
||||
"response_from_store": "店家回复",
|
||||
"show_more": "显示更多",
|
||||
"show_less": "显示更少",
|
||||
"hour_token": "{hours, plural, one{1小时} other{{hours}小时}}",
|
||||
"minute_token": "{minutes, plural, one{1分钟} other{{minutes}分钟}}",
|
||||
"min_order_amount_token": "${minamount}起送",
|
||||
"min_shipping_fee": "配送费${shipfee}起",
|
||||
"store_introduction": "店家简介",
|
||||
"store_policy": "商家政策",
|
||||
"sold_per_month_token": " 月售{sold_qty}单",
|
||||
"detail": "详细描述",
|
||||
"specification": "规格",
|
||||
"weight_token": "重量:{weight}",
|
||||
"dimentions_token": "尺寸:{length}(L)x{width}(W)x{height}(H)",
|
||||
"loading": "装载中...",
|
||||
"store_closed": "商店已关",
|
||||
"book_now_delivery_later_token": "现在预定,{hour}:00后开始配送。",
|
||||
"confirm_order": "订单确定",
|
||||
"delivery": "外卖配送",
|
||||
"pickup": "到店自提",
|
||||
"delivery_now": "立刻配送",
|
||||
"end_of_the_list": "全部加载",
|
||||
"hot_sale": "热卖",
|
||||
"featured_product": "特色产品",
|
||||
"ocr_scan": "OCR扫描",
|
||||
"from_camera": "手机照相机",
|
||||
"from_gallery": "手机图库",
|
||||
"feature_not_available_web": "该功能在网页版上不能用。请下载App版本。",
|
||||
"document_type": "文件类型",
|
||||
"ubereats_receipt": "UberEats收据",
|
||||
"business_card": "名片",
|
||||
"select_document_type": "选择一种文件类型",
|
||||
"english": "英文",
|
||||
"chinese_simplified": "简体中文",
|
||||
"chinese_traditional": "繁体中文",
|
||||
"document_langage": "文档语言",
|
||||
"select_document_lanuage": "选择一种语言",
|
||||
"submit_to_generate": "提交生成",
|
||||
"add_to_basket": "放入购物篮",
|
||||
"no_delivery_method": "没有可用的送货方式",
|
||||
"under_renovation": "本店还在装修",
|
||||
"pay_now": "去支付",
|
||||
"canada_post": "加拿大邮政",
|
||||
"canada_post_delivery": "加拿大邮政配送",
|
||||
"table_token": "桌号:{num}",
|
||||
"number_of_people": "人数",
|
||||
"pickup_at": "自提地址",
|
||||
"delivery_unavailable": "配送时间",
|
||||
"select_delivery_time": "选择配送时间",
|
||||
"credit_coupon": "红包/抵用券",
|
||||
"subtotal_token": "小计:{subtotal}",
|
||||
"subtotal": "小计",
|
||||
"extra_fee_token": "{name}({rate}%)",
|
||||
"total": "总计",
|
||||
"checkout_no_deliver": "现在这时间我们不派送。",
|
||||
"payment_method": "付款方式",
|
||||
"order_remark": "订单备注",
|
||||
"please_provide_shipping_address": "请提供收货地址",
|
||||
"over_delivery_distance": "地址超出配送范围",
|
||||
"pickup_discount": "自提折扣",
|
||||
"service_fee": "服务费",
|
||||
"pending": "待接单",
|
||||
"order_acceipt": "已接单",
|
||||
"order_processing": "准备中",
|
||||
"order_complete": "已完成",
|
||||
"order_cancelled": "已取消",
|
||||
"my_orders": "我的订单",
|
||||
"and_more_item_token": "等{qty}件",
|
||||
"order_again": "再来一单",
|
||||
"order_detail": "订单详情",
|
||||
"delivery_info": "配送信息",
|
||||
"delivery_address": "收货地址",
|
||||
"pickup_address": "自提地址",
|
||||
"schedule_delivery": "预约送货时间",
|
||||
"delivery_method": "配送方式",
|
||||
"store_delivery": "商家配送",
|
||||
"order_info": "订单信息",
|
||||
"order_number": "订单号码",
|
||||
"amount_not_meet": "订单金额没有达到最低要求。",
|
||||
"select_canada_post_shipping_rate": "请选择加拿大邮政运费。",
|
||||
"mon": "周一",
|
||||
"monday": "星期一",
|
||||
"tue": "周二",
|
||||
"tuesday": "星期二",
|
||||
"wed": "周三",
|
||||
"wednesday": "星期三",
|
||||
"thu": "周四",
|
||||
"thursday": "星期四",
|
||||
"fri": "周五",
|
||||
"friday": "星期五",
|
||||
"sat": "周六",
|
||||
"saturday": "星期六",
|
||||
"sun": "周日",
|
||||
"sunday": "星期日",
|
||||
"today": "今天",
|
||||
"tomorrow": "明天",
|
||||
"shipping_time_will_schedule": "配送时间无法确定。通常我们会尽快送出。如果您希望在某时配送,请在备注里注明。",
|
||||
"select_a_payment_method": "选择付款方式",
|
||||
"payment_method_not_set": "没有指定付款方式,请货到付款或自提付款。",
|
||||
"no_coupon_available": "无可用红包",
|
||||
"percentage_discount_token": "{discount}%折扣",
|
||||
"discount_amount_token": "-${discount}",
|
||||
"pick_a_coupon": "使用红包",
|
||||
"dont_use": "不使用",
|
||||
"percentage_discount_token2": "-${amount}({discount}%折扣)",
|
||||
"type_your_order_remark": "输入订单备注",
|
||||
"quick_input": "快速输入",
|
||||
"light_tase": "清淡口味",
|
||||
"no_spicy": "不要辣",
|
||||
"no_onion": "不要洋葱",
|
||||
"no_pickle": "不要泡菜",
|
||||
"enter_coupon_code": "输入红包号码",
|
||||
"please_enter_coupon_code": "请输入红包号码。",
|
||||
"get_coupon": "获取红包",
|
||||
"percent_discount": "%折扣",
|
||||
"expiration_date_token": "{expirationDate}到期",
|
||||
"no_restriction": "无门槛",
|
||||
"redeem_coupon": "去使用",
|
||||
"choose_a_shipping_rate": "选择运费",
|
||||
"payment_amount": "付款金额",
|
||||
"pay_later": "稍后付款",
|
||||
"pay_after_meal": "餐后付款",
|
||||
"pay_with_existing_cards": "用现有的卡付款",
|
||||
"expire_token": "到期:{mon}/{yer}",
|
||||
"confirmation": "请确定",
|
||||
"are_you_sure_to_remove_the_card": "您确定要移除该信用卡吗?",
|
||||
"payment_verification": "付款验证",
|
||||
"payment_verification_sent": "付款码已经发送到您的手机{mobile}。请在下面输入付款码。",
|
||||
"wrong_payment_verification_code": "错误的付款码,请查证后再输入。",
|
||||
"pay_with": "使用",
|
||||
"pay_with_token": "使用{method}付款",
|
||||
"you_have_no_orders_yet": "您还没有订单",
|
||||
"comment": "评价",
|
||||
"delivery_guy": "配送员",
|
||||
"delivery_distance_token": "配送员离您{km},大概需时{time}送达。",
|
||||
"copy": "复制",
|
||||
"order_number_copied_to_clipboard": "订单号码复制到剪切板",
|
||||
"online_payment": "在线付款",
|
||||
"order_datetime": "下单时间",
|
||||
"payment_status": "付款状态",
|
||||
"paid": "已付款",
|
||||
"unpaid": "未付款",
|
||||
"order_fulfillment": "订单完成度",
|
||||
"cancel_order": "取消订单",
|
||||
"store": "店家",
|
||||
"customer": "客户",
|
||||
"are_you_sure_to_cancel_the_order": "您确定要取消该订单吗?",
|
||||
"no": "不是",
|
||||
"yes": "是的",
|
||||
"pay": "付款",
|
||||
"no_instance_delivery_desc": "跟踪信息将在可用时提供。",
|
||||
"comment_empty": "请输入您的评价。",
|
||||
"thank_you_for_your_comment": "谢谢您的评价。",
|
||||
"add_pictures": "晒照片",
|
||||
"input_your_comment": "写下您的评价",
|
||||
"new_comment": "新的评价",
|
||||
"coupons": "优惠券",
|
||||
"general_coupon": "通用优惠券",
|
||||
"available_for_order_over_token": "订单满${value}可用",
|
||||
"includes": "包含",
|
||||
"by_email": "电子邮箱",
|
||||
"by_phone": "联系电话",
|
||||
"address": "地址",
|
||||
"view_on_google_map": "在谷歌地图打开",
|
||||
"toll_free": "无费号码:",
|
||||
"group_number_can_be_found": "按如下图找到集团号码...",
|
||||
"group_number": "集团号码",
|
||||
"please_enter_group_number": "请输入您的集团号码。",
|
||||
"group_license_renewal": "集团许可续订",
|
||||
"renewal_fee": "续订费用",
|
||||
"tax": "税费",
|
||||
"pay_amount_token": "马上付款 ${amount}",
|
||||
"expired_at": "到期日期",
|
||||
"after_renewed": "续约后",
|
||||
"expiration_date": "到期日期",
|
||||
"purchase_renew_service": "购买/续期服务",
|
||||
"service_descritpion": "服务描述",
|
||||
"your_group": "您的集团",
|
||||
"current_plan": "当前计划",
|
||||
"select_a_plan": "选择一个计划",
|
||||
"price": "价格",
|
||||
"no_ticket_yet": "还没有支持票。 如果您有任何疑问/问题,请点击上方的加号图标以创建支持票。"
|
||||
}
|
||||
126
lib/main.dart
@@ -1,48 +1,106 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:catcher/catcher.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_device_locale/flutter_device_locale.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||
import 'package:flutter_redux/flutter_redux.dart';
|
||||
import 'package:flutter_wisetronic/pages/buy_service.dart';
|
||||
import 'package:geolocator/geolocator.dart' as geolocator;
|
||||
import 'package:url_strategy/url_strategy.dart';
|
||||
import 'models/located_address.dart';
|
||||
import 'pages/me.dart';
|
||||
import 'package:pull_to_refresh/pull_to_refresh.dart';
|
||||
import 'package:splashscreen/splashscreen.dart';
|
||||
// import 'package:uni_links/uni_links.dart';
|
||||
|
||||
import 'constants.dart';
|
||||
import 'events/eventbus.dart';
|
||||
import 'events/events.dart';
|
||||
import 'generated/l10n.dart';
|
||||
import 'pages/home.dart';
|
||||
import 'pages/plain_page.dart';
|
||||
import 'pages/renew_minioffice.dart';
|
||||
import 'routes.dart';
|
||||
import 'store/actions.dart';
|
||||
import 'store/store.dart';
|
||||
import 'utils/configure_nonweb.dart' if (dart.library.html) 'utils/configure_web.dart';
|
||||
import 'utils/http_util.dart';
|
||||
import 'utils/util_io.dart' if (dart.library.html) 'utils/util_web.dart';
|
||||
|
||||
void main() async {
|
||||
void main() {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
Locale locale = await DeviceLocale.getCurrentLocale();
|
||||
|
||||
runApp(MyApp(locale));
|
||||
// Enable configureApp will cause route problem.
|
||||
// configureApp();
|
||||
setPathUrlStrategy();
|
||||
runApp(MyApp());
|
||||
}
|
||||
|
||||
class MyApp extends StatelessWidget {
|
||||
final Locale localLocate;
|
||||
String _to = '/';
|
||||
|
||||
MyApp(this.localLocate) {
|
||||
MyApp() {
|
||||
Routes.configure();
|
||||
store.dispatch(UpdateLocale(localLocate));
|
||||
Util().init();
|
||||
// getCurrentPosition();
|
||||
}
|
||||
|
||||
static getCurrentPosition() async {
|
||||
bool serviceEnabled;
|
||||
geolocator.LocationPermission permission;
|
||||
|
||||
serviceEnabled = await geolocator.Geolocator.isLocationServiceEnabled();
|
||||
if (!serviceEnabled) {
|
||||
print('Location services are disabled');
|
||||
return;
|
||||
}
|
||||
|
||||
permission = await geolocator.Geolocator.checkPermission();
|
||||
if (permission == geolocator.LocationPermission.deniedForever) {
|
||||
print(
|
||||
'Location permissions are permantly denied, we cannot request permissions.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (permission == geolocator.LocationPermission.denied) {
|
||||
permission = await geolocator.Geolocator.requestPermission();
|
||||
if (permission != geolocator.LocationPermission.whileInUse &&
|
||||
permission != geolocator.LocationPermission.always) {
|
||||
print(
|
||||
'Location permissions are denied (actual value: $permission).');
|
||||
return;
|
||||
}
|
||||
geolocator.Position geoPosition = await geolocator.Geolocator.getCurrentPosition(
|
||||
desiredAccuracy: geolocator.LocationAccuracy.high);
|
||||
HttpUtil.httpGet('v1/getposition',
|
||||
queryParameters: {
|
||||
'latitude': geoPosition.latitude.toString(),
|
||||
'longitude': geoPosition.longitude.toString(),
|
||||
},
|
||||
).then((value) {
|
||||
print('value: $value');
|
||||
store.dispatch(UpdateLocatedAddress(LocatedAddress.fromJson(value)));
|
||||
}).catchError((error) {
|
||||
print('error get address: $error');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// This widget is the root of your application.
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
Widget _buildBody() {
|
||||
return SplashScreen(
|
||||
seconds: 5,
|
||||
routeName: '/',
|
||||
navigateAfterSeconds: Home(localLocate, title: 'Welcome',),
|
||||
routeName: _to,
|
||||
navigateAfterSeconds: Home(title: Constants.APP_TITLE,),
|
||||
styleTextUnderTheLoader: new TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 20.0,
|
||||
),
|
||||
// imageBackground: (Image.network(Constants.BASE_API_URL + 'gallery/get-wisetronic-slpash')).image,
|
||||
imageBackground: (new Image.network(Constants.BASE_API_URL + 'gallery/get-minimanager-splash/')).image,
|
||||
imageBackground: (Image.network(Constants.BASE_API_URL + 'gallery/get-minimanager-splash/')).image,
|
||||
backgroundColor: Colors.white,
|
||||
onClick: () {
|
||||
|
||||
@@ -63,21 +121,59 @@ class MyApp extends StatelessWidget {
|
||||
],
|
||||
supportedLocales: S.delegate.supportedLocales,
|
||||
localeResolutionCallback: (Locale locale, Iterable<Locale> supportedLocales) {
|
||||
print('Language code: ${localLocate.languageCode}');
|
||||
print('Language code: ${locale.languageCode}, Country code: ${locale.countryCode}');
|
||||
for (final supportedLocale in supportedLocales) {
|
||||
if (supportedLocale.languageCode == localLocate.languageCode) {
|
||||
if (supportedLocale.languageCode == locale.languageCode) {
|
||||
store.dispatch(UpdateLocale(locale));
|
||||
return supportedLocale;
|
||||
}
|
||||
}
|
||||
store.dispatch(UpdateLocale(supportedLocales.first));
|
||||
return supportedLocales.first;
|
||||
},
|
||||
onGenerateRoute: (RouteSettings settings) {
|
||||
final List<String> pathElements = settings.name.split('/');
|
||||
print('path elements: $pathElements');
|
||||
if (pathElements[0] != '') {
|
||||
return null;
|
||||
}
|
||||
if (pathElements[1] == 'me') {
|
||||
return MaterialPageRoute(
|
||||
builder: (BuildContext context) => Me()
|
||||
);
|
||||
}
|
||||
if (pathElements[1] == 'privacy-policy') {
|
||||
return MaterialPageRoute(
|
||||
builder: (BuildContext context) =>
|
||||
PlainPage(
|
||||
'privacy-policy',
|
||||
// businessId: Constants.BUSINESS_ID,
|
||||
businessId: 310,
|
||||
),
|
||||
);
|
||||
}
|
||||
if (pathElements[1] == 'renew-minioffice') {
|
||||
return MaterialPageRoute(builder: (BuildContext context) =>
|
||||
RenewMiniOffice(int.parse(pathElements[2]))
|
||||
);
|
||||
}
|
||||
if (pathElements[1] == 'buy-service') {
|
||||
return MaterialPageRoute(builder: (BuildContext context) =>
|
||||
BuyService(int.parse(pathElements[2]), pathElements[3])
|
||||
);
|
||||
}
|
||||
return MaterialPageRoute(
|
||||
builder: (BuildContext context) =>
|
||||
Home(title: Constants.APP_TITLE,),
|
||||
);
|
||||
},
|
||||
title: 'Wisetronic Inc.',
|
||||
theme: ThemeData(
|
||||
primarySwatch: Colors.blue,
|
||||
),
|
||||
home: StoreProvider(
|
||||
store: store,
|
||||
child: _buildBody(),
|
||||
child: Home(title: Constants.APP_TITLE,),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
66
lib/models/Subproduct.dart
Normal file
@@ -0,0 +1,66 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter_wisetronic/models/product_attribute.dart';
|
||||
|
||||
class Subproduct {
|
||||
int id;
|
||||
SimpleProduct product;
|
||||
double quantity;
|
||||
|
||||
Subproduct.fromJson(Map<String, dynamic> json) :
|
||||
id = json['id'],
|
||||
product = SimpleProduct.fromJson(json['product']),
|
||||
quantity = double.parse(json['quantity'].toString());
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'product': product,
|
||||
'quantity': quantity,
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
|
||||
class SimpleProduct {
|
||||
int id;
|
||||
String name;
|
||||
String sku;
|
||||
double price;
|
||||
String description;
|
||||
String image;
|
||||
List<ProductAttribute> productAttributes;
|
||||
double customerLastPrice;
|
||||
String extraData;
|
||||
|
||||
SimpleProduct.fromJson(Map<String, dynamic> json) :
|
||||
id = json['id'],
|
||||
name = json['name'],
|
||||
sku = json['sku'],
|
||||
price = double.parse(json['price'].toString()),
|
||||
description = json['description'],
|
||||
image = json['image'],
|
||||
productAttributes = (json['productattributes'] as List).map((i) => ProductAttribute.fromJson(i)).toList(),
|
||||
customerLastPrice = double.parse(json['customer_last_price'].toString()),
|
||||
extraData = json['extra_data'];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'name': name,
|
||||
'sku': sku,
|
||||
'price': price,
|
||||
'description': description,
|
||||
'image': image,
|
||||
'productattributes': productAttributes,
|
||||
'customer_last_price': customerLastPrice,
|
||||
'extra_data': extraData,
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
59
lib/models/address.dart
Normal file
@@ -0,0 +1,59 @@
|
||||
import 'dart:convert';
|
||||
|
||||
class Address {
|
||||
int id;
|
||||
String addressLine1;
|
||||
String addressLine2;
|
||||
String city;
|
||||
String state;
|
||||
String country;
|
||||
String zip;
|
||||
String phone;
|
||||
String fax;
|
||||
String email;
|
||||
String contactName;
|
||||
int gender;
|
||||
String lat;
|
||||
String lng;
|
||||
String fullAddress;
|
||||
|
||||
Address.fromJson(Map<String, dynamic> json)
|
||||
: id = json['id'],
|
||||
addressLine1 = json['address_line1'],
|
||||
addressLine2 = json['address_line2'],
|
||||
city = json['city'],
|
||||
state = json['state'],
|
||||
country = json['country'],
|
||||
zip = json['zip'],
|
||||
phone = json['phone'],
|
||||
fax = json['fax'],
|
||||
email = json['email'],
|
||||
contactName = json['name'],
|
||||
gender = json['gender'],
|
||||
lat = json['lat'],
|
||||
lng = json['lng'],
|
||||
fullAddress = json['full_address'];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'address_line1': addressLine1,
|
||||
'address_line2': addressLine2,
|
||||
'city': city,
|
||||
'state': state,
|
||||
'country': country,
|
||||
'zip': zip,
|
||||
'phone': phone,
|
||||
'fax': fax,
|
||||
'email': email,
|
||||
'name': contactName,
|
||||
'gender': gender,
|
||||
'lat': lat,
|
||||
'lng': lng,
|
||||
'full_address': fullAddress,
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
58
lib/models/blog.dart
Normal file
@@ -0,0 +1,58 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
class Section {
|
||||
int id;
|
||||
String name;
|
||||
|
||||
Section.fromJson(Map<String, dynamic> json) :
|
||||
id = json['id'],
|
||||
name = json['name'];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'name': name,
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
|
||||
class Blog {
|
||||
int id;
|
||||
String title;
|
||||
String body;
|
||||
String createdAt;
|
||||
String thumbUrl;
|
||||
String imageUrl;
|
||||
String videoUrl;
|
||||
Section section;
|
||||
|
||||
Blog.fromJson(Map<String, dynamic> json) :
|
||||
id = json['id'],
|
||||
title = json['title'],
|
||||
body = json['body'],
|
||||
createdAt = json['created_at'],
|
||||
thumbUrl = json['thumb_url'],
|
||||
imageUrl = json['image_url'],
|
||||
videoUrl = json['video_url'],
|
||||
section = Section.fromJson(json['section']);
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'title': title,
|
||||
'body': body,
|
||||
'created_at': createdAt,
|
||||
'thumb_url': thumbUrl,
|
||||
'image_url': imageUrl,
|
||||
'video_url': videoUrl,
|
||||
'section': section,
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
32
lib/models/booking_date_time.dart
Normal file
@@ -0,0 +1,32 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
import 'booking_time.dart';
|
||||
|
||||
class BookingDateTime {
|
||||
String viewDate;
|
||||
int unixTime;
|
||||
String sendTimeTip;
|
||||
List<BookingTime> bookTimes;
|
||||
|
||||
BookingDateTime(this.viewDate, this.unixTime, this.sendTimeTip, this.bookTimes);
|
||||
|
||||
BookingDateTime.fromJson(Map<String, dynamic> json)
|
||||
: viewDate = json['view_date'],
|
||||
unixTime = int.parse(json['unix_time'].toString()),
|
||||
sendTimeTip = json['send_time_tip'],
|
||||
bookTimes = (json['book_times'] as List).map((e) => BookingTime.fromJson(e)).toList();
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'view_date': viewDate,
|
||||
'unix_time': unixTime,
|
||||
'send_time_tip': sendTimeTip,
|
||||
'book_times': bookTimes,
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
|
||||
}
|
||||
27
lib/models/booking_time.dart
Normal file
@@ -0,0 +1,27 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
class BookingTime {
|
||||
String viewTime;
|
||||
int unixTime;
|
||||
String sendTimeTip;
|
||||
|
||||
BookingTime(this.viewTime, this.unixTime, this.sendTimeTip);
|
||||
|
||||
BookingTime.fromJson(Map<String, dynamic> json)
|
||||
: viewTime = json['view_time'],
|
||||
unixTime = int.parse(json['unix_time'].toString()),
|
||||
sendTimeTip = json['send_time_tip'];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'view_time': viewTime,
|
||||
'unix_time': unixTime,
|
||||
'send_time_tip': sendTimeTip,
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
|
||||
}
|
||||
164
lib/models/business.dart
Normal file
@@ -0,0 +1,164 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'address.dart';
|
||||
import 'business_time.dart';
|
||||
import 'distance_info.dart';
|
||||
import 'image_url.dart';
|
||||
import 'product.dart';
|
||||
import 'waiting_line.dart';
|
||||
|
||||
class QuickInput {
|
||||
String value;
|
||||
QuickInput.fromJson(Map<String, dynamic> json)
|
||||
: value = json['value'];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'value': value
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
|
||||
class Business {
|
||||
int id;
|
||||
String name;
|
||||
String phone;
|
||||
Address address;
|
||||
String fullAddress;
|
||||
String picUrl;
|
||||
int status;
|
||||
List<BusinessTime> openingTime;
|
||||
double shippingFee;
|
||||
double packageFee;
|
||||
double minPrice;
|
||||
int shippingTime;
|
||||
int monthSales;
|
||||
String bulletin;
|
||||
int category;
|
||||
bool isLike;
|
||||
String description;
|
||||
String policy;
|
||||
String bannerImageUrl;
|
||||
int todayOpen;
|
||||
int todayClose;
|
||||
bool showMonthlySold;
|
||||
List<ImageUrl> slideImages;
|
||||
List<Product> promoProducts;
|
||||
String paypalEmail;
|
||||
bool deliveryCanadaPost;
|
||||
bool deliveryStoreDelivery;
|
||||
bool deliveryPickup;
|
||||
String currency;
|
||||
List<WaitingLine> waitingLine;
|
||||
bool enableWaitingLine;
|
||||
double pointsToCreditsConversionRate;
|
||||
String chaseXLogin;
|
||||
String chaseTransactionKey;
|
||||
String chaseResponseKey;
|
||||
DistanceInfo distanceInfo;
|
||||
int commentsCount;
|
||||
bool forceClose;
|
||||
bool isPublic;
|
||||
double referrerCoupon;
|
||||
bool instanceDelivery;
|
||||
List<QuickInput> quickInputs;
|
||||
|
||||
Business.fromJson(Map<String, dynamic> json)
|
||||
: id = json['id'],
|
||||
name = json['name'],
|
||||
phone = json['phone'],
|
||||
address = Address.fromJson(json['address']),
|
||||
fullAddress = json['full_address'],
|
||||
picUrl = json['pic_url'],
|
||||
status = json['status'],
|
||||
openingTime = (json['opening_time'] as List).map((i) => BusinessTime.fromJson(i)).toList(),
|
||||
shippingFee = double.parse(json['shipping_fee'].toString()),
|
||||
packageFee = double.parse(json['package_fee'].toString()),
|
||||
minPrice = double.parse(json['min_price'].toString()),
|
||||
shippingTime = json['shipping_time'],
|
||||
monthSales = json['month_sales'],
|
||||
bulletin = json['bulletin'],
|
||||
category = json['category'],
|
||||
isLike = json['is_like'],
|
||||
description = json['description'],
|
||||
policy = json['policy'],
|
||||
bannerImageUrl = json['banner_image_url'],
|
||||
todayOpen = json['today_open'],
|
||||
todayClose = json['today_close'],
|
||||
showMonthlySold = json['show_monthly_sold'],
|
||||
slideImages = (json['slide_images'] as List).map((i) => ImageUrl.fromJson(i)).toList(),
|
||||
promoProducts = (json['promo_products'] as List).map((i) => Product.fromJson(i)).toList(),
|
||||
paypalEmail = json['paypal_email'],
|
||||
deliveryCanadaPost = json['delivery_canada_post'],
|
||||
deliveryStoreDelivery = json['delivery_store_delivery'],
|
||||
deliveryPickup = json['delivery_pickup'],
|
||||
currency = json['currency'],
|
||||
|
||||
waitingLine = (json['waiting_line'] as List).map((i) => WaitingLine.fromJson(i)).toList(),
|
||||
|
||||
enableWaitingLine = json['enable_waiting_line'],
|
||||
pointsToCreditsConversionRate = double.parse(json['points_to_credits_conversion_rate'].toString()),
|
||||
chaseXLogin = json['chase_x_login'],
|
||||
chaseTransactionKey = json['chase_transaction_key'],
|
||||
chaseResponseKey = json['chase_response_key'],
|
||||
distanceInfo = json['distance_info'] != null ? DistanceInfo.fromJson(json['distance_info']) : null,
|
||||
commentsCount = json['comments_count'],
|
||||
forceClose = json['force_close'],
|
||||
isPublic = json['is_public'],
|
||||
referrerCoupon = double.parse(json['customer_referrer_coupon_amount'].toString()),
|
||||
instanceDelivery = json['instance_delivery'],
|
||||
quickInputs = (json['quick_inputs'] as List).map((i) => QuickInput.fromJson(i)).toList();
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'name': name,
|
||||
'phone': phone,
|
||||
'address': address,
|
||||
'full_address': fullAddress,
|
||||
'pic_url': picUrl,
|
||||
'status': status,
|
||||
'opening_time': openingTime,
|
||||
'shipping_fee': shippingFee,
|
||||
'package_fee': packageFee,
|
||||
'min_price': minPrice,
|
||||
'shipping_time': shippingTime,
|
||||
'month_sales': monthSales,
|
||||
'bulletin': bulletin,
|
||||
'category': category,
|
||||
'is_like': isLike,
|
||||
'description': description,
|
||||
'policy': policy,
|
||||
'banner_image_url': bannerImageUrl,
|
||||
'today_open': todayOpen,
|
||||
'today_close': todayClose,
|
||||
'show_monthly_sold': showMonthlySold,
|
||||
'slide_images': slideImages,
|
||||
'promo_products': promoProducts,
|
||||
'paypal_email': paypalEmail,
|
||||
'delivery_canada_post': deliveryCanadaPost,
|
||||
'delivery_store_delivery': deliveryStoreDelivery,
|
||||
'delivery_pickup': deliveryPickup,
|
||||
'currency': currency,
|
||||
'waiting_line': waitingLine,
|
||||
'enable_waiting_line': enableWaitingLine,
|
||||
'points_to_credits_conversion_rate': pointsToCreditsConversionRate,
|
||||
'chase_x_login': chaseXLogin,
|
||||
'chase_transaction_key': chaseTransactionKey,
|
||||
'chase_response_key': chaseResponseKey,
|
||||
'distance_info': distanceInfo,
|
||||
'comments_count': commentsCount,
|
||||
'force_close': forceClose,
|
||||
'is_public': isPublic,
|
||||
'customer_referrer_coupon_amount': referrerCoupon,
|
||||
'instance_delivery': instanceDelivery,
|
||||
'quick_inputs': quickInputs
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
20
lib/models/business_time.dart
Normal file
@@ -0,0 +1,20 @@
|
||||
import 'dart:convert';
|
||||
|
||||
class BusinessTime {
|
||||
String openTime;
|
||||
String closeTime;
|
||||
|
||||
BusinessTime.fromJson(Map<String, dynamic> json)
|
||||
: openTime = json['open_time'],
|
||||
closeTime = json['close_time'];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'open_time': openTime,
|
||||
'close_time': closeTime
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
94
lib/models/cart_info.dart
Normal file
@@ -0,0 +1,94 @@
|
||||
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
import 'business.dart';
|
||||
import 'cart_line_item.dart';
|
||||
import 'extra_fee.dart';
|
||||
|
||||
class CartInfo {
|
||||
int id;
|
||||
double originPrice;
|
||||
double discountPrice;
|
||||
double totalPrice;
|
||||
Business businessInfo;
|
||||
List<CartLineItem> productList;
|
||||
List<ExtraFee> extraFeeList;
|
||||
List<ExtraFee> discountList;
|
||||
int deliveryMethod;
|
||||
String shippingMethod;
|
||||
double amountPaid;
|
||||
String extraData;
|
||||
|
||||
CartInfo.fromJson(Map<String, dynamic> json)
|
||||
: id = json['id'],
|
||||
originPrice = json['origin_price'] != null ? double.parse(json['origin_price'].toString()) : 0.0,
|
||||
discountPrice = json['discount_price'] != null ? double.parse(json['discount_price'].toString()) : 0.0,
|
||||
totalPrice = json['total_price'] != null ? double.parse(json['total_price'].toString()) : 0.0,
|
||||
businessInfo = json['business_info'] != null ? Business.fromJson(json['business_info']) : null,
|
||||
productList = (json['product_list'] as List).map((i) => CartLineItem.fromJson(i)).toList(),
|
||||
extraFeeList = (json['extra_fee_list'] as List).map((i) => ExtraFee.fromJson(i)).toList(),
|
||||
discountList = (json['discount_list'] as List).map((e) => ExtraFee.fromJson(e)).toList(),
|
||||
deliveryMethod = json['delivery_method'],
|
||||
shippingMethod = json['shipping_method'],
|
||||
amountPaid = double.parse(json['amount_paid'].toString()),
|
||||
extraData = json['extra_data'];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'origin_price': originPrice,
|
||||
'discount_price': discountPrice,
|
||||
'total_price': totalPrice,
|
||||
'business_info': businessInfo,
|
||||
'product_list': productList,
|
||||
'extra_fee_list': extraFeeList,
|
||||
'discount_list': discountList,
|
||||
'delivery_method': deliveryMethod,
|
||||
'shipping_method': shippingMethod,
|
||||
'amount_paid': amountPaid,
|
||||
'extra_data': extraData,
|
||||
};
|
||||
|
||||
addToCart(CartLineItem item) {
|
||||
if (productList == null) {
|
||||
productList = [item];
|
||||
} else {
|
||||
productList.add(item);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
removeFromCart() {
|
||||
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
|
||||
CartInfo();
|
||||
|
||||
double getTotalPrice() {
|
||||
double newTotal = 0.0;
|
||||
originPrice = 0.0;
|
||||
discountPrice = 0.0;
|
||||
totalPrice = 0.0;
|
||||
for (var i = 0; i < productList.length; i++) {
|
||||
newTotal += productList[i].getTotalPrice();
|
||||
}
|
||||
originPrice = newTotal;
|
||||
totalPrice = newTotal;
|
||||
return totalPrice;
|
||||
}
|
||||
|
||||
int getProductListTotalQuantity() {
|
||||
int qty = 0;
|
||||
if (productList != null && productList.length > 0) {
|
||||
for (var i = 0; i < productList.length; i++) {
|
||||
qty += productList[i].quantity.round();
|
||||
}
|
||||
}
|
||||
return qty;
|
||||
}
|
||||
}
|
||||
54
lib/models/cart_line_item.dart
Normal file
@@ -0,0 +1,54 @@
|
||||
|
||||
|
||||
import 'dart:convert';
|
||||
import 'package:uuid/uuid.dart';
|
||||
|
||||
import 'product.dart';
|
||||
|
||||
class CartLineItem {
|
||||
int id;
|
||||
double unitPrice;
|
||||
double totalPrice;
|
||||
Product product;
|
||||
String name;
|
||||
String description;
|
||||
double quantity;
|
||||
String uuid;
|
||||
String parentUuid;
|
||||
|
||||
CartLineItem() {
|
||||
uuid = Uuid().v4();
|
||||
}
|
||||
|
||||
CartLineItem.fromJson(Map<String, dynamic> json)
|
||||
: id = json['id'],
|
||||
unitPrice = double.parse(json['unit_price'].toString()),
|
||||
totalPrice = json['total_price'] != null ? double.parse(json['total_price'].toString()) : double.parse(json['unit_price'].toString()) * double.parse(json['quantity'].toString()),
|
||||
product = json['product'] != null ? Product.fromJson(json['product']) : null,
|
||||
name = json['name'],
|
||||
description = json['description'],
|
||||
quantity = double.parse(json['quantity'].toString()),
|
||||
uuid = Uuid().v4();
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'unit_price': unitPrice,
|
||||
'total_price': totalPrice,
|
||||
'product': product,
|
||||
'name': name,
|
||||
'description': description,
|
||||
'quantity': quantity,
|
||||
'uuid': uuid,
|
||||
'parentUuid': parentUuid
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
|
||||
double getTotalPrice() {
|
||||
totalPrice = unitPrice * quantity;
|
||||
return totalPrice;
|
||||
}
|
||||
}
|
||||
21
lib/models/category.dart
Normal file
@@ -0,0 +1,21 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
class Category {
|
||||
int id;
|
||||
String name;
|
||||
|
||||
Category.fromJson(Map<String, dynamic> json)
|
||||
: id = json['id'],
|
||||
name = json['name'];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'name': name,
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
38
lib/models/category_products.dart
Normal file
@@ -0,0 +1,38 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
import 'product.dart';
|
||||
|
||||
class CategoryProducts {
|
||||
int id;
|
||||
int businessId;
|
||||
String name;
|
||||
String description;
|
||||
String iconUrl;
|
||||
List<Product> products;
|
||||
|
||||
CategoryProducts.fromJson(Map<String, dynamic> json)
|
||||
: id = json['id'],
|
||||
businessId = json['business_id'],
|
||||
name = json['name'],
|
||||
description = json['description'],
|
||||
iconUrl = json['icon_url'],
|
||||
products = (json['products'] as List).map((i) => Product.fromJson(i)).toList();
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'business_id': businessId,
|
||||
'name': name,
|
||||
'description': description,
|
||||
'icon_url': iconUrl,
|
||||
'products': products
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
|
||||
CategoryProducts(this.id, this.businessId, this.name, this.description,
|
||||
this.iconUrl, this.products);
|
||||
}
|
||||
44
lib/models/comment.dart
Normal file
@@ -0,0 +1,44 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
import 'product_image.dart';
|
||||
|
||||
class Comment {
|
||||
int id;
|
||||
String contact;
|
||||
String content;
|
||||
int rating;
|
||||
List<ProductImage> images;
|
||||
String createdAt;
|
||||
int thumbUp;
|
||||
int thumbDown;
|
||||
String replyFromStore;
|
||||
|
||||
Comment.fromJson(Map<String, dynamic> json) :
|
||||
id = json['id'],
|
||||
contact = json['contact'],
|
||||
content = json['content'],
|
||||
rating = json['rating'],
|
||||
images = (json['images'] as List).map((e) => ProductImage.fromJson(e)).toList(),
|
||||
createdAt = json['created_at'],
|
||||
thumbUp = json['thumb_up'],
|
||||
thumbDown = json['thumb_down'],
|
||||
replyFromStore = json['reply_from_store'];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'contact': contact,
|
||||
'content': content,
|
||||
'rating': rating,
|
||||
'images': images,
|
||||
'created_at': createdAt,
|
||||
'thumb_up': thumbUp,
|
||||
'thumb_down': thumbDown,
|
||||
'reply_from_store': replyFromStore,
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
41
lib/models/coupon.dart
Normal file
@@ -0,0 +1,41 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
import 'business.dart';
|
||||
|
||||
class Coupon {
|
||||
int id;
|
||||
String code;
|
||||
String description;
|
||||
String expirationDate;
|
||||
double minAmount;
|
||||
Business store;
|
||||
double valueAmount;
|
||||
bool isPercentage;
|
||||
|
||||
Coupon.fromJson(Map<String, dynamic> json)
|
||||
: id = json['id'],
|
||||
code = json['code'].toString(),
|
||||
description = json['description'],
|
||||
expirationDate = json['expiration_date'],
|
||||
minAmount = double.parse(json['min_amount'].toString()),
|
||||
store = json['store'] != null ? Business.fromJson(json['store']) : null,
|
||||
valueAmount = double.parse(json['value_amount'].toString()),
|
||||
isPercentage = json['is_percentage'];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'code': code,
|
||||
'description': description,
|
||||
'expiration_date': expirationDate,
|
||||
'min_amount': minAmount,
|
||||
'store': store,
|
||||
'value_amount': valueAmount,
|
||||
'is_percentage': isPercentage,
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
26
lib/models/distance_info.dart
Normal file
@@ -0,0 +1,26 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
import 'text_value.dart';
|
||||
|
||||
class DistanceInfo {
|
||||
TextValue duration;
|
||||
TextValue distance;
|
||||
String status;
|
||||
|
||||
DistanceInfo.fromJson(Map<String, dynamic> json)
|
||||
: duration = json['duration'] != null ? TextValue.fromJson(json['duration']) : null,
|
||||
distance = json['distance'] != null ? TextValue.fromJson(json['distance']) : null,
|
||||
status = json['status'];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'duration': duration,
|
||||
'distance': distance,
|
||||
'status': status
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
21
lib/models/error_message.dart
Normal file
@@ -0,0 +1,21 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
class ErrorMessage {
|
||||
String code;
|
||||
String string;
|
||||
|
||||
ErrorMessage.fromJson(Map<String, dynamic> json)
|
||||
: code = json['code'],
|
||||
string = json['string'];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'code': code,
|
||||
'string': string,
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
31
lib/models/extra_fee.dart
Normal file
@@ -0,0 +1,31 @@
|
||||
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
class ExtraFee {
|
||||
int id;
|
||||
String name;
|
||||
String description;
|
||||
double rate;
|
||||
double price;
|
||||
|
||||
ExtraFee.fromJson(Map<String, dynamic> json)
|
||||
: id = json['id'],
|
||||
name = json['name'],
|
||||
description = json['description'],
|
||||
rate = double.parse(json['rate'].toString()),
|
||||
price = double.parse(json['price'].toString());
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'name': name,
|
||||
'description': description,
|
||||
'rate': rate,
|
||||
'price': price,
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
30
lib/models/fulfillment.dart
Normal file
@@ -0,0 +1,30 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
class Fulfillment {
|
||||
int id;
|
||||
String shippingMethod;
|
||||
String trackingNumber;
|
||||
String note;
|
||||
String createdAt;
|
||||
|
||||
Fulfillment.fromJson(Map<String, dynamic> json) :
|
||||
id = json['id'],
|
||||
shippingMethod = json['shipping_method'],
|
||||
trackingNumber = json['tracking_number'],
|
||||
note = json['note'],
|
||||
createdAt = json['created_at'];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'shipping_method': shippingMethod,
|
||||
'tracking_number': trackingNumber,
|
||||
'note': note,
|
||||
'created_at': createdAt,
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
20
lib/models/image_url.dart
Normal file
@@ -0,0 +1,20 @@
|
||||
import 'dart:convert';
|
||||
|
||||
class ImageUrl {
|
||||
int id;
|
||||
String imageUrl;
|
||||
|
||||
ImageUrl.fromJson(Map<String, dynamic> json)
|
||||
: id = json['id'],
|
||||
imageUrl = json['image_url'];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'image_url': imageUrl
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
12
lib/models/key_value.dart
Normal file
@@ -0,0 +1,12 @@
|
||||
|
||||
class KeyValue {
|
||||
String name;
|
||||
dynamic value;
|
||||
|
||||
KeyValue(this.name, this.value);
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return '$name: $value';
|
||||
}
|
||||
}
|
||||
47
lib/models/located_address.dart
Normal file
@@ -0,0 +1,47 @@
|
||||
import 'dart:convert';
|
||||
|
||||
class LocatedAddress {
|
||||
int storeId;
|
||||
double latitude;
|
||||
double longitude;
|
||||
String streetNumber;
|
||||
String streetName;
|
||||
String city;
|
||||
String locality;
|
||||
String province;
|
||||
String country;
|
||||
String postalCode;
|
||||
String formattedAddress;
|
||||
|
||||
LocatedAddress.fromJson(Map<String, dynamic> json)
|
||||
: storeId = json['store_id'],
|
||||
latitude = json['latitude'],
|
||||
longitude = json['longitude'],
|
||||
streetNumber = json['street_number'],
|
||||
streetName = json['street_name'],
|
||||
city = json['city'],
|
||||
locality = json['locality'],
|
||||
province = json['province'],
|
||||
country = json['country'],
|
||||
postalCode = json['postal_code'],
|
||||
formattedAddress = json['formatted_address'];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'store_id': storeId,
|
||||
'latitude': latitude,
|
||||
'longitude': longitude,
|
||||
'street_number': streetNumber,
|
||||
'street_name': streetName,
|
||||
'city': city,
|
||||
'locality': locality,
|
||||
'province': province,
|
||||
'country': country,
|
||||
'postal_code': postalCode,
|
||||
'formatted_address': formattedAddress
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
113
lib/models/order.dart
Normal file
@@ -0,0 +1,113 @@
|
||||
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
import 'address.dart';
|
||||
import 'business.dart';
|
||||
import 'cart_info.dart';
|
||||
import 'cart_line_item.dart';
|
||||
import 'distance_info.dart';
|
||||
import 'fulfillment.dart';
|
||||
import 'user_position.dart';
|
||||
|
||||
class Order {
|
||||
int id;
|
||||
int userId;
|
||||
int businessId;
|
||||
Business businessInfo;
|
||||
CartInfo cartInfo;
|
||||
int status;
|
||||
double originPrice;
|
||||
double discountPrice;
|
||||
double totalPrice;
|
||||
String consignee;
|
||||
String phone;
|
||||
String address;
|
||||
Address shippingAddress;
|
||||
int payMethod;
|
||||
String remark;
|
||||
String orderNum;
|
||||
int bookedAt;
|
||||
int createdAt;
|
||||
String shippingMethod;
|
||||
String paymentStatus; // UNPAID, PAID, PARTIALPAID
|
||||
double amountPaid;
|
||||
List<Fulfillment> fulfillments;
|
||||
String extraData;
|
||||
bool hasComment;
|
||||
double fee;
|
||||
UserPosition shipperPosition;
|
||||
DistanceInfo deliveryDistance;
|
||||
|
||||
Order.fromJson(Map<String, dynamic> json)
|
||||
: id = json['id'],
|
||||
userId = json['user_id'],
|
||||
businessId = json['business_id'],
|
||||
businessInfo = json['business_info'] != null ? Business.fromJson(json['business_info']) : null,
|
||||
cartInfo = json['cart_info'] != null ? CartInfo.fromJson(json['cart_info']) : null,
|
||||
status = json['status'],
|
||||
originPrice = double.parse(json['origin_price'].toString()),
|
||||
discountPrice = double.parse(json['discount_price'].toString()),
|
||||
totalPrice = double.parse(json['total_price'].toString()),
|
||||
consignee = json['consignee'],
|
||||
phone = json['phone'],
|
||||
address = json['address'],
|
||||
shippingAddress = (json['shipping_address'] != null) ? Address.fromJson(json['shipping_address']) : null,
|
||||
payMethod = json['pay_method'],
|
||||
remark = json['remark'],
|
||||
orderNum = json['order_num'],
|
||||
bookedAt = int.parse(json['booked_at'].toString()),
|
||||
createdAt = int.parse(json['created_at'].toString()),
|
||||
shippingMethod = json['shipping_method'],
|
||||
paymentStatus = json['payment_status'],
|
||||
amountPaid = double.parse(json['amount_paid'].toString()),
|
||||
fulfillments = (json['fulfillments'] as List).map((e) => Fulfillment.fromJson(e)).toList(),
|
||||
extraData = json['extra_data'],
|
||||
hasComment = json['has_comment'],
|
||||
fee = double.parse(json['fee'].toString()),
|
||||
shipperPosition = UserPosition.fromJson(json['shipper_position']),
|
||||
deliveryDistance = DistanceInfo.fromJson(json['delivery_distance']);
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'user_id': userId,
|
||||
'business_id': businessId,
|
||||
'business_info': businessInfo,
|
||||
'cart_info': cartInfo,
|
||||
'status': status,
|
||||
'origin_price': originPrice,
|
||||
'discount_price': discountPrice,
|
||||
'total_price': totalPrice,
|
||||
'consignee': consignee,
|
||||
'phone': phone,
|
||||
'address': address,
|
||||
'shipping_address': shippingAddress,
|
||||
'pay_method': payMethod,
|
||||
'remark': remark,
|
||||
'order_num': orderNum,
|
||||
'booked_at': bookedAt,
|
||||
'created_at': createdAt,
|
||||
'shipping_method': shippingMethod,
|
||||
'payment_status': paymentStatus,
|
||||
'amount_paid': amountPaid,
|
||||
'fulfillments': fulfillments,
|
||||
'extra_data': extraData,
|
||||
'has_comment': hasComment,
|
||||
'fee': fee,
|
||||
'shipper_position': shipperPosition,
|
||||
'delivery_distance': deliveryDistance,
|
||||
};
|
||||
|
||||
double getSubtotal() {
|
||||
double subtotal = 0.0;
|
||||
for (CartLineItem lineItem in cartInfo.productList) {
|
||||
subtotal += lineItem.getTotalPrice();
|
||||
}
|
||||
return subtotal;
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
10
lib/models/order_status.dart
Normal file
@@ -0,0 +1,10 @@
|
||||
|
||||
enum OrderStatus {
|
||||
WAIT_FOR_SUBMISSION, // -1
|
||||
WAIT_FOR_PAYMENT, // 0
|
||||
WAIT_FOR_APPROVAL, // 1
|
||||
WAIT_FOR_DELIVERY, // 2
|
||||
WAIT_FOR_ARRIVAL, // 3
|
||||
RECEIVED_CONFIRMATION, // 4
|
||||
DONE // 5
|
||||
}
|
||||
5
lib/models/payment_method.dart
Normal file
@@ -0,0 +1,5 @@
|
||||
|
||||
enum PaymentMethod {
|
||||
ONLINE, // 1
|
||||
OFFLINE // 0
|
||||
}
|
||||
85
lib/models/payment_platform.dart
Normal file
@@ -0,0 +1,85 @@
|
||||
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import '../generated/l10n.dart';
|
||||
|
||||
class PaymentPlatform {
|
||||
int id;
|
||||
String name;
|
||||
String code;
|
||||
String method;
|
||||
String icon;
|
||||
String xLogin;
|
||||
String transactionKey;
|
||||
String responseKey;
|
||||
String squareAppId;
|
||||
String squareAccessToken;
|
||||
String squareLocationId;
|
||||
String publishableKey;
|
||||
String merchantId;
|
||||
|
||||
PaymentPlatform(this.code);
|
||||
|
||||
PaymentPlatform.fromJson(Map<String, dynamic> json)
|
||||
: id = json['id'],
|
||||
name = json['name'],
|
||||
code = json['code'],
|
||||
method = json['method'],
|
||||
icon = json['icon'],
|
||||
xLogin = json['x_login'],
|
||||
transactionKey = json['transaction_key'],
|
||||
responseKey = json['response_key'],
|
||||
squareAppId = json['square_app_id'],
|
||||
squareAccessToken = json['square_access_token'],
|
||||
squareLocationId = json['square_location_id'],
|
||||
publishableKey = json['publishable_key'],
|
||||
merchantId = json['merchant_id'];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'name': name,
|
||||
'code': code,
|
||||
'method': method,
|
||||
'icon': icon,
|
||||
'x_login': xLogin,
|
||||
'transaction_key': transactionKey,
|
||||
'response_key': responseKey,
|
||||
'square_app_id': squareAppId,
|
||||
'square_access_token': squareAccessToken,
|
||||
'square_location_id': squareLocationId,
|
||||
'publishable_key': publishableKey,
|
||||
'merchant_id': merchantId,
|
||||
};
|
||||
|
||||
static String getPaymentPlatformName(BuildContext context, String code) {
|
||||
switch(code) {
|
||||
case 'chase':
|
||||
return S.of(context).credit_debit_card;
|
||||
break;
|
||||
case 'web-credit-card':
|
||||
return S.of(context).credit_card;
|
||||
break;
|
||||
case 'ALIPAY':
|
||||
return S.of(context).alipay;
|
||||
break;
|
||||
case 'WECHATPAY':
|
||||
return S.of(context).wechatpay;
|
||||
break;
|
||||
case 'paypal':
|
||||
return S.of(context).paypal;
|
||||
case 'payondeliverypickup':
|
||||
return S.of(context).pay_on_deliery_pickup;
|
||||
case 'stripe':
|
||||
return S.of(context).credit_card;
|
||||
default:
|
||||
return S.of(context).pay_on_deliery;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
34
lib/models/position.dart
Normal file
@@ -0,0 +1,34 @@
|
||||
|
||||
class Position {
|
||||
final double latitude;
|
||||
final double longitude;
|
||||
|
||||
Position({this.latitude, this.longitude});
|
||||
|
||||
@override
|
||||
bool operator ==(other) {
|
||||
var areEqual = other is Position &&
|
||||
other.latitude == latitude &&
|
||||
other.longitude == longitude;
|
||||
|
||||
return areEqual;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => latitude.hashCode ^
|
||||
longitude.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'Lat $latitude, Lng $longitude';
|
||||
}
|
||||
|
||||
Position.fromJson(Map<String, dynamic> json) :
|
||||
latitude = double.parse(json['latitude'].toString()),
|
||||
longitude = double.parse(json['longitude'].toString());
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'latitude': latitude,
|
||||
'longitude': longitude
|
||||
};
|
||||
}
|
||||
77
lib/models/product.dart
Normal file
@@ -0,0 +1,77 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
import 'Subproduct.dart';
|
||||
import 'product_attribute.dart';
|
||||
|
||||
class Product {
|
||||
int id;
|
||||
int businessId;
|
||||
int categoryId;
|
||||
String name;
|
||||
double price;
|
||||
double regularPrice;
|
||||
String description;
|
||||
String detailDescription;
|
||||
String imagePath;
|
||||
double monthSales;
|
||||
int rate;
|
||||
double leftNum;
|
||||
List<ProductAttribute> productAttributes;
|
||||
bool nonInventory;
|
||||
String extraData;
|
||||
List<Subproduct> subproducts;
|
||||
|
||||
Product(int id, int businessId, String name, double price, String description,
|
||||
String imagePath, List<ProductAttribute> productAttributes) {
|
||||
this.id = id;
|
||||
this.businessId = businessId;
|
||||
this.name = name;
|
||||
this.price = price;
|
||||
this.description = description;
|
||||
this.imagePath = imagePath;
|
||||
this.productAttributes = productAttributes;
|
||||
}
|
||||
|
||||
Product.fromJson(Map<String, dynamic> json)
|
||||
: id = json['id'],
|
||||
businessId = json['business_id'],
|
||||
categoryId = json['category_id'],
|
||||
name = json['name'],
|
||||
price = double.parse(json['price'].toString()),
|
||||
regularPrice = double.parse(json['regular_price'].toString()),
|
||||
description = json['description'],
|
||||
detailDescription = json['detail_description'],
|
||||
imagePath = json['image_path'],
|
||||
monthSales = json['month_sales'] != null ? double.parse(json['month_sales'].toString()) : 0.0,
|
||||
rate = json['rate'],
|
||||
leftNum = json['left_num'] != null ? double.parse(json['left_num'].toString()) : 0.0,
|
||||
productAttributes = json['productattributes'] != null ? (json['productattributes'] as List).map((i) => ProductAttribute.fromJson(i)).toList() : [],
|
||||
nonInventory = json['non_inventory'],
|
||||
extraData = json['extra_data'],
|
||||
subproducts = json['subproducts'] != null ? (json['subproducts'] as List).map((e) => Subproduct.fromJson(e)).toList() : [];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'business_id': businessId,
|
||||
'category_id': categoryId,
|
||||
'name': name,
|
||||
'price': price,
|
||||
'regular_price': regularPrice,
|
||||
'description': description,
|
||||
'detail_description': detailDescription,
|
||||
'image_path': imagePath,
|
||||
'month_sales': monthSales,
|
||||
'rate': rate,
|
||||
'left_num': leftNum,
|
||||
'productattributes': productAttributes,
|
||||
'non_inventory': nonInventory,
|
||||
'extra_data': extraData,
|
||||
'subproducts': subproducts,
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
41
lib/models/product_attribute.dart
Normal file
@@ -0,0 +1,41 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
import 'product_option.dart';
|
||||
|
||||
class ProductAttribute {
|
||||
int id;
|
||||
String name;
|
||||
List<ProductOption> productOptions;
|
||||
bool singleSelection;
|
||||
bool byQuantity;
|
||||
bool required;
|
||||
String extra;
|
||||
bool disabled;
|
||||
|
||||
ProductAttribute.fromJson(Map<String, dynamic> json)
|
||||
: id = json['id'],
|
||||
name = json['name'],
|
||||
productOptions = (json['productoptions'] as List).map((i) => ProductOption.fromJson(i)).toList(),
|
||||
singleSelection = json['single_selection'],
|
||||
byQuantity = json['by_quantity'],
|
||||
required = json['required'],
|
||||
extra = json['extra'],
|
||||
disabled = json['disabled'];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'name': name,
|
||||
'productoptions': productOptions,
|
||||
'single_selection': singleSelection,
|
||||
'by_quantity': byQuantity,
|
||||
'required': required,
|
||||
'extra': extra,
|
||||
'disabled': disabled
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
93
lib/models/product_detail.dart
Normal file
@@ -0,0 +1,93 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter_wisetronic/models/Subproduct.dart';
|
||||
|
||||
import 'category.dart';
|
||||
import 'product_attribute.dart';
|
||||
import 'product_image.dart';
|
||||
|
||||
class ProductDetail {
|
||||
int id;
|
||||
String image;
|
||||
List<ProductImage> images;
|
||||
String sku;
|
||||
String name;
|
||||
double price;
|
||||
double regularPrice;
|
||||
String description;
|
||||
String description2;
|
||||
String detailDescription;
|
||||
double monthSales;
|
||||
int rate;
|
||||
double leftNum;
|
||||
List<ProductAttribute> productAttributes;
|
||||
bool nonInventory;
|
||||
String extraData;
|
||||
String purchaseNote;
|
||||
double weight;
|
||||
double dimentionsLength;
|
||||
double dimentionsWidth;
|
||||
double dimentionsHeight;
|
||||
bool reviewsAllowed;
|
||||
List<Category> categories;
|
||||
List<Subproduct> subproducts;
|
||||
|
||||
ProductDetail.fromJson(Map<String, dynamic> json)
|
||||
: id = json['id'],
|
||||
image = json['image'],
|
||||
images = (json['images'] as List).map((e) => ProductImage.fromJson(e)).toList(),
|
||||
sku = json['sku'],
|
||||
name = json['name'],
|
||||
price = double.parse(json['price'].toString()),
|
||||
regularPrice = double.parse(json['regular_price'].toString()),
|
||||
description = json['description'],
|
||||
description2 = json['description2'],
|
||||
detailDescription = json['detail_description'],
|
||||
reviewsAllowed = json['reviews_allowed'],
|
||||
monthSales = double.parse(json['month_sales'].toString()),
|
||||
rate = json['rate'],
|
||||
leftNum = double.parse(json['left_num'].toString()),
|
||||
productAttributes = (json['productattributes'] as List).map((i) => ProductAttribute.fromJson(i)).toList(),
|
||||
nonInventory = json['non_inventory'],
|
||||
extraData = json['extra_data'],
|
||||
purchaseNote = json['purchase_note'],
|
||||
weight = double.parse(json['weight'].toString()),
|
||||
dimentionsLength = double.parse(json['dimentions_length'].toString()),
|
||||
dimentionsWidth = double.parse(json['dimentions_width'].toString()),
|
||||
dimentionsHeight = double.parse(json['dimentions_height'].toString()),
|
||||
categories = (json['categories'] as List).map((e) => Category.fromJson(e)).toList(),
|
||||
subproducts = (json['subproducts'] as List).map((e) => Subproduct.fromJson(e)).toList();
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'image': image,
|
||||
'images': images,
|
||||
'sku': sku,
|
||||
'name': name,
|
||||
'price': price,
|
||||
'regular_price': regularPrice,
|
||||
'description': description,
|
||||
'description2': description2,
|
||||
'detail_description': detailDescription,
|
||||
'month_sales': monthSales,
|
||||
'rate': rate,
|
||||
'left_num': leftNum,
|
||||
'productattributes': productAttributes,
|
||||
'non_inventory': nonInventory,
|
||||
'extra_data': extraData,
|
||||
'purchase_note': purchaseNote,
|
||||
'weight': weight,
|
||||
'dimentions_length': dimentionsLength,
|
||||
'dimentions_width': dimentionsWidth,
|
||||
'dimentions_height': dimentionsHeight,
|
||||
'reviews_allowed': reviewsAllowed,
|
||||
'categories': categories,
|
||||
'subproducts': subproducts,
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
20
lib/models/product_image.dart
Normal file
@@ -0,0 +1,20 @@
|
||||
import 'dart:convert';
|
||||
|
||||
class ProductImage {
|
||||
int id;
|
||||
String image;
|
||||
|
||||
ProductImage.fromJson(Map<String, dynamic> json)
|
||||
: id = json['id'],
|
||||
image = json['image'];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'image': image
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
30
lib/models/product_option.dart
Normal file
@@ -0,0 +1,30 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
class ProductOption {
|
||||
int id;
|
||||
String name;
|
||||
double adjustAmount;
|
||||
String extra;
|
||||
bool disabled;
|
||||
|
||||
ProductOption.fromJson(Map<String, dynamic> json)
|
||||
: id = json['id'],
|
||||
name = json['name'],
|
||||
adjustAmount = double.parse(json['adjust_amount'].toString()),
|
||||
extra = json['extra'],
|
||||
disabled = json['disabled'];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'name': name,
|
||||
'adjust_amount': adjustAmount,
|
||||
'extra': extra,
|
||||
'disabled': disabled
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
73
lib/models/shipping_rate.dart
Normal file
@@ -0,0 +1,73 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
||||
class ShippingRate {
|
||||
String name;
|
||||
double price;
|
||||
List<Rate> rates;
|
||||
|
||||
ShippingRate.fromJson(Map<String, dynamic> json)
|
||||
: name = json['name'],
|
||||
price = double.parse(json['price'].toString()),
|
||||
rates = (json['rates'] as List).map((e) => Rate.fromJson(e)).toList();
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'name': name,
|
||||
'price': price,
|
||||
'rates': rates,
|
||||
};
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) =>
|
||||
identical(this, other) ||
|
||||
other is ShippingRate &&
|
||||
runtimeType == other.runtimeType &&
|
||||
name == other.name &&
|
||||
price.toStringAsFixed(2) == other.price.toStringAsFixed(2) &&
|
||||
listEquals(rates, other.rates);
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode =>
|
||||
name.hashCode ^
|
||||
price.hashCode ^
|
||||
rates.hashCode;
|
||||
}
|
||||
|
||||
class Rate {
|
||||
String name;
|
||||
double rate;
|
||||
|
||||
Rate.fromJson(Map<String, dynamic> json)
|
||||
: name = json['name'],
|
||||
rate = double.parse(json['rate'].toString());
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'name': name,
|
||||
'rate': rate,
|
||||
};
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) =>
|
||||
identical(this, other) ||
|
||||
other is Rate &&
|
||||
runtimeType == other.runtimeType &&
|
||||
name == other.name &&
|
||||
rate.toStringAsFixed(2) == other.rate.toStringAsFixed(2);
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode =>
|
||||
name.hashCode ^
|
||||
rate.hashCode;
|
||||
}
|
||||
26
lib/models/simple_business.dart
Normal file
@@ -0,0 +1,26 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
import 'address.dart';
|
||||
|
||||
class Store {
|
||||
int id;
|
||||
String name;
|
||||
Address address;
|
||||
|
||||
Store.fromJson(Map<String, dynamic> json)
|
||||
: id = json['id'],
|
||||
name = json['name'],
|
||||
address = Address.fromJson(json['address']);
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'name': name,
|
||||
'address': address,
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
32
lib/models/simple_product.dart
Normal file
@@ -0,0 +1,32 @@
|
||||
import 'dart:convert';
|
||||
|
||||
class SimpleProduct {
|
||||
int id;
|
||||
String name;
|
||||
double price;
|
||||
double regularPrice;
|
||||
String description;
|
||||
String imagePath;
|
||||
|
||||
SimpleProduct.fromJson(Map<String, dynamic> json)
|
||||
: id = json['id'],
|
||||
name = json['name'],
|
||||
price = double.parse(json['price'].toString()),
|
||||
regularPrice = double.parse(json['regular_price'].toString()),
|
||||
description = json['description'],
|
||||
imagePath = json['image_path'];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'name': name,
|
||||
'price': price,
|
||||
'regular_price': regularPrice,
|
||||
'description': description,
|
||||
'image_path': imagePath
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
21
lib/models/text_value.dart
Normal file
@@ -0,0 +1,21 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
class TextValue {
|
||||
String text;
|
||||
int value;
|
||||
|
||||
TextValue.fromJson(Map<String, dynamic> json)
|
||||
: text = json['text'],
|
||||
value = int.parse(json['value'].toString());
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'text': text,
|
||||
'value': value
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
110
lib/models/ticket.dart
Normal file
@@ -0,0 +1,110 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
import 'simple_business.dart';
|
||||
|
||||
class TicketFile {
|
||||
int id;
|
||||
String url;
|
||||
String fileName;
|
||||
String fileType;
|
||||
|
||||
TicketFile.fromJson(Map<String, dynamic> json)
|
||||
: id = json['id'],
|
||||
url = json['url'],
|
||||
fileName = json['file_name'],
|
||||
fileType = json['file_type'];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'url': url,
|
||||
'file_name': fileName,
|
||||
'file_type': fileType,
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
|
||||
class Issue {
|
||||
int id;
|
||||
String msg;
|
||||
List<TicketFile> files;
|
||||
|
||||
Issue.fromJson(Map<String, dynamic> json)
|
||||
: id = json['id'],
|
||||
msg = json['msg'],
|
||||
files = (json['files'] as List).map((e) => TicketFile.fromJson(e)).toList();
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'msg': msg,
|
||||
'files': files,
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
|
||||
class FollowUp {
|
||||
int id;
|
||||
String msg;
|
||||
String poster;
|
||||
String createdAt;
|
||||
List<TicketFile> files;
|
||||
|
||||
FollowUp.fromJson(Map<String, dynamic> json)
|
||||
: id = json['id'],
|
||||
msg = json['msg'],
|
||||
poster = json['poster'],
|
||||
createdAt = json['created_at'],
|
||||
files = (json['files'] as List).map((e) => TicketFile.fromJson(e)).toList();
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'msg': msg,
|
||||
'poster': poster,
|
||||
'created_at': createdAt,
|
||||
'files': files
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
|
||||
class Ticket {
|
||||
int id;
|
||||
Issue issue;
|
||||
Store store;
|
||||
List<FollowUp> followUps;
|
||||
bool isClosed;
|
||||
String createdAt;
|
||||
|
||||
Ticket.fromJson(Map<String, dynamic> json)
|
||||
: id = json['id'],
|
||||
issue = Issue.fromJson(json['issue']),
|
||||
store = Store.fromJson(json['store']),
|
||||
followUps = (json['follow_ups'] as List).map((e) => FollowUp.fromJson(e)).toList(),
|
||||
isClosed = json['is_closed'],
|
||||
createdAt = json['created_at'];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'issue': issue,
|
||||
'store': store,
|
||||
'follow_ups': followUps,
|
||||
'is_closed': isClosed,
|
||||
'created_at': createdAt,
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
21
lib/models/user_position.dart
Normal file
@@ -0,0 +1,21 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
class UserPosition {
|
||||
double lat;
|
||||
double lng;
|
||||
|
||||
UserPosition.fromJson(Map<String, dynamic> json) :
|
||||
lat = double.parse(json['lat'].toString()),
|
||||
lng = double.parse(json['lng'].toString());
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'lat': lat,
|
||||
'lng': lng
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
23
lib/models/waiting_line.dart
Normal file
@@ -0,0 +1,23 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
import 'waiting_line_item.dart';
|
||||
|
||||
class WaitingLine {
|
||||
List<WaitingLineItem> waitingLines;
|
||||
String storeSn;
|
||||
|
||||
WaitingLine.fromJson(Map<String, dynamic> json)
|
||||
: waitingLines = (json['waiting_lines'] as List).map((i) => WaitingLineItem.fromJson(i)).toList(),
|
||||
storeSn = json['store_sn'];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'waiting_lines': waitingLines,
|
||||
'store_sn': storeSn
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
29
lib/models/waiting_line_item.dart
Normal file
@@ -0,0 +1,29 @@
|
||||
import 'dart:convert';
|
||||
|
||||
class WaitingLineItem {
|
||||
String deviceId;
|
||||
String phone;
|
||||
String createdAt;
|
||||
int peopleCount;
|
||||
int waitingNumber;
|
||||
|
||||
WaitingLineItem.fromJson(Map<String, dynamic> json)
|
||||
: deviceId = json['device_id'],
|
||||
phone = json['phone'],
|
||||
createdAt = json['created_at'],
|
||||
peopleCount = json['people_count'],
|
||||
waitingNumber = json['waiting_number'];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'device_id': deviceId,
|
||||
'phone': phone,
|
||||
'created_at': createdAt,
|
||||
'people_count': peopleCount,
|
||||
'waiting_number': waitingNumber
|
||||
};
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return json.encode(this);
|
||||
}
|
||||
}
|
||||
27
lib/pages/attribute_selection.dart
Normal file
@@ -0,0 +1,27 @@
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_wisetronic/widgets/mobile/mobile_attribute_selection.dart';
|
||||
import 'package:responsive_builder/responsive_builder.dart';
|
||||
import '../models/business.dart';
|
||||
import '../models/product.dart';
|
||||
|
||||
class AttributeSelection extends StatelessWidget {
|
||||
final Product product;
|
||||
final Business business;
|
||||
final GlobalKey startKey;
|
||||
|
||||
const AttributeSelection({Key key, this.product, this.business, this.startKey}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ResponsiveBuilder(
|
||||
builder: (context, sizingInformation) =>
|
||||
ScreenTypeLayout(
|
||||
mobile: MobileAttributeSelection(product: product, business: business, startKey: startKey,),
|
||||
tablet: MobileAttributeSelection(product: product, business: business, startKey: startKey,),
|
||||
desktop: MobileAttributeSelection(product: product, business: business, startKey: startKey,),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
32
lib/pages/blog.dart
Normal file
@@ -0,0 +1,32 @@
|
||||
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:responsive_builder/responsive_builder.dart';
|
||||
|
||||
import '../constants.dart';
|
||||
import '../widgets/desktop/desktop_blog.dart';
|
||||
import '../widgets/mobile/mobile_blog.dart';
|
||||
|
||||
class Blog extends StatelessWidget {
|
||||
final Key key;
|
||||
final int businessId;
|
||||
|
||||
const Blog({this.key, int businessId}) :
|
||||
businessId = businessId ?? Constants.BUSINESS_ID;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ResponsiveBuilder(
|
||||
builder: (context, sizingInformation) =>
|
||||
ScreenTypeLayout(
|
||||
mobile: MobileBlog(businessId: businessId,),
|
||||
tablet: DesktopBlog(businessId: businessId,),
|
||||
desktop: Scrollbar(
|
||||
isAlwaysShown: true,
|
||||
child: DesktopBlog(businessId: businessId,),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
76
lib/pages/buy_service.dart
Normal file
@@ -0,0 +1,76 @@
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_spinkit/flutter_spinkit.dart';
|
||||
import 'package:flutter_wisetronic/utils/http_util.dart';
|
||||
import 'package:flutter_wisetronic/utils/utils.dart';
|
||||
import 'package:flutter_wisetronic/widgets/desktop/desktop_buy_service.dart';
|
||||
import 'package:flutter_wisetronic/widgets/desktop/desktop_renew_minioffice.dart';
|
||||
import 'package:flutter_wisetronic/widgets/mobile/mobile_buy_service.dart';
|
||||
import 'package:flutter_wisetronic/widgets/mobile/mobile_renew_minioffice.dart';
|
||||
import 'package:responsive_builder/responsive_builder.dart';
|
||||
|
||||
import '../constants.dart';
|
||||
import '../models/business.dart';
|
||||
import '../store/actions.dart';
|
||||
import '../store/store.dart';
|
||||
import '../widgets/desktop/desktop_renew_license.dart';
|
||||
import '../widgets/mobile/mobile_renew_license.dart';
|
||||
|
||||
class BuyService extends StatefulWidget {
|
||||
final int gid;
|
||||
final String serviceName;
|
||||
|
||||
const BuyService(this.gid, this.serviceName, {Key key}) :
|
||||
super(key: key);
|
||||
|
||||
@override
|
||||
State<StatefulWidget> createState() => BuyServiceState();
|
||||
}
|
||||
|
||||
class BuyServiceState extends State<BuyService> {
|
||||
Map<String, dynamic> data;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
store.dispatch(UpdateContext(context));
|
||||
|
||||
if (data == null ) {
|
||||
return new Scaffold(
|
||||
body: Center(
|
||||
child: SpinKitWave(
|
||||
color: Colors.lightBlueAccent,
|
||||
size: 40.0,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
return ResponsiveBuilder(
|
||||
builder: (context, sizingInformation) =>
|
||||
ScreenTypeLayout(
|
||||
mobile: MobileBuyService(data),
|
||||
tablet: DesktopBuyService(data),
|
||||
desktop: DesktopBuyService(data),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_loadData();
|
||||
}
|
||||
|
||||
void _loadData() {
|
||||
HttpUtil.httpGet(
|
||||
'v1/get-buy-service-info/${widget.serviceName}/${widget.gid}',
|
||||
businessId: Constants.BUSINESS_ID,
|
||||
).then((value) {
|
||||
data = value;
|
||||
setState(() {});
|
||||
}).onError((error, stackTrace) {
|
||||
Utils.showMessageDialog(context, error);
|
||||
});
|
||||
}
|
||||
}
|
||||
48
lib/pages/change_mobile_or_email.dart
Normal file
@@ -0,0 +1,48 @@
|
||||
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:responsive_builder/responsive_builder.dart';
|
||||
|
||||
import '../constants.dart';
|
||||
import '../generated/l10n.dart';
|
||||
import '../widgets/desktop/desktop_change_mobile_or_email.dart';
|
||||
import '../widgets/general/bottom_nav.dart';
|
||||
import '../widgets/general/breadcrumbs.dart';
|
||||
import '../widgets/general/navigationbar.dart';
|
||||
import '../widgets/mobile/MobileBottomNav.dart';
|
||||
import '../widgets/mobile/mobile_change_mobile_or_email.dart';
|
||||
|
||||
class ChangeMobileOrEmail extends StatelessWidget {
|
||||
final bool isMobile;
|
||||
|
||||
const ChangeMobileOrEmail(this.isMobile, {Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ResponsiveBuilder(
|
||||
builder: (context, sizingInformation) =>
|
||||
Scaffold(
|
||||
appBar: NavigationBar(
|
||||
title: isMobile ? S.of(context).change_mobile : S.of(context).change_email,
|
||||
back: true,
|
||||
breadCrumbs: [
|
||||
BreadCrumb(isMobile ? S.of(context).change_mobile : S.of(context).change_email, null),
|
||||
],
|
||||
breadCrumbHeight: sizingInformation.deviceScreenType == DeviceScreenType.mobile ? null : Constants.BREADCRUMB_HEIGHT,
|
||||
),
|
||||
drawer: null,
|
||||
body: ScreenTypeLayout(
|
||||
mobile: MobileChangeMobileOrEmail(isMobile),
|
||||
tablet: DesktopChangeMobileOrEmail(isMobile),
|
||||
desktop: DesktopChangeMobileOrEmail(isMobile),
|
||||
),
|
||||
bottomNavigationBar: ScreenTypeLayout(
|
||||
mobile: MobileBottomNav(currentIndex: 0,),
|
||||
tablet: BottomNav(),
|
||||
desktop: BottomNav(),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
46
lib/pages/change_password.dart
Normal file
@@ -0,0 +1,46 @@
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:responsive_builder/responsive_builder.dart';
|
||||
|
||||
import '../constants.dart';
|
||||
import '../generated/l10n.dart';
|
||||
import '../widgets/desktop/desktop_change_password.dart';
|
||||
import '../widgets/general/bottom_nav.dart';
|
||||
import '../widgets/general/breadcrumbs.dart';
|
||||
import '../widgets/general/navigationbar.dart';
|
||||
import '../widgets/mobile/MobileBottomNav.dart';
|
||||
import '../widgets/mobile/mobile_change_password.dart';
|
||||
|
||||
class ChangePassword extends StatelessWidget {
|
||||
final _scaffoldKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ResponsiveBuilder(
|
||||
builder: (context, sizingInformation) =>
|
||||
Scaffold(
|
||||
key: _scaffoldKey,
|
||||
appBar: NavigationBar(
|
||||
title: S.of(context).change_password,
|
||||
back: true,
|
||||
breadCrumbs: [
|
||||
BreadCrumb(S.of(context).change_password, null),
|
||||
],
|
||||
breadCrumbHeight: sizingInformation.deviceScreenType == DeviceScreenType.mobile ? null : Constants.BREADCRUMB_HEIGHT,
|
||||
),
|
||||
drawer: null,
|
||||
body: ScreenTypeLayout(
|
||||
mobile: MobileChangePassword(),
|
||||
tablet: DesktopChangePassword(),
|
||||
desktop: DesktopChangePassword(),
|
||||
),
|
||||
bottomNavigationBar: ScreenTypeLayout(
|
||||
mobile: MobileBottomNav(currentIndex: 0,),
|
||||
tablet: BottomNav(),
|
||||
desktop: BottomNav(),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
31
lib/pages/checkout.dart
Normal file
@@ -0,0 +1,31 @@
|
||||
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:responsive_builder/responsive_builder.dart';
|
||||
|
||||
import '../store/actions.dart';
|
||||
import '../store/store.dart';
|
||||
import '../widgets/desktop/desktop_checkout.dart';
|
||||
import '../widgets/mobile/mobile_checkout.dart';
|
||||
|
||||
class Checkout extends StatelessWidget {
|
||||
final int businessId;
|
||||
|
||||
const Checkout(this.businessId, {Key key}) :
|
||||
super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
store.dispatch(UpdateContext(context));
|
||||
|
||||
return ResponsiveBuilder(
|
||||
builder: (context, sizingInformation) =>
|
||||
ScreenTypeLayout(
|
||||
mobile: MobileCheckout(businessId),
|
||||
tablet: DesktopCheckout(businessId),
|
||||
desktop: DesktopCheckout(businessId),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
70
lib/pages/contact_us.dart
Normal file
@@ -0,0 +1,70 @@
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_spinkit/flutter_spinkit.dart';
|
||||
import 'package:responsive_builder/responsive_builder.dart';
|
||||
|
||||
import '../models/business.dart';
|
||||
import '../store/actions.dart';
|
||||
import '../store/store.dart';
|
||||
import '../utils/http_util.dart';
|
||||
import '../utils/utils.dart';
|
||||
import '../widgets/desktop/desktop_contact_us.dart';
|
||||
import '../widgets/mobile/mobile_contact_us.dart';
|
||||
|
||||
class ContactUs extends StatefulWidget {
|
||||
final int businessId;
|
||||
|
||||
const ContactUs({this.businessId, Key key}) :
|
||||
super(key: key);
|
||||
|
||||
@override
|
||||
State<StatefulWidget> createState() => ContactUsState();
|
||||
}
|
||||
|
||||
class ContactUsState extends State<ContactUs> {
|
||||
Business business;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
store.dispatch(UpdateContext(context));
|
||||
|
||||
if (business == null) {
|
||||
return new Scaffold(
|
||||
body: Center(
|
||||
child: SpinKitWave(
|
||||
color: Colors.lightBlueAccent,
|
||||
size: 40.0,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
return ResponsiveBuilder(
|
||||
builder: (context, sizingInformation) =>
|
||||
ScreenTypeLayout(
|
||||
mobile: MobileContactUs(business),
|
||||
tablet: DesktopContactUs(business),
|
||||
desktop: DesktopContactUs(business),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
loadData();
|
||||
}
|
||||
|
||||
void loadData() {
|
||||
HttpUtil.httpGet(
|
||||
'v1/get-business',
|
||||
businessId: widget.businessId,
|
||||
).then((value) {
|
||||
business = Business.fromJson(value);
|
||||
setState(() {});
|
||||
}).onError((error, stackTrace) {
|
||||
Utils.showMessageDialog(context, error);
|
||||
});
|
||||
}
|
||||
}
|
||||
31
lib/pages/coupons.dart
Normal file
@@ -0,0 +1,31 @@
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:responsive_builder/responsive_builder.dart';
|
||||
|
||||
import '../store/actions.dart';
|
||||
import '../store/store.dart';
|
||||
import '../widgets/desktop/desktop_coupons.dart';
|
||||
import '../widgets/mobile/mobile_coupons.dart';
|
||||
|
||||
class Coupons extends StatelessWidget {
|
||||
final int contactId;
|
||||
|
||||
const Coupons(this.contactId, {Key key}) :
|
||||
super(key: key);
|
||||
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
store.dispatch(UpdateContext(context));
|
||||
|
||||
return ResponsiveBuilder(
|
||||
builder: (context, sizingInformation) =>
|
||||
ScreenTypeLayout(
|
||||
mobile: MobileCoupons(contactId,),
|
||||
tablet: DesktopCoupons(contactId,),
|
||||
desktop: DesktopCoupons(contactId,),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||