Исправлена возможность провести покупку несколько раз подряд нажав Да

This commit is contained in:
Ivan Murashov
2017-08-22 15:24:13 +03:00
parent 5dacba419d
commit 4c803a7d05
3 changed files with 342 additions and 357 deletions

View File

@@ -2,7 +2,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.dinect.checker" package="com.dinect.checker"
android:versionCode="1" android:versionCode="1"
android:versionName="0.4"> android:versionName="0.6">
<uses-sdk <uses-sdk
android:minSdkVersion="16" android:minSdkVersion="16"

View File

@@ -23,16 +23,35 @@
"file": "lib/base_state.dart", "file": "lib/base_state.dart",
"settings": "settings":
{ {
"buffer_size": 5449, "buffer_size": 5424,
"encoding": "UTF-8", "encoding": "UTF-8",
"line_ending": "Unix" "line_ending": "Unix"
} }
}, },
{
"file": "android/app/src/main/java/com/dinect/net/ApiClient.java",
"settings":
{
"buffer_size": 3682,
"encoding": "UTF-8",
"line_ending": "Unix"
}
},
{
"contents": "Searching 3493 files for \"ApiClient\" (case sensitive)\n\n/home/kifio/Projects/checker/android/.gradle/3.3/taskArtifacts/fileSnapshots.bin:\n <binary>\n\n/home/kifio/Projects/checker/android/.gradle/3.3/tasks/_app_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin:\n <binary>\n\n/home/kifio/Projects/checker/android/app/src/main/java/com/dinect/checker/AbstractScannerActivity.java:\n 38 import android.widget.Toast;\n 39 \n 40: import com.dinect.net.ApiClient;\n 41 \n 42 import java.util.concurrent.atomic.AtomicInteger;\n ..\n 63 \n 64 \n 65: protected ApiClient apiClient;\n 66 protected NetworkThread networkThread;\n 67 private DecrementCounterThread counterThread;\n ..\n 244 + url + \", appToken \" + appToken + \", token \" + token);\n 245 \n 246: apiClient = new ApiClient(url, appToken, token);\n 247 }\n 248 \n\n/home/kifio/Projects/checker/android/app/src/main/java/com/dinect/checker/NetworkThread.java:\n 20 import android.util.Pair;\n 21 \n 22: import com.dinect.net.ApiClient;\n 23 \n 24 /**\n ..\n 31 \n 32 private AbstractScannerActivity activity;\n 33: private final ApiClient client;\n 34 private String card;\n 35 \n 36 /**\n 37 * @param activity caller activity (with networkResponseCallback())\n 38: * @param client ApiClient instance\n 39 */\n 40: public NetworkThread(final @NonNull AbstractScannerActivity activity, final @NonNull ApiClient client) {\n 41 this.activity = activity;\n 42 this.client = client;\n\n/home/kifio/Projects/checker/android/app/src/main/java/com/dinect/net/ApiClient.java:\n 35 */\n 36 \n 37: public final class ApiClient {\n 38 \n 39: private static final String TAG = \"Checker.ApiClient\";\n 40 \n 41 private static final int TIMEOUT_CONNECTION = 3;\n ..\n 57 * @param token POS token\n 58 */\n 59: public ApiClient(final @NonNull String endpoint, final @NonNull String appToken, final @NonNull String token) {\n 60 this.endpoint = endpoint;\n 61 this.appToken = appToken;\n\n/home/kifio/Projects/checker/build/app/intermediates/exploded-aar/com.google.android.gms/play-services-base/11.0.1/jars/classes.jar:\n <binary>\n\n/home/kifio/Projects/checker/build/app/intermediates/transforms/dex/debug/folders/1000/1f/main/classes.dex:\n <binary>\n\n39 matches across 7 files\n",
"settings":
{
"buffer_size": 2447,
"line_ending": "Unix",
"name": "Find Results",
"scratch": true
}
},
{ {
"file": "lib/main.dart", "file": "lib/main.dart",
"settings": "settings":
{ {
"buffer_size": 439, "buffer_size": 435,
"encoding": "UTF-8", "encoding": "UTF-8",
"line_ending": "Unix" "line_ending": "Unix"
} }
@@ -46,38 +65,11 @@
"line_ending": "Unix" "line_ending": "Unix"
} }
}, },
{
"file": "pubspec.yaml",
"settings":
{
"buffer_size": 1885,
"encoding": "UTF-8",
"line_ending": "Unix"
}
},
{
"file": "lib/purchase.dart",
"settings":
{
"buffer_size": 5304,
"encoding": "UTF-8",
"line_ending": "Unix"
}
},
{ {
"file": "lib/registration.dart", "file": "lib/registration.dart",
"settings": "settings":
{ {
"buffer_size": 2467, "buffer_size": 2680,
"encoding": "UTF-8",
"line_ending": "Unix"
}
},
{
"file": "android/app/src/main/java/com/dinect/checker/activity/MainActivity.java",
"settings":
{
"buffer_size": 6565,
"encoding": "UTF-8", "encoding": "UTF-8",
"line_ending": "Unix" "line_ending": "Unix"
} }
@@ -86,7 +78,7 @@
"file": "lib/activate_token.dart", "file": "lib/activate_token.dart",
"settings": "settings":
{ {
"buffer_size": 3295, "buffer_size": 3432,
"encoding": "UTF-8", "encoding": "UTF-8",
"line_ending": "Unix" "line_ending": "Unix"
} }
@@ -95,17 +87,16 @@
"file": "lib/common.dart", "file": "lib/common.dart",
"settings": "settings":
{ {
"buffer_size": 3529, "buffer_size": 3601,
"encoding": "UTF-8", "encoding": "UTF-8",
"line_ending": "Unix" "line_ending": "Unix"
} }
}, },
{ {
"file": "lib/consts.dart", "file": "android/build.gradle",
"settings": "settings":
{ {
"buffer_size": 1494, "buffer_size": 551,
"encoding": "UTF-8",
"line_ending": "Unix" "line_ending": "Unix"
} }
}, },
@@ -113,7 +104,7 @@
"file": "android/app/src/main/AndroidManifest.xml", "file": "android/app/src/main/AndroidManifest.xml",
"settings": "settings":
{ {
"buffer_size": 2161, "buffer_size": 2224,
"encoding": "UTF-8", "encoding": "UTF-8",
"line_ending": "Unix" "line_ending": "Unix"
} }
@@ -122,7 +113,7 @@
"file": "lib/splash.dart", "file": "lib/splash.dart",
"settings": "settings":
{ {
"buffer_size": 3493, "buffer_size": 3902,
"encoding": "UTF-8", "encoding": "UTF-8",
"line_ending": "Unix" "line_ending": "Unix"
} }
@@ -131,16 +122,7 @@
"file": "lib/faq.dart", "file": "lib/faq.dart",
"settings": "settings":
{ {
"buffer_size": 4681, "buffer_size": 4626,
"encoding": "UTF-8",
"line_ending": "Unix"
}
},
{
"file": "android/app/src/main/java/com/dinect/checker/activity/CameraActivity.java",
"settings":
{
"buffer_size": 13352,
"encoding": "UTF-8", "encoding": "UTF-8",
"line_ending": "Unix" "line_ending": "Unix"
} }
@@ -186,23 +168,29 @@
}, },
"expanded_folders": "expanded_folders":
[ [
"/Users/kifio/FlutterProjects/checker", "/home/kifio/Projects/checker",
"/Users/kifio/FlutterProjects/checker/android", "/home/kifio/Projects/checker/android",
"/Users/kifio/FlutterProjects/checker/android/app", "/home/kifio/Projects/checker/android/app",
"/Users/kifio/FlutterProjects/checker/android/app/src", "/home/kifio/Projects/checker/android/app/libs",
"/Users/kifio/FlutterProjects/checker/android/app/src/main", "/home/kifio/Projects/checker/android/app/src",
"/Users/kifio/FlutterProjects/checker/android/app/src/main/java", "/home/kifio/Projects/checker/android/app/src/main",
"/Users/kifio/FlutterProjects/checker/android/app/src/main/java/com", "/home/kifio/Projects/checker/android/app/src/main/java",
"/Users/kifio/FlutterProjects/checker/android/app/src/main/java/com/dinect", "/home/kifio/Projects/checker/android/app/src/main/java/com",
"/Users/kifio/FlutterProjects/checker/android/app/src/main/java/com/dinect/checker", "/home/kifio/Projects/checker/android/app/src/main/java/com/dinect",
"/Users/kifio/FlutterProjects/checker/android/app/src/main/java/com/dinect/checker/activity", "/home/kifio/Projects/checker/android/app/src/main/java/com/dinect/checker",
"/Users/kifio/FlutterProjects/checker/android/app/src/main/res", "/home/kifio/Projects/checker/android/app/src/main/java/com/dinect/checker/zbar",
"/Users/kifio/FlutterProjects/checker/android/app/src/main/res/menu", "/home/kifio/Projects/checker/android/app/src/main/java/com/dinect/checker/zxing",
"/Users/kifio/FlutterProjects/checker/assets", "/home/kifio/Projects/checker/android/app/src/main/java/io",
"/Users/kifio/FlutterProjects/checker/lib" "/home/kifio/Projects/checker/android/app/src/main/java/io/flutter",
"/home/kifio/Projects/checker/android/app/src/main/res",
"/home/kifio/Projects/checker/android/app/src/main/res/values"
], ],
"file_history": "file_history":
[ [
"/home/kifio/Projects/checker/lib/consts.dart",
"/home/kifio/Projects/checker/android/app/src/main/java/com/dinect/checker/CameraActivity.java",
"/home/kifio/Projects/checker/android/app/src/main/java/com/dinect/checker/activity/CameraActivity.java",
"/home/kifio/Projects/checker/android/app/src/main/java/com/dinect/checker/activity/MainActivity.java",
"/Users/kifio/FlutterProjects/checker/lib/consts.dart", "/Users/kifio/FlutterProjects/checker/lib/consts.dart",
"/Users/kifio/FlutterProjects/checker/lib/activate_token.dart", "/Users/kifio/FlutterProjects/checker/lib/activate_token.dart",
"/Users/kifio/FlutterProjects/checker/lib/registration.dart", "/Users/kifio/FlutterProjects/checker/lib/registration.dart",
@@ -218,14 +206,15 @@
], ],
"find": "find":
{ {
"height": 35.0 "height": 29.0
}, },
"find_in_files": "find_in_files":
{ {
"height": 93.0, "height": 75.0,
"where_history": "where_history":
[ [
"" "/home/kifio/Projects/checker",
"/home/kifio/Projects/android/ratengoods/src"
] ]
}, },
"find_state": "find_state":
@@ -233,9 +222,8 @@
"case_sensitive": true, "case_sensitive": true,
"find_history": "find_history":
[ [
"intToken", "ApiClient",
"http://pos-api-autoclub.dinect.com/20130701/", "CameraPreview",
"intUrl",
"async", "async",
"common", "common",
" \treturn new Text('Покупка на сумму 1234.00 руб. проведена', style: new TextStyle(color: tokenActiveTextColor, decorationColor: const Color(0x8ae28aff)));\n", " \treturn new Text('Покупка на сумму 1234.00 руб. проведена', style: new TextStyle(color: tokenActiveTextColor, decorationColor: const Color(0x8ae28aff)));\n",
@@ -270,7 +258,7 @@
"groups": "groups":
[ [
{ {
"selected": 10, "selected": 3,
"sheets": "sheets":
[ [
{ {
@@ -279,15 +267,15 @@
"semi_transient": false, "semi_transient": false,
"settings": "settings":
{ {
"buffer_size": 5449, "buffer_size": 5424,
"regions": "regions":
{ {
}, },
"selection": "selection":
[ [
[ [
886, 3331,
886 3331
] ]
], ],
"settings": "settings":
@@ -298,7 +286,7 @@
"translate_tabs_to_spaces": true "translate_tabs_to_spaces": true
}, },
"translation.x": 0.0, "translation.x": 0.0,
"translation.y": 976.0, "translation.y": 0.0,
"zoom_level": 1.0 "zoom_level": 1.0
}, },
"stack_index": 10, "stack_index": 10,
@@ -306,19 +294,131 @@
}, },
{ {
"buffer": 1, "buffer": 1,
"file": "lib/main.dart", "file": "android/app/src/main/java/com/dinect/net/ApiClient.java",
"semi_transient": false, "semi_transient": false,
"settings": "settings":
{ {
"buffer_size": 439, "buffer_size": 3682,
"regions": "regions":
{ {
}, },
"selection": "selection":
[ [
[ [
83, 996,
83 996
]
],
"settings":
{
"syntax": "Packages/Java/Java.sublime-syntax",
"tab_size": 4,
"translate_tabs_to_spaces": true
},
"translation.x": 0.0,
"translation.y": 225.0,
"zoom_level": 1.0
},
"stack_index": 9,
"type": "text"
},
{
"buffer": 2,
"semi_transient": false,
"settings":
{
"buffer_size": 2447,
"regions":
{
"match":
{
"flags": 112,
"regions":
[
[
477,
486
],
[
596,
605
],
[
848,
857
],
[
1067,
1076
],
[
1189,
1198
],
[
1371,
1380
],
[
1501,
1510
],
[
1731,
1740
],
[
1805,
1814
],
[
1964,
1973
]
],
"scope": ""
}
},
"selection":
[
[
852,
852
]
],
"settings":
{
"detect_indentation": false,
"line_numbers": false,
"output_tag": 1,
"result_base_dir": "",
"result_file_regex": "^([^ \t].*):$",
"result_line_regex": "^ +([0-9]+):",
"scroll_past_end": true,
"syntax": "Packages/Default/Find Results.hidden-tmLanguage"
},
"translation.x": 0.0,
"translation.y": 0.0,
"zoom_level": 1.0
},
"stack_index": 8,
"type": "text"
},
{
"buffer": 3,
"file": "lib/main.dart",
"semi_transient": false,
"settings":
{
"buffer_size": 435,
"regions":
{
},
"selection":
[
[
435,
435
] ]
], ],
"settings": "settings":
@@ -331,11 +431,11 @@
"translation.y": 0.0, "translation.y": 0.0,
"zoom_level": 1.0 "zoom_level": 1.0
}, },
"stack_index": 13, "stack_index": 0,
"type": "text" "type": "text"
}, },
{ {
"buffer": 2, "buffer": 4,
"file": "lib/network.dart", "file": "lib/network.dart",
"semi_transient": false, "semi_transient": false,
"settings": "settings":
@@ -345,66 +445,6 @@
{ {
}, },
"selection": "selection":
[
[
926,
926
]
],
"settings":
{
"syntax": "Packages/Dart/Dart.tmLanguage",
"tab_size": 2,
"translate_tabs_to_spaces": true
},
"translation.x": 0.0,
"translation.y": 0.0,
"zoom_level": 1.0
},
"stack_index": 6,
"type": "text"
},
{
"buffer": 3,
"file": "pubspec.yaml",
"semi_transient": false,
"settings":
{
"buffer_size": 1885,
"regions":
{
},
"selection":
[
[
916,
916
]
],
"settings":
{
"syntax": "Packages/Dart/Pubspec.tmLanguage",
"tab_size": 2,
"translate_tabs_to_spaces": true
},
"translation.x": 0.0,
"translation.y": 0.0,
"zoom_level": 1.0
},
"stack_index": 5,
"type": "text"
},
{
"buffer": 4,
"file": "lib/purchase.dart",
"semi_transient": false,
"settings":
{
"buffer_size": 5304,
"regions":
{
},
"selection":
[ [
[ [
0, 0,
@@ -421,7 +461,7 @@
"translation.y": 0.0, "translation.y": 0.0,
"zoom_level": 1.0 "zoom_level": 1.0
}, },
"stack_index": 7, "stack_index": 5,
"type": "text" "type": "text"
}, },
{ {
@@ -430,193 +470,15 @@
"semi_transient": false, "semi_transient": false,
"settings": "settings":
{ {
"buffer_size": 2467, "buffer_size": 2680,
"regions": "regions":
{ {
}, },
"selection": "selection":
[ [
[ [
1877, 0,
1877 0
]
],
"settings":
{
"syntax": "Packages/Dart/Dart.tmLanguage",
"tab_size": 2,
"translate_tabs_to_spaces": true
},
"translation.x": 0.0,
"translation.y": 0.0,
"zoom_level": 1.0
},
"stack_index": 8,
"type": "text"
},
{
"buffer": 6,
"file": "android/app/src/main/java/com/dinect/checker/activity/MainActivity.java",
"semi_transient": false,
"settings":
{
"buffer_size": 6565,
"regions":
{
},
"selection":
[
[
5764,
5764
]
],
"settings":
{
"syntax": "Packages/Java/Java.sublime-syntax",
"tab_size": 4,
"translate_tabs_to_spaces": true
},
"translation.x": 0.0,
"translation.y": 1245.0,
"zoom_level": 1.0
},
"stack_index": 12,
"type": "text"
},
{
"buffer": 7,
"file": "lib/activate_token.dart",
"semi_transient": false,
"settings":
{
"buffer_size": 3295,
"regions":
{
},
"selection":
[
[
124,
124
]
],
"settings":
{
"syntax": "Packages/Dart/Dart.tmLanguage",
"tab_size": 2,
"translate_tabs_to_spaces": true
},
"translation.x": 0.0,
"translation.y": 8.0,
"zoom_level": 1.0
},
"stack_index": 11,
"type": "text"
},
{
"buffer": 8,
"file": "lib/common.dart",
"semi_transient": false,
"settings":
{
"buffer_size": 3529,
"regions":
{
},
"selection":
[
[
1136,
1136
]
],
"settings":
{
"syntax": "Packages/Dart/Dart.tmLanguage",
"tab_size": 2,
"translate_tabs_to_spaces": true
},
"translation.x": 0.0,
"translation.y": 0.0,
"zoom_level": 1.0
},
"stack_index": 9,
"type": "text"
},
{
"buffer": 9,
"file": "lib/consts.dart",
"semi_transient": false,
"settings":
{
"buffer_size": 1494,
"regions":
{
},
"selection":
[
[
358,
358
]
],
"settings":
{
"syntax": "Packages/Dart/Dart.tmLanguage"
},
"translation.x": 0.0,
"translation.y": 0.0,
"zoom_level": 1.0
},
"stack_index": 1,
"type": "text"
},
{
"buffer": 10,
"file": "android/app/src/main/AndroidManifest.xml",
"semi_transient": false,
"settings":
{
"buffer_size": 2161,
"regions":
{
},
"selection":
[
[
160,
160
]
],
"settings":
{
"syntax": "Packages/XML/XML.sublime-syntax",
"tab_size": 2,
"translate_tabs_to_spaces": true
},
"translation.x": 0.0,
"translation.y": 0.0,
"zoom_level": 1.0
},
"stack_index": 0,
"type": "text"
},
{
"buffer": 11,
"file": "lib/splash.dart",
"semi_transient": false,
"settings":
{
"buffer_size": 3493,
"regions":
{
},
"selection":
[
[
812,
797
] ]
], ],
"settings": "settings":
@@ -633,20 +495,20 @@
"type": "text" "type": "text"
}, },
{ {
"buffer": 12, "buffer": 6,
"file": "lib/faq.dart", "file": "lib/activate_token.dart",
"semi_transient": false, "semi_transient": false,
"settings": "settings":
{ {
"buffer_size": 4681, "buffer_size": 3432,
"regions": "regions":
{ {
}, },
"selection": "selection":
[ [
[ [
39, 0,
39 0
] ]
], ],
"settings": "settings":
@@ -656,41 +518,161 @@
"translate_tabs_to_spaces": true "translate_tabs_to_spaces": true
}, },
"translation.x": 0.0, "translation.x": 0.0,
"translation.y": 0.0, "translation.y": 683.0,
"zoom_level": 1.0 "zoom_level": 1.0
}, },
"stack_index": 3, "stack_index": 7,
"type": "text" "type": "text"
}, },
{ {
"buffer": 13, "buffer": 7,
"file": "android/app/src/main/java/com/dinect/checker/activity/CameraActivity.java", "file": "lib/common.dart",
"semi_transient": false, "semi_transient": false,
"settings": "settings":
{ {
"buffer_size": 13352, "buffer_size": 3601,
"regions": "regions":
{ {
}, },
"selection": "selection":
[ [
[ [
10606, 3276,
10606 3276
] ]
], ],
"settings": "settings":
{ {
"syntax": "Packages/Java/Java.sublime-syntax", "syntax": "Packages/Dart/Dart.tmLanguage",
"tab_size": 2,
"translate_tabs_to_spaces": true
},
"translation.x": 0.0,
"translation.y": 1036.0,
"zoom_level": 1.0
},
"stack_index": 3,
"type": "text"
},
{
"buffer": 8,
"file": "android/build.gradle",
"semi_transient": false,
"settings":
{
"buffer_size": 551,
"regions":
{
},
"selection":
[
[
0,
0
]
],
"settings":
{
"syntax": "Packages/Groovy/Groovy.sublime-syntax",
"tab_size": 4, "tab_size": 4,
"translate_tabs_to_spaces": true "translate_tabs_to_spaces": true
}, },
"translation.x": 0.0, "translation.x": 0.0,
"translation.y": 4935.0, "translation.y": 0.0,
"zoom_level": 1.0 "zoom_level": 1.0
}, },
"stack_index": 2, "stack_index": 2,
"type": "text" "type": "text"
},
{
"buffer": 9,
"file": "android/app/src/main/AndroidManifest.xml",
"semi_transient": false,
"settings":
{
"buffer_size": 2224,
"regions":
{
},
"selection":
[
[
146,
146
]
],
"settings":
{
"syntax": "Packages/XML/XML.sublime-syntax",
"tab_size": 2,
"translate_tabs_to_spaces": true
},
"translation.x": 0.0,
"translation.y": 0.0,
"zoom_level": 1.0
},
"stack_index": 1,
"type": "text"
},
{
"buffer": 10,
"file": "lib/splash.dart",
"semi_transient": false,
"settings":
{
"buffer_size": 3902,
"regions":
{
},
"selection":
[
[
0,
0
]
],
"settings":
{
"syntax": "Packages/Dart/Dart.tmLanguage",
"tab_size": 2,
"translate_tabs_to_spaces": true
},
"translation.x": 0.0,
"translation.y": 255.0,
"zoom_level": 1.0
},
"stack_index": 6,
"type": "text"
},
{
"buffer": 11,
"file": "lib/faq.dart",
"semi_transient": false,
"settings":
{
"buffer_size": 4626,
"regions":
{
},
"selection":
[
[
0,
0
]
],
"settings":
{
"syntax": "Packages/Dart/Dart.tmLanguage",
"tab_size": 2,
"translate_tabs_to_spaces": true
},
"translation.x": 0.0,
"translation.y": 9.0,
"zoom_level": 1.0
},
"stack_index": 11,
"type": "text"
} }
] ]
} }

View File

@@ -30,6 +30,7 @@ class PurchaseScreenState<T> extends BaseState<PurchaseScreen> {
getLoyality(user['loyalty_url']); getLoyality(user['loyalty_url']);
} }
bool purchaseInProgress = false;
Map user; Map user;
String card = ''; String card = '';
String loyality = ''; String loyality = '';
@@ -169,35 +170,37 @@ class PurchaseScreenState<T> extends BaseState<PurchaseScreen> {
} }
purchase(String sum_total) async { purchase(String sum_total) async {
if (await platform.invokeMethod('isOnline')) { if (await platform.invokeMethod('isOnline')) {
if (!purchaseInProgress) {
purchaseInProgress = true;
platform.invokeMethod('getDocID').then((result) {
platform.invokeMethod('getDocID').then((result) { String url = user['purchases_url'];
String url = user['purchases_url']; var body = {
'doc_id': result,
'curr_iso_code': '643',
'commit': 'true',
'sum_total': sum_total
};
var body = { var headers = {
'doc_id': result, 'DM-Authorization': 'dmapptoken $appToken',
'curr_iso_code': '643', 'Authorization': 'dmtoken ${token}'
'commit': 'true', };
'sum_total': sum_total
};
var headers = { httpClient.post(url, body: body, headers: headers).then((response) {
'DM-Authorization': 'dmapptoken $appToken',
'Authorization': 'dmtoken ${token}'
};
httpClient.post(url, body: body, headers: headers).then((response) { print(response.body);
Navigator.of(context).pop();
pushRoute(context, new PurchaseSuccessScreen(sum_total, user['first_name'] == null ? '' : user['first_name']));
print(response.body); }).catchError((error) {
Navigator.of(context).pop(); purchaseInProgress = false;
pushRoute(context, new PurchaseSuccessScreen(sum_total, user['first_name'] == null ? '' : user['first_name'])); print(error.toString());
});
}).catchError((error) { });
print(error.toString()); }
});
});
} }
} }
} }