From 8dcae4c256a01a56f0c459112f462efddb238b97 Mon Sep 17 00:00:00 2001 From: kifio Date: Mon, 24 Jul 2017 08:48:51 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=20=D1=8D=D0=BA?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=20=D1=83=D1=81=D0=BF=D0=B5=D1=88=D0=BD=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BF=D0=BE=D0=BA=D1=83=D0=BF=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- checker.sublime-workspace | 151 +++++++++++++++++++++++++++++--------- lib/activate_token.dart | 8 +- lib/base_state.dart | 16 +++- lib/main.dart | 26 ++++--- lib/purchase.dart | 83 +++++++++++++-------- lib/purchase_success.dart | 38 ++++++++++ lib/registration.dart | 12 +-- lib/splash.dart | 4 +- 8 files changed, 240 insertions(+), 98 deletions(-) create mode 100644 lib/purchase_success.dart diff --git a/checker.sublime-workspace b/checker.sublime-workspace index 60df2f2..8267108 100644 --- a/checker.sublime-workspace +++ b/checker.sublime-workspace @@ -15,7 +15,7 @@ "file": "lib/base_state.dart", "settings": { - "buffer_size": 2856, + "buffer_size": 3196, "encoding": "UTF-8", "line_ending": "Unix" } @@ -33,7 +33,25 @@ "file": "lib/purchase.dart", "settings": { - "buffer_size": 3100, + "buffer_size": 3790, + "encoding": "UTF-8", + "line_ending": "Unix" + } + }, + { + "file": "lib/purchase_success.dart", + "settings": + { + "buffer_size": 1219, + "encoding": "UTF-8", + "line_ending": "Unix" + } + }, + { + "file": "lib/main.dart", + "settings": + { + "buffer_size": 3225, "encoding": "UTF-8", "line_ending": "Unix" } @@ -42,7 +60,7 @@ "file": "lib/registration.dart", "settings": { - "buffer_size": 4245, + "buffer_size": 4032, "encoding": "UTF-8", "line_ending": "Unix" } @@ -51,7 +69,7 @@ "file": "lib/activate_token.dart", "settings": { - "buffer_size": 3537, + "buffer_size": 3446, "encoding": "UTF-8", "line_ending": "Unix" } @@ -97,8 +115,9 @@ }, "expanded_folders": [ - "/home/kifio/ShitCoding/checker", - "/home/kifio/ShitCoding/checker/lib" + "/Users/kifio/FlutterProjects/checker", + "/Users/kifio/FlutterProjects/checker/assets", + "/Users/kifio/FlutterProjects/checker/lib" ], "file_history": [ @@ -110,7 +129,7 @@ ], "find": { - "height": 25.0 + "height": 46.0 }, "find_in_files": { @@ -124,6 +143,9 @@ "case_sensitive": true, "find_history": [ + " \treturn new Text('Покупка на сумму 1234.00 руб. проведена', style: new TextStyle(color: tokenActiveTextColor, decorationColor: const Color(0x8ae28aff)));\n", + "getProgressIndicator", + "direc", "_loading", "_merchantID", " \n", @@ -153,7 +175,7 @@ "groups": [ { - "selected": 4, + "selected": 6, "sheets": [ { @@ -162,27 +184,29 @@ "semi_transient": false, "settings": { - "buffer_size": 2856, + "buffer_size": 3196, "regions": { }, "selection": [ [ - 2234, - 2234 + 713, + 713 ] ], "settings": { "auto_name": "", - "syntax": "Packages/Dart/Dart.tmLanguage" + "syntax": "Packages/Dart/Dart.tmLanguage", + "tab_size": 2, + "translate_tabs_to_spaces": true }, "translation.x": 0.0, - "translation.y": 934.0, + "translation.y": 121.0, "zoom_level": 1.0 }, - "stack_index": 1, + "stack_index": 6, "type": "text" }, { @@ -198,8 +222,8 @@ "selection": [ [ - 504, - 504 + 581, + 581 ] ], "settings": @@ -212,7 +236,7 @@ "translation.y": 0.0, "zoom_level": 1.0 }, - "stack_index": 2, + "stack_index": 5, "type": "text" }, { @@ -221,15 +245,15 @@ "semi_transient": false, "settings": { - "buffer_size": 3100, + "buffer_size": 3790, "regions": { }, "selection": [ [ - 2658, - 2658 + 1224, + 1224 ] ], "settings": @@ -239,7 +263,7 @@ "translate_tabs_to_spaces": true }, "translation.x": 0.0, - "translation.y": 0.0, + "translation.y": 390.0, "zoom_level": 1.0 }, "stack_index": 4, @@ -247,29 +271,28 @@ }, { "buffer": 3, - "file": "lib/registration.dart", + "file": "lib/purchase_success.dart", "semi_transient": false, "settings": { - "buffer_size": 4245, + "buffer_size": 1219, "regions": { }, "selection": [ [ - 1514, - 1514 + 724, + 724 ] ], "settings": { - "syntax": "Packages/Dart/Dart.tmLanguage", - "tab_size": 2, - "translate_tabs_to_spaces": true + "auto_name": "", + "syntax": "Packages/Dart/Dart.tmLanguage" }, "translation.x": 0.0, - "translation.y": 1802.0, + "translation.y": 0.0, "zoom_level": 1.0 }, "stack_index": 3, @@ -277,19 +300,19 @@ }, { "buffer": 4, - "file": "lib/activate_token.dart", + "file": "lib/main.dart", "semi_transient": false, "settings": { - "buffer_size": 3537, + "buffer_size": 3225, "regions": { }, "selection": [ [ - 595, - 595 + 1267, + 1267 ] ], "settings": @@ -299,7 +322,67 @@ "translate_tabs_to_spaces": true }, "translation.x": 0.0, - "translation.y": 0.0, + "translation.y": 367.0, + "zoom_level": 1.0 + }, + "stack_index": 2, + "type": "text" + }, + { + "buffer": 5, + "file": "lib/registration.dart", + "semi_transient": false, + "settings": + { + "buffer_size": 4032, + "regions": + { + }, + "selection": + [ + [ + 990, + 990 + ] + ], + "settings": + { + "syntax": "Packages/Dart/Dart.tmLanguage", + "tab_size": 2, + "translate_tabs_to_spaces": true + }, + "translation.x": 0.0, + "translation.y": 630.0, + "zoom_level": 1.0 + }, + "stack_index": 1, + "type": "text" + }, + { + "buffer": 6, + "file": "lib/activate_token.dart", + "semi_transient": false, + "settings": + { + "buffer_size": 3446, + "regions": + { + }, + "selection": + [ + [ + 2138, + 2156 + ] + ], + "settings": + { + "syntax": "Packages/Dart/Dart.tmLanguage", + "tab_size": 2, + "translate_tabs_to_spaces": true + }, + "translation.x": 0.0, + "translation.y": 222.0, "zoom_level": 1.0 }, "stack_index": 0, diff --git a/lib/activate_token.dart b/lib/activate_token.dart index b3dfcf8..606cbd1 100644 --- a/lib/activate_token.dart +++ b/lib/activate_token.dart @@ -11,10 +11,6 @@ class FinishRegistrationScreen extends StatefulWidget { class _RegistrationScreenState extends BaseState { - @override Widget build(BuildContext context) { - return new Scaffold(appBar: _getAppBar(), body: _getScreen(context)); - } - @override String getTitle() { return "Регистрация"; } @@ -23,11 +19,11 @@ class _RegistrationScreenState extends BaseState { return 'ID merchant'; } - @overide getMenuButtons() { + @overide getMenuButtons(BuildContext context) { return [new IconButton(icon: new Icon(Icons.help_outline), onPressed: () {})]; } - Widget _getScreen(BuildContext context) { + @override Widget _getScreenContent(BuildContext context) { if (textFieldValue == "") { _getSavedValue(); } diff --git a/lib/base_state.dart b/lib/base_state.dart index 342a832..1945952 100644 --- a/lib/base_state.dart +++ b/lib/base_state.dart @@ -11,11 +11,21 @@ abstract class BaseState extends State { String error = null; String textFieldValue = ""; - AppBar getAppBar() { - return new AppBar(title: new Text(getTitle(), style: new TextStyle(fontSize: 18.0)), - backgroundColor: primaryColor, actions: getMenuButtons()); + @override Widget build(BuildContext context) { + return new Scaffold(appBar: getAppBar(context), body: getBody(context)); } + AppBar getAppBar(BuildContext context) { + return new AppBar(title: new Text(getTitle(), style: new TextStyle(fontSize: 18.0)), + backgroundColor: primaryColor, actions: getMenuButtons(context)); + } + + Widget getBody(BuildContext context) { + return new Stack(children: [getScreenContent(), getProgressIndicator()]); + } + + Widget getScreenContent(BuildContext context); + String getTitle(); String getHint(); diff --git a/lib/main.dart b/lib/main.dart index 9b3b896..d50d697 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -62,18 +62,7 @@ startScanner(BuildContext context) async { platform.setMethodCallHandler((MethodCall call) async { if (call.method == 'foo') { - - String url = intUrl + 'tokens/' + token + '?_dmapptoken=' + intToken; - - httpClient.delete(url).then((response) { - - print(response.body); - - }).catchError((error) { - print(error.toString()); - }); - - pushRoute(context, new RegistrationScreen()); + logout(); } else { pushRoute(context, new PurchaseScreen()); } @@ -85,6 +74,19 @@ startScanner(BuildContext context) async { await platform.invokeMethod('startScanner'); } +logout(BuildContext context) { + + // String url = intUrl + 'tokens/' + token + '?_dmapptoken=' + intToken; + + // httpClient.delete(url).then((response) { + // print(response.body); + // }).catchError((error) { + // print(error.toString()); + // }); + + pushRoute(context, new RegistrationScreen()); +} + /// Навигация по приложению. /// widget - следующий экран приложения. pushRoute(BuildContext context, Widget widget) { diff --git a/lib/purchase.dart b/lib/purchase.dart index fc22dc0..e4bfb4b 100644 --- a/lib/purchase.dart +++ b/lib/purchase.dart @@ -4,19 +4,17 @@ import 'dart:convert'; import 'dart:async'; import 'main.dart'; -import 'activate_token.dart'; import 'base_state.dart'; +import 'purchase_success.dart'; /// Экран проведения покупки. class PurchaseScreen extends StatefulWidget { - @override State createState() => new _PurchaseScreenState(); + @override State createState() => new PurchaseScreenState(); } -class _PurchaseScreenState extends BaseState { +class PurchaseScreenState extends BaseState { - @override Widget build(BuildContext context) { - return new Scaffold(appBar: getAppBar(), body: _getScreen(context)); - } + String _sum = "1234.00"; @override String getTitle() { return "Проведение покупки"; @@ -26,29 +24,28 @@ class _PurchaseScreenState extends BaseState { return 'Сумма'; } - @overide getMenuButtons() { - return [new IconButton(icon: new Icon(Icons.help_outline), onPressed: () {})]; + @overide getMenuButtons(BuildContext context) { + return [ + new IconButton(icon: new Icon(Icons.help_outline), onPressed: () {}), + new IconButton(icon: new Image.asset(logout_png, height: 20.0, width: 20.0), onPressed: () => logout(context)) + ]; } - Widget _getScreen(BuildContext context) { - return new Stack(children: [_getScreenContent(context), getProgressIndicator()]); - } - - Widget _getScreenContent(BuildContext context) { + @override Widget getScreenContent() { return new Container(height: 398.0, child: new ListView(reverse: true, children: [ new Column(children: [ - _getValueWithTitle('ФИО', 'Знаменитый Рокер Паук'), - _getValueWithTitle('Карта', 'B0399900702'), - _getValueWithTitle('Вознаграждение', '100%'), + getValueWithTitle('ФИО', 'Знаменитый Рокер Паук'), + getValueWithTitle('Карта', 'B0399900702'), + getValueWithTitle('Вознаграждение', '100%'), getHintLabel(), getDecoratedTextWidget(), - _getApprovePurchaseButton(context), - _getScanButton(context)]) + getApprovePurchaseButton(context), + buildScanButton(context)]) ].reversed.toList())); } - Widget _getValueWithTitle(String title, String value) { + Widget getValueWithTitle(String title, String value) { return new Container(padding: new EdgeInsets.only(left: verticalMargin, right: verticalMargin, top: 12.0), child: new Column(children: [ new Row(crossAxisAlignment: CrossAxisAlignment.start, children: [new Text(title, textAlign: TextAlign.left, style: new TextStyle(color: greyTextColor, fontSize: 14.0))]), @@ -56,29 +53,53 @@ class _PurchaseScreenState extends BaseState { ])); } - Widget _getApprovePurchaseButton(BuildContext context) { - return new Container(margin: new EdgeInsets.only(top: 36.0), height: 42.0, - child: new RaisedButton(child: new Text('ЗАФИКСИРОВАТЬ ПОКУПКУ', + Widget getApprovePurchaseButton(BuildContext context) { + return new Container(margin: new EdgeInsets.only(top: 36.0), height: 44.0, + child: new RaisedButton(child: new Text('ЗАВЕРШИТЬ ПОКУПКУ', style: new TextStyle(color: Colors.white)), - onPressed: () => _purchase(), + onPressed: () => _purchase(context), color: primaryColor)); } - Widget _getScanButton(BuildContext context) { - return new Container(margin: new EdgeInsets.only(top: 36.0), height: 42.0, - child: new RaisedButton(child: new Container(height: 42.0, child: new Text('СКАНИРОВАТЬ', - style: new TextStyle(color: Colors.white)), - decoration: getDecoraionForScanButton()), - onPressed: () => _purchase())); + Widget buildScanButton(BuildContext context) { + return new Container(margin: new EdgeInsets.only(top: 24.0, left: 70.0, right: 70.0), child: _getScanButtonRow(context)); } - getDecoraionForScanButton() { + Widget _getScanButtonRow(BuildContext context) { + return new Row(children: [new Expanded(child: _getScanButton(context))]); + } + + Widget _getScanButton(BuildContext context) { + return new Container(height: 44.0, child: new FlatButton(child: new Text('СКАНИРОВАТЬ', + style: new TextStyle(color: primaryColor)), + onPressed: () => startScanner(context)), + decoration: _getDecoraionForScanButton()); + } + + _getDecoraionForScanButton() { return new BoxDecoration( border: new Border.all(color: primaryColor, width: 1.0), borderRadius: new BorderRadius.all(new Radius.circular(4.0))); } - _purchase() { + _purchase(BuildContext context) { + showDialog(context: context, child: new AlertDialog( + title: new Text('Подтверждение'), + content: new Text('Вы подтверждаете покупку на ${_sum} руб?'), + actions: [ + new FlatButton( + child: new Text('Нет'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + new FlatButton( + child: new Text('Дат'), + onPressed: () { + pushRoute(context, new PurchaseSuccessScreen()); + }, + ) + ])); print('purchase'); } diff --git a/lib/purchase_success.dart b/lib/purchase_success.dart new file mode 100644 index 0000000..3c81d13 --- /dev/null +++ b/lib/purchase_success.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +import 'main.dart'; +import 'base_state.dart'; +import 'purchase.dart'; + +/// Экран проведения покупки. +class PurchaseSuccessScreen extends StatefulWidget { + @override State createState() => new _PurchaseSuccessScreenState(); +} + +class _PurchaseSuccessScreenState extends PurchaseScreenState { + + @override String getTitle() { + return "Проведение покупки"; + } + + @overide getMenuButtons(BuildContext context) { + return [ + new IconButton(icon: new Icon(Icons.help_outline), onPressed: () {}), + new IconButton(icon: new Image.asset(logout_png, height: 20.0, width: 20.0), onPressed: () => logout(context)) + ]; + } + + @override Widget getScreenContent() { + return new Column(children: [ + getValueWithTitle('Покупатель', 'Знаменитый Рокер Паук'), + _getSuccessMessage(), + getApprovePurchaseButton(context) + ]); + } + + _getSuccessMessage() { + return new Container(height: 64.0, decoration: new BoxDecoration(color: const Color(0x8ae28aff)), child: new Text('Покупка на сумму 1234.00 руб. проведена', style: new TextStyle(color: tokenActiveTextColor))); + } + +} \ No newline at end of file diff --git a/lib/registration.dart b/lib/registration.dart index 4ebedc0..c3dde74 100644 --- a/lib/registration.dart +++ b/lib/registration.dart @@ -16,10 +16,6 @@ class RegistrationScreen extends StatefulWidget { class _RegistrationScreenState extends BaseState { - @override build(BuildContext context) { - return new Scaffold(appBar: getAppBar(), body: _getScreen(context)); - } - @override String getTitle() { return "Регистрация"; } @@ -28,17 +24,13 @@ class _RegistrationScreenState extends BaseState { return 'ID merchant'; } - @overide getMenuButtons() { + @overide getMenuButtons(BuildContext context) { return [new IconButton(icon: new Icon(Icons.help_outline), onPressed: () {})]; } - _getScreen(BuildContext context) { - return new Stack(children: [_getScreenContent(), getProgressIndicator()]); - } - /// Высота контейнера задана для того, чтобы элементы располагались вверху экрана /// и список скроллился снизу вверх при открытии клавиатуры. - _getScreenContent() { + @override Widget getScreenContent() { return new Container(height: 332.0, child: new ListView(reverse: true, children: [ new Center(child: new Column(children: [ diff --git a/lib/splash.dart b/lib/splash.dart index 44e8300..8ac45d0 100644 --- a/lib/splash.dart +++ b/lib/splash.dart @@ -17,8 +17,8 @@ class SplashScreen extends StatelessWidget { // После этого начинается проверка токена. new Future.delayed(const Duration(milliseconds: 1000), () { - // pushRoute(context, new PurchaseScreen()); - _showNextScreen(context); + pushRoute(context, new PurchaseScreen()); + // _showNextScreen(context); }); return new Image.asset(splash_png, fit: BoxFit.cover);