Локализация платформонезависимой части приложения
This commit is contained in:
@@ -2,13 +2,12 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
|
|
||||||
import 'common.dart';
|
import 'common.dart';
|
||||||
import 'network.dart';
|
|
||||||
import 'consts.dart';
|
import 'consts.dart';
|
||||||
|
|
||||||
abstract class BaseState<T> extends State<T> {
|
abstract class BaseState<T> extends State<StatefulWidget> {
|
||||||
|
|
||||||
bool loading = false;
|
bool loading = false;
|
||||||
String error = null;
|
String error;
|
||||||
String textFieldValue = '';
|
String textFieldValue = '';
|
||||||
|
|
||||||
TextEditingController controller = new TextEditingController();
|
TextEditingController controller = new TextEditingController();
|
||||||
@@ -22,7 +21,7 @@ abstract class BaseState<T> extends State<T> {
|
|||||||
backgroundColor: primaryColor, actions: getMenuButtons(context));
|
backgroundColor: primaryColor, actions: getMenuButtons(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
@overide getMenuButtons(BuildContext context) {
|
getMenuButtons(BuildContext context) {
|
||||||
return <Widget>[getFaqButton()];
|
return <Widget>[getFaqButton()];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,7 +37,7 @@ abstract class BaseState<T> extends State<T> {
|
|||||||
return new Stack(children: <Widget>[getScreenContent(), getProgressIndicator()]);
|
return new Stack(children: <Widget>[getScreenContent(), getProgressIndicator()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget getScreenContent(BuildContext context);
|
Widget getScreenContent();
|
||||||
|
|
||||||
String getTitle();
|
String getTitle();
|
||||||
|
|
||||||
@@ -80,7 +79,7 @@ abstract class BaseState<T> extends State<T> {
|
|||||||
getDecoratedTextWidget() {
|
getDecoratedTextWidget() {
|
||||||
return new Container(margin: new EdgeInsets.only(left: verticalMargin, right: verticalMargin),
|
return new Container(margin: new EdgeInsets.only(left: verticalMargin, right: verticalMargin),
|
||||||
padding: getPaddingForTextWidget(),
|
padding: getPaddingForTextWidget(),
|
||||||
decoration: getDecoraionForTextWidget(),
|
decoration: getDecorationForTextWidget(),
|
||||||
child: getTextWidget());
|
child: getTextWidget());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,7 +93,7 @@ abstract class BaseState<T> extends State<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Метод возвращает BoxDecoration для _getDecoratedInputField
|
/// Метод возвращает BoxDecoration для _getDecoratedInputField
|
||||||
getDecoraionForTextWidget() {
|
getDecorationForTextWidget() {
|
||||||
return new BoxDecoration(color: getTextFilledBackground(),
|
return new BoxDecoration(color: getTextFilledBackground(),
|
||||||
border: new Border.all(color: textBorderColor, width: 1.0),
|
border: new Border.all(color: textBorderColor, width: 1.0),
|
||||||
borderRadius: new BorderRadius.all(new Radius.circular(4.0)));
|
borderRadius: new BorderRadius.all(new Radius.circular(4.0)));
|
||||||
@@ -138,10 +137,10 @@ abstract class BaseState<T> extends State<T> {
|
|||||||
return new Container(height: buttonHeight, child: new FlatButton(child: new Text(title,
|
return new Container(height: buttonHeight, child: new FlatButton(child: new Text(title,
|
||||||
style: new TextStyle(color: textColor)),
|
style: new TextStyle(color: textColor)),
|
||||||
onPressed: () => startScanner(context)),
|
onPressed: () => startScanner(context)),
|
||||||
decoration: _getDecoraionForScanButton());
|
decoration: getDecorationForScanButton());
|
||||||
}
|
}
|
||||||
|
|
||||||
_getDecoraionForScanButton() {
|
getDecorationForScanButton() {
|
||||||
return new BoxDecoration(
|
return new BoxDecoration(
|
||||||
border: new Border.all(color: primaryColor, width: 1.0),
|
border: new Border.all(color: primaryColor, width: 1.0),
|
||||||
borderRadius: new BorderRadius.all(new Radius.circular(4.0)));
|
borderRadius: new BorderRadius.all(new Radius.circular(4.0)));
|
||||||
|
|||||||
@@ -3,9 +3,10 @@ import 'package:flutter/material.dart';
|
|||||||
|
|
||||||
import 'consts.dart';
|
import 'consts.dart';
|
||||||
import 'network.dart';
|
import 'network.dart';
|
||||||
import 'registration.dart';
|
import 'package:checker/registration/registration.dart';
|
||||||
import 'purchase.dart';
|
import 'package:checker/purchase/purchase.dart';
|
||||||
import 'faq.dart';
|
import 'faq.dart';
|
||||||
|
import 'strings.dart';
|
||||||
|
|
||||||
// Канал для взаимодействия с кодом платформы.
|
// Канал для взаимодействия с кодом платформы.
|
||||||
const platform = const MethodChannel('com.dinect.checker/instance_id');
|
const platform = const MethodChannel('com.dinect.checker/instance_id');
|
||||||
@@ -46,7 +47,7 @@ logout(BuildContext context) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
showYesNoDialog(context, 'Подтверждение', 'Вы действительно хотите выйти и ввести другой номер магазина?', positiveCalback);
|
showYesNoDialog(context, Strings.of(context).confirmation(), Strings.of(context).askChangeStore(), positiveCalback);
|
||||||
}
|
}
|
||||||
|
|
||||||
forceLogout(BuildContext context) {
|
forceLogout(BuildContext context) {
|
||||||
@@ -100,12 +101,12 @@ showYesNoDialog(BuildContext context, String title, String content, VoidCallback
|
|||||||
content: new Text(content),
|
content: new Text(content),
|
||||||
actions: <Widget>[
|
actions: <Widget>[
|
||||||
new FlatButton(
|
new FlatButton(
|
||||||
child: new Text('Нет'),
|
child: new Text(Strings.of(context).no()),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.of(context).pop();
|
Navigator.of(context).pop();
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
new FlatButton(
|
new FlatButton(
|
||||||
child: new Text('Да'),
|
child: new Text(Strings.of(context).yes()),
|
||||||
onPressed: positiveCallback)]));
|
onPressed: positiveCallback)]));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ import 'package:flutter/material.dart';
|
|||||||
// Serious constants
|
// Serious constants
|
||||||
const String appName = "Dinect";
|
const String appName = "Dinect";
|
||||||
|
|
||||||
const String url = 'https://pos-api-autoclub.dinect.com/20130701/';
|
const String url = 'https://pos-api-int.dinect.com/20130701/';
|
||||||
const String appToken = 'bdea0f3ba9034b688019a7cac753d1209e2b227f';
|
const String appToken = '9fec83cdca38c357e6b65dbb17514cdd36bf2a08';
|
||||||
|
|
||||||
// Assets
|
// Assets
|
||||||
const String logo_png = 'assets/registration_logo.png';
|
const String logo_png = 'assets/registration_logo.png';
|
||||||
@@ -29,6 +29,5 @@ const Color faqTitlesColor = const Color(0xff404040);
|
|||||||
|
|
||||||
// Dimens
|
// Dimens
|
||||||
const double verticalMargin = 28.0;
|
const double verticalMargin = 28.0;
|
||||||
const double buttonVerticalMargin = 42.0;
|
|
||||||
const double buttonHeight = 48.0;
|
const double buttonHeight = 48.0;
|
||||||
const double iconHeight = 20.0;
|
const double iconHeight = 20.0;
|
||||||
|
|||||||
11
lib/faq.dart
11
lib/faq.dart
@@ -1,5 +1,4 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
|
||||||
|
|
||||||
import 'base_state.dart';
|
import 'base_state.dart';
|
||||||
import 'consts.dart';
|
import 'consts.dart';
|
||||||
@@ -38,7 +37,7 @@ class EntryItem extends StatelessWidget {
|
|||||||
class FAQScreen extends StatefulWidget {
|
class FAQScreen extends StatefulWidget {
|
||||||
|
|
||||||
FAQScreen(this.b);
|
FAQScreen(this.b);
|
||||||
bool b;
|
final bool b;
|
||||||
|
|
||||||
@override State createState() => new FAQScreenState<FAQScreen>(b);
|
@override State createState() => new FAQScreenState<FAQScreen>(b);
|
||||||
}
|
}
|
||||||
@@ -46,16 +45,20 @@ class FAQScreen extends StatefulWidget {
|
|||||||
class FAQScreenState<T> extends BaseState<FAQScreen> {
|
class FAQScreenState<T> extends BaseState<FAQScreen> {
|
||||||
|
|
||||||
FAQScreenState(this.returnToScanner);
|
FAQScreenState(this.returnToScanner);
|
||||||
bool returnToScanner;
|
final bool returnToScanner;
|
||||||
|
|
||||||
@override String getTitle() {
|
@override String getTitle() {
|
||||||
return "FAQ";
|
return "FAQ";
|
||||||
}
|
}
|
||||||
|
|
||||||
@overide getMenuButtons(BuildContext context) {
|
@override getMenuButtons(BuildContext context) {
|
||||||
return <Widget>[getLogoutButton()];
|
return <Widget>[getLogoutButton()];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override String getHint() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/// Метод возвращает ListView с блоками faq.
|
/// Метод возвращает ListView с блоками faq.
|
||||||
@override Widget getScreenContent() {
|
@override Widget getScreenContent() {
|
||||||
return new WillPopScope(onWillPop: onWillPop, child: new ListView.builder(
|
return new WillPopScope(onWillPop: onWillPop, child: new ListView.builder(
|
||||||
|
|||||||
@@ -8,10 +8,10 @@ import 'package:intl/intl.dart';
|
|||||||
import 'package:intl/message_lookup_by_library.dart';
|
import 'package:intl/message_lookup_by_library.dart';
|
||||||
import 'package:intl/src/intl_helpers.dart';
|
import 'package:intl/src/intl_helpers.dart';
|
||||||
|
|
||||||
import 'stock_messages_messages_en.dart' as messages_messages_en;
|
import 'messages_en.dart' as messages_messages_en;
|
||||||
import 'stock_messages_messages_es.dart' as messages_messages_es;
|
import 'messages_es.dart' as messages_messages_es;
|
||||||
import 'stock_messages_messages_ru.dart' as messages_messages_ru;
|
import 'messages_ru.dart' as messages_messages_ru;
|
||||||
import 'stock_messages_messages_ua.dart' as messages_messages_ua;
|
import 'messages_ua.dart' as messages_messages_ua;
|
||||||
|
|
||||||
typedef Future<dynamic> LibraryLoader();
|
typedef Future<dynamic> LibraryLoader();
|
||||||
Map<String, LibraryLoader> _deferredLibraries = {
|
Map<String, LibraryLoader> _deferredLibraries = {
|
||||||
@@ -25,10 +25,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
|||||||
"carry_purchase" : MessageLookupByLibrary.simpleMessage("Сarrying out a purchase"),
|
"carry_purchase" : MessageLookupByLibrary.simpleMessage("Сarrying out a purchase"),
|
||||||
"complite_activ" : MessageLookupByLibrary.simpleMessage("Complete registration"),
|
"complite_activ" : MessageLookupByLibrary.simpleMessage("Complete registration"),
|
||||||
"complite_purchase" : MessageLookupByLibrary.simpleMessage("Complete purchase"),
|
"complite_purchase" : MessageLookupByLibrary.simpleMessage("Complete purchase"),
|
||||||
"confirm_purchase" : MessageLookupByLibrary.simpleMessage("You confirm the purchase for N USD"),
|
"confirm_purchase" : MessageLookupByLibrary.simpleMessage("You confirm the purchase for %s USD"),
|
||||||
"confirmation" : MessageLookupByLibrary.simpleMessage("Сonfirmation"),
|
"confirmation" : MessageLookupByLibrary.simpleMessage("Сonfirmation"),
|
||||||
"no" : MessageLookupByLibrary.simpleMessage("No"),
|
"no" : MessageLookupByLibrary.simpleMessage("No"),
|
||||||
"purchase_complite" : MessageLookupByLibrary.simpleMessage("A purchase of N USD was complite"),
|
"purchase_complite" : MessageLookupByLibrary.simpleMessage("A purchase of %s USD was complite"),
|
||||||
"registration" : MessageLookupByLibrary.simpleMessage("Registration"),
|
"registration" : MessageLookupByLibrary.simpleMessage("Registration"),
|
||||||
"request_sent_wait_activ" : MessageLookupByLibrary.simpleMessage("The activation request for the application has been sent, wait for confirm activation"),
|
"request_sent_wait_activ" : MessageLookupByLibrary.simpleMessage("The activation request for the application has been sent, wait for confirm activation"),
|
||||||
"reward" : MessageLookupByLibrary.simpleMessage("Reward"),
|
"reward" : MessageLookupByLibrary.simpleMessage("Reward"),
|
||||||
@@ -25,10 +25,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
|||||||
"carry_purchase" : MessageLookupByLibrary.simpleMessage("Realizar la compra"),
|
"carry_purchase" : MessageLookupByLibrary.simpleMessage("Realizar la compra"),
|
||||||
"complite_activ" : MessageLookupByLibrary.simpleMessage("Terminar el registro"),
|
"complite_activ" : MessageLookupByLibrary.simpleMessage("Terminar el registro"),
|
||||||
"complite_purchase" : MessageLookupByLibrary.simpleMessage("Terminar la compra"),
|
"complite_purchase" : MessageLookupByLibrary.simpleMessage("Terminar la compra"),
|
||||||
"confirm_purchase" : MessageLookupByLibrary.simpleMessage("¿Confirmais la compra por N euros?"),
|
"confirm_purchase" : MessageLookupByLibrary.simpleMessage("¿Confirmais la compra por %s euros?"),
|
||||||
"confirmation" : MessageLookupByLibrary.simpleMessage("Confirmacón"),
|
"confirmation" : MessageLookupByLibrary.simpleMessage("Confirmacón"),
|
||||||
"no" : MessageLookupByLibrary.simpleMessage("No"),
|
"no" : MessageLookupByLibrary.simpleMessage("No"),
|
||||||
"purchase_complite" : MessageLookupByLibrary.simpleMessage("La compra por N euros está realizada"),
|
"purchase_complite" : MessageLookupByLibrary.simpleMessage("La compra por %s euros está realizada"),
|
||||||
"registration" : MessageLookupByLibrary.simpleMessage("El registro"),
|
"registration" : MessageLookupByLibrary.simpleMessage("El registro"),
|
||||||
"request_sent_wait_activ" : MessageLookupByLibrary.simpleMessage("El requieremento de activación de aplicación esta mandado, esperad la activación por el administrador."),
|
"request_sent_wait_activ" : MessageLookupByLibrary.simpleMessage("El requieremento de activación de aplicación esta mandado, esperad la activación por el administrador."),
|
||||||
"reward" : MessageLookupByLibrary.simpleMessage("Gratificación"),
|
"reward" : MessageLookupByLibrary.simpleMessage("Gratificación"),
|
||||||
@@ -25,10 +25,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
|||||||
"carry_purchase" : MessageLookupByLibrary.simpleMessage("Проведение покупки"),
|
"carry_purchase" : MessageLookupByLibrary.simpleMessage("Проведение покупки"),
|
||||||
"complite_activ" : MessageLookupByLibrary.simpleMessage("Завершить регистрацию"),
|
"complite_activ" : MessageLookupByLibrary.simpleMessage("Завершить регистрацию"),
|
||||||
"complite_purchase" : MessageLookupByLibrary.simpleMessage("Завершить покупку"),
|
"complite_purchase" : MessageLookupByLibrary.simpleMessage("Завершить покупку"),
|
||||||
"confirm_purchase" : MessageLookupByLibrary.simpleMessage("Вы подтверждаете покупку на N рублей"),
|
"confirm_purchase" : MessageLookupByLibrary.simpleMessage("Вы подтверждаете покупку на %s рублей"),
|
||||||
"confirmation" : MessageLookupByLibrary.simpleMessage("Подтверждение"),
|
"confirmation" : MessageLookupByLibrary.simpleMessage("Подтверждение"),
|
||||||
"no" : MessageLookupByLibrary.simpleMessage("Нет"),
|
"no" : MessageLookupByLibrary.simpleMessage("Нет"),
|
||||||
"purchase_complite" : MessageLookupByLibrary.simpleMessage("Покупка на сумму N рублей проведена"),
|
"purchase_complite" : MessageLookupByLibrary.simpleMessage("Покупка на сумму %s рублей проведена"),
|
||||||
"registration" : MessageLookupByLibrary.simpleMessage("Регистрация"),
|
"registration" : MessageLookupByLibrary.simpleMessage("Регистрация"),
|
||||||
"request_sent_wait_activ" : MessageLookupByLibrary.simpleMessage("Запрос на активацию приложения отправлен, дождитесь подтверждения активации администратором"),
|
"request_sent_wait_activ" : MessageLookupByLibrary.simpleMessage("Запрос на активацию приложения отправлен, дождитесь подтверждения активации администратором"),
|
||||||
"reward" : MessageLookupByLibrary.simpleMessage("Вознаграждение"),
|
"reward" : MessageLookupByLibrary.simpleMessage("Вознаграждение"),
|
||||||
@@ -25,10 +25,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
|||||||
"carry_purchase" : MessageLookupByLibrary.simpleMessage("Проведення покупки"),
|
"carry_purchase" : MessageLookupByLibrary.simpleMessage("Проведення покупки"),
|
||||||
"complite_activ" : MessageLookupByLibrary.simpleMessage("Завершити реєстрацію"),
|
"complite_activ" : MessageLookupByLibrary.simpleMessage("Завершити реєстрацію"),
|
||||||
"complite_purchase" : MessageLookupByLibrary.simpleMessage("Завершити купівлю"),
|
"complite_purchase" : MessageLookupByLibrary.simpleMessage("Завершити купівлю"),
|
||||||
"confirm_purchase" : MessageLookupByLibrary.simpleMessage("Ви підтверджуєте покупку на N гривень"),
|
"confirm_purchase" : MessageLookupByLibrary.simpleMessage("Ви підтверджуєте покупку на %s гривень"),
|
||||||
"confirmation" : MessageLookupByLibrary.simpleMessage("Підтвердження"),
|
"confirmation" : MessageLookupByLibrary.simpleMessage("Підтвердження"),
|
||||||
"no" : MessageLookupByLibrary.simpleMessage("Ні"),
|
"no" : MessageLookupByLibrary.simpleMessage("Ні"),
|
||||||
"purchase_complite" : MessageLookupByLibrary.simpleMessage("Купівля на суму N гривень проведена"),
|
"purchase_complite" : MessageLookupByLibrary.simpleMessage("Купівля на суму %s гривень проведена"),
|
||||||
"registration" : MessageLookupByLibrary.simpleMessage("Реєстрація"),
|
"registration" : MessageLookupByLibrary.simpleMessage("Реєстрація"),
|
||||||
"request_sent_wait_activ" : MessageLookupByLibrary.simpleMessage("Запит на активацію додатку відправлений, дочекайтеся підтвердження активації адміністратором"),
|
"request_sent_wait_activ" : MessageLookupByLibrary.simpleMessage("Запит на активацію додатку відправлений, дочекайтеся підтвердження активації адміністратором"),
|
||||||
"reward" : MessageLookupByLibrary.simpleMessage("Винагорода"),
|
"reward" : MessageLookupByLibrary.simpleMessage("Винагорода"),
|
||||||
@@ -1,16 +1,16 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'splash.dart';
|
import 'splash.dart';
|
||||||
import 'consts.dart';
|
import 'consts.dart';
|
||||||
import 'stock_strings.dart';
|
import 'strings.dart';
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'i18n/stock_messages_all.dart';
|
import 'i18n/messages_all.dart';
|
||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
|
|
||||||
Future<LocaleQueryData> _onLocaleChanged(Locale locale) async {
|
Future<LocaleQueryData> _onLocaleChanged(Locale locale) async {
|
||||||
final String localeString = locale.toString();
|
final String localeString = locale.toString();
|
||||||
await initializeMessages(localeString);
|
await initializeMessages(localeString);
|
||||||
Intl.defaultLocale = localeString;
|
Intl.defaultLocale = localeString;
|
||||||
return StockStrings.instance;
|
return Strings.instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Точка входа в приложение.
|
/// Точка входа в приложение.
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'dart:async';
|
|
||||||
|
|
||||||
import 'consts.dart';
|
import 'consts.dart';
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,13 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'dart:async';
|
|
||||||
import 'dart:core';
|
import 'dart:core';
|
||||||
|
|
||||||
import 'main.dart';
|
import 'package:checker/strings.dart';
|
||||||
import 'common.dart';
|
import 'package:checker/common.dart';
|
||||||
import 'consts.dart';
|
import 'package:checker/consts.dart';
|
||||||
import 'network.dart';
|
import 'package:checker/network.dart';
|
||||||
import 'base_state.dart';
|
import 'package:checker/base_state.dart';
|
||||||
import 'purchase_success.dart';
|
import 'purchase_success.dart';
|
||||||
|
|
||||||
/// Экран проведения покупки.
|
/// Экран проведения покупки.
|
||||||
@@ -16,8 +15,8 @@ class PurchaseScreen extends StatefulWidget {
|
|||||||
|
|
||||||
PurchaseScreen(this.user, this.card);
|
PurchaseScreen(this.user, this.card);
|
||||||
|
|
||||||
String user;
|
final String user;
|
||||||
String card;
|
final String card;
|
||||||
|
|
||||||
@override State createState() => new PurchaseScreenState<PurchaseScreen>(user, card);
|
@override State createState() => new PurchaseScreenState<PurchaseScreen>(user, card);
|
||||||
}
|
}
|
||||||
@@ -37,25 +36,39 @@ class PurchaseScreenState<T> extends BaseState<PurchaseScreen> {
|
|||||||
@override Widget getScreenContent() {
|
@override Widget getScreenContent() {
|
||||||
return new Column(
|
return new Column(
|
||||||
children: <Widget>[new Expanded(child: new ListView(children: <Widget>[
|
children: <Widget>[new Expanded(child: new ListView(children: <Widget>[
|
||||||
getValueWithTitle('ФИО', user['first_name'] == null ? '' : user['first_name']),
|
getValueWithTitle(Strings.of(context).userName(), user['first_name'] == null ? '' : user['first_name']),
|
||||||
getValueWithTitle('Карта', card),
|
getValueWithTitle(Strings.of(context).card(), card),
|
||||||
getValueWithTitle('Вознаграждение', loyality),
|
getValueWithTitle(Strings.of(context).reward(), loyality),
|
||||||
getHintLabel(),
|
getHintLabel(),
|
||||||
getDecoratedTextWidget(),
|
getDecoratedTextWidget(),
|
||||||
buildButton(new EdgeInsets.only(top: 36.0, left: buttonVerticalMargin, right: buttonVerticalMargin), buildRaisedButton(context, 'ЗАВЕРШИТЬ ПОКУПКУ', () => onPurchaseClick(context))),
|
buildButton(getScreenMargins(36.0), getCompleteButton()),
|
||||||
buildButton(new EdgeInsets.only(top: 24.0, left: buttonVerticalMargin, right: buttonVerticalMargin), buildFlatButton(context, 'СКАНИРОВАТЬ', primaryColor))
|
buildButton(getScreenMargins(24.0), getScanButton())
|
||||||
]))]);
|
]))]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getScreenMargins(double top) {
|
||||||
|
double side = 42.0;
|
||||||
|
return new EdgeInsets.only(top: top, left: side, right: side);
|
||||||
|
}
|
||||||
|
|
||||||
|
getCompleteButton() {
|
||||||
|
String title = Strings.of(context).completePurchase();
|
||||||
|
return buildRaisedButton(context, title, () => onPurchaseClick(context));
|
||||||
|
}
|
||||||
|
|
||||||
|
getScanButton() {
|
||||||
|
return buildFlatButton(context, Strings.of(context).scan(), primaryColor);
|
||||||
|
}
|
||||||
|
|
||||||
@override String getTitle() {
|
@override String getTitle() {
|
||||||
return "Проведение покупки";
|
return Strings.of(context).carryingPurchase();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override getHint() {
|
@override getHint() {
|
||||||
return 'Сумма';
|
return Strings.of(context).sum();
|
||||||
}
|
}
|
||||||
|
|
||||||
@overide getMenuButtons(BuildContext context) {
|
@override getMenuButtons(BuildContext context) {
|
||||||
return <Widget>[getFaqButton(), getLogoutButton()];
|
return <Widget>[getFaqButton(), getLogoutButton()];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,7 +143,7 @@ class PurchaseScreenState<T> extends BaseState<PurchaseScreen> {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
sumTotal = num.parse(text);
|
sumTotal = num.parse(text);
|
||||||
} catch(exception, stacktrace) {
|
} catch(exception) {
|
||||||
print(exception);
|
print(exception);
|
||||||
try {
|
try {
|
||||||
int idx = text.indexOf('.');
|
int idx = text.indexOf('.');
|
||||||
@@ -140,7 +153,7 @@ class PurchaseScreenState<T> extends BaseState<PurchaseScreen> {
|
|||||||
fractionalPart = fractionalPart.substring(0, 2);
|
fractionalPart = fractionalPart.substring(0, 2);
|
||||||
}
|
}
|
||||||
return '${integerPart}.${fractionalPart}';
|
return '${integerPart}.${fractionalPart}';
|
||||||
} catch(exception, stacktrace){
|
} catch(exception){
|
||||||
print(exception);
|
print(exception);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -150,17 +163,17 @@ class PurchaseScreenState<T> extends BaseState<PurchaseScreen> {
|
|||||||
onPurchaseClick(BuildContext context) {
|
onPurchaseClick(BuildContext context) {
|
||||||
String val = _parseSum(controller.text);
|
String val = _parseSum(controller.text);
|
||||||
showDialog(context: context, child: new AlertDialog(
|
showDialog(context: context, child: new AlertDialog(
|
||||||
title: new Text('Подтверждение'),
|
title: new Text(Strings.of(context).confirmation()),
|
||||||
content: new Text('Вы подтверждаете покупку на ${val} руб?'),
|
content: new Text(getContentMessage(val)),
|
||||||
actions: <Widget>[
|
actions: <Widget>[
|
||||||
new FlatButton(
|
new FlatButton(
|
||||||
child: new Text('Нет'),
|
child: new Text(Strings.of(context).no()),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.of(context).pop();
|
Navigator.of(context).pop();
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
new FlatButton(
|
new FlatButton(
|
||||||
child: new Text('Да'),
|
child: new Text(Strings.of(context).yes()),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
purchase(val);
|
purchase(val);
|
||||||
},
|
},
|
||||||
@@ -168,7 +181,11 @@ class PurchaseScreenState<T> extends BaseState<PurchaseScreen> {
|
|||||||
]));
|
]));
|
||||||
}
|
}
|
||||||
|
|
||||||
purchase(String sum_total) async {
|
getContentMessage(String val) {
|
||||||
|
return Strings.of(context).confirmPurchase(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
purchase(String sumTotal) async {
|
||||||
|
|
||||||
if (await platform.invokeMethod('isOnline')) {
|
if (await platform.invokeMethod('isOnline')) {
|
||||||
|
|
||||||
@@ -180,7 +197,7 @@ class PurchaseScreenState<T> extends BaseState<PurchaseScreen> {
|
|||||||
'doc_id': result,
|
'doc_id': result,
|
||||||
'curr_iso_code': '643',
|
'curr_iso_code': '643',
|
||||||
'commit': 'true',
|
'commit': 'true',
|
||||||
'sum_total': sum_total
|
'sum_total': sumTotal
|
||||||
};
|
};
|
||||||
|
|
||||||
var headers = {
|
var headers = {
|
||||||
@@ -192,7 +209,7 @@ class PurchaseScreenState<T> extends BaseState<PurchaseScreen> {
|
|||||||
|
|
||||||
print(response.body);
|
print(response.body);
|
||||||
Navigator.of(context).pop();
|
Navigator.of(context).pop();
|
||||||
pushRoute(context, new PurchaseSuccessScreen(sum_total, user['first_name'] == null ? '' : user['first_name']));
|
pushRoute(context, new PurchaseSuccessScreen(sumTotal, user['first_name'] == null ? '' : user['first_name']));
|
||||||
|
|
||||||
}).catchError((error) {
|
}).catchError((error) {
|
||||||
print(error.toString());
|
print(error.toString());
|
||||||
@@ -1,18 +1,16 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
|
||||||
|
|
||||||
import 'main.dart';
|
import 'package:checker/common.dart';
|
||||||
import 'common.dart';
|
import 'package:checker/consts.dart';
|
||||||
import 'consts.dart';
|
import 'package:checker/strings.dart';
|
||||||
import 'base_state.dart';
|
import 'package:checker/base_state.dart';
|
||||||
import 'purchase.dart';
|
|
||||||
|
|
||||||
/// Экран проведения покупки.
|
/// Экран проведения покупки.
|
||||||
class PurchaseSuccessScreen extends StatefulWidget {
|
class PurchaseSuccessScreen extends StatefulWidget {
|
||||||
|
|
||||||
PurchaseSuccessScreen(this.val, this.name);
|
PurchaseSuccessScreen(this.val, this.name);
|
||||||
String val;
|
final String val;
|
||||||
String name;
|
final String name;
|
||||||
|
|
||||||
@override State createState() => new PurchaseSuccessScreenState(val, name);
|
@override State createState() => new PurchaseSuccessScreenState(val, name);
|
||||||
}
|
}
|
||||||
@@ -24,28 +22,46 @@ class PurchaseSuccessScreenState<T> extends BaseState<PurchaseSuccessScreen> {
|
|||||||
String sum;
|
String sum;
|
||||||
String username;
|
String username;
|
||||||
|
|
||||||
@overide getMenuButtons(BuildContext context) {
|
@override getMenuButtons(BuildContext context) {
|
||||||
return <Widget>[getFaqButton(), getLogoutButton()];
|
return <Widget>[getFaqButton(), getLogoutButton()];
|
||||||
}
|
}
|
||||||
|
|
||||||
@override String getTitle() {
|
@override String getTitle() {
|
||||||
return "Проведение покупки";
|
return Strings.of(context).carryingPurchase();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override String getHint() {
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override Widget getScreenContent() {
|
@override Widget getScreenContent() {
|
||||||
return new Column(children: <Widget>[
|
return new Column(children: <Widget>[
|
||||||
getValueWithTitle('Покупатель', username),
|
getValueWithTitle(Strings.of(context).buyer(), username),
|
||||||
getSuccessMessage(),
|
getSuccessMessage(),
|
||||||
new Expanded(child: new Center()),
|
new Expanded(child: new Center()),
|
||||||
buildButton(new EdgeInsets.only(bottom: 74.0, left: buttonVerticalMargin, right: buttonVerticalMargin), buildRaisedButton(context, 'СКАНИРОВАТЬ', () => startScanner(context)))
|
buildButton(getScreenMargins(74.0), getScanButton())
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getScreenMargins(double bottom) {
|
||||||
|
double side = 42.0;
|
||||||
|
return new EdgeInsets.only(bottom: bottom, left: side, right: side);
|
||||||
|
}
|
||||||
|
|
||||||
|
getScanButton() {
|
||||||
|
String title = Strings.of(context).scan();
|
||||||
|
return buildRaisedButton(context, title, () => startScanner(context));
|
||||||
|
}
|
||||||
|
|
||||||
getSuccessMessage() {
|
getSuccessMessage() {
|
||||||
return new Row(children: <Widget>[new Expanded(child: new Container(margin: new EdgeInsets.only(top: 20.0), height: 64.0,
|
return new Row(children: <Widget>[new Expanded(child: new Container(margin: new EdgeInsets.only(top: 20.0), height: 64.0,
|
||||||
decoration: new BoxDecoration(color: greenBackground),
|
decoration: new BoxDecoration(color: greenBackground),
|
||||||
child: new Center(child: new Text('Покупка на сумму ${sum} руб. проведена', textAlign: TextAlign.center,
|
child: new Center(child: new Text(getMessageTitle(), textAlign: TextAlign.center,
|
||||||
style: new TextStyle(fontWeight: FontWeight.bold, color: tokenActiveTextColor)))))]);
|
style: new TextStyle(fontWeight: FontWeight.bold, color: tokenActiveTextColor)))))]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getMessageTitle() {
|
||||||
|
return Strings.of(context).purchaseCompleted(sum);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,11 +1,12 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
|
|
||||||
import 'common.dart';
|
|
||||||
import 'consts.dart';
|
|
||||||
import 'network.dart';
|
|
||||||
import 'dart:convert'; // Пакет для обработки json с ответом от сервера.
|
import 'dart:convert'; // Пакет для обработки json с ответом от сервера.
|
||||||
import 'base_state.dart';
|
|
||||||
|
import 'package:checker/common.dart';
|
||||||
|
import 'package:checker/consts.dart';
|
||||||
|
import 'package:checker/network.dart';
|
||||||
|
import 'package:checker/base_state.dart';
|
||||||
|
import 'package:checker/strings.dart';
|
||||||
|
|
||||||
class FinishRegistrationScreen extends StatefulWidget {
|
class FinishRegistrationScreen extends StatefulWidget {
|
||||||
@override State createState() => new _RegistrationScreenState();
|
@override State createState() => new _RegistrationScreenState();
|
||||||
@@ -23,11 +24,11 @@ class _RegistrationScreenState extends BaseState<FinishRegistrationScreen> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override String getTitle() {
|
@override String getTitle() {
|
||||||
return "Регистрация";
|
return Strings.of(context).registration();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override getHint() {
|
@override getHint() {
|
||||||
return 'ID магазина';
|
return Strings.of(context).idStore();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override Widget getScreenContent() {
|
@override Widget getScreenContent() {
|
||||||
@@ -36,7 +37,9 @@ class _RegistrationScreenState extends BaseState<FinishRegistrationScreen> {
|
|||||||
getHintLabel(),
|
getHintLabel(),
|
||||||
getDecoratedTextWidget(),
|
getDecoratedTextWidget(),
|
||||||
getMessage(),
|
getMessage(),
|
||||||
buildRaisedButton(context, _tokenActive ? 'ЗАВЕРШИТЬ РЕГИСТРАЦИЮ' : 'ОБНОВИТЬ СТАТУС АКТИВАЦИИ', () => handleTap())
|
buildRaisedButton(context, _tokenActive
|
||||||
|
? Strings.of(context).completeRegistration()
|
||||||
|
: Strings.of(context).refreshActivationStatus(), () => handleTap())
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -96,7 +99,9 @@ class _RegistrationScreenState extends BaseState<FinishRegistrationScreen> {
|
|||||||
|
|
||||||
/// Получаем текст сообщения, в зависимости от статуса активации.
|
/// Получаем текст сообщения, в зависимости от статуса активации.
|
||||||
getMessageString() {
|
getMessageString() {
|
||||||
return _tokenActive ? tokenActiveMessage : tokenWaitMessage;
|
return _tokenActive
|
||||||
|
? Strings.of(context).completeRegistration()
|
||||||
|
: Strings.of(context).refreshActivationStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Фоновое изображение для сообщения.
|
/// Фоновое изображение для сообщения.
|
||||||
@@ -1,12 +1,11 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'dart:convert'; // Пакет для обработки json с ответом от сервера.
|
import 'dart:convert'; // Пакет для обработки json с ответом от сервера.
|
||||||
|
|
||||||
import 'common.dart';
|
import 'package:checker/common.dart';
|
||||||
import 'network.dart';
|
import 'package:checker/network.dart';
|
||||||
import 'consts.dart';
|
import 'package:checker/base_state.dart';
|
||||||
|
import 'package:checker/strings.dart';
|
||||||
import 'activate_token.dart';
|
import 'activate_token.dart';
|
||||||
import 'base_state.dart';
|
|
||||||
import 'stock_strings.dart';
|
|
||||||
|
|
||||||
/// Экран регистрации магазина и кассы.
|
/// Экран регистрации магазина и кассы.
|
||||||
class RegistrationScreen extends StatefulWidget {
|
class RegistrationScreen extends StatefulWidget {
|
||||||
@@ -16,11 +15,11 @@ class RegistrationScreen extends StatefulWidget {
|
|||||||
class _RegistrationScreenState extends BaseState<RegistrationScreen> {
|
class _RegistrationScreenState extends BaseState<RegistrationScreen> {
|
||||||
|
|
||||||
@override String getTitle() {
|
@override String getTitle() {
|
||||||
return StockStrings.of(context).registration();
|
return Strings.of(context).registration();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override getHint() {
|
@override getHint() {
|
||||||
return 'ID магазина';
|
return Strings.of(context).idStore();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Список виджетов, автоматически прокручиваемый вверх при открытии клавиатуры.
|
// Список виджетов, автоматически прокручиваемый вверх при открытии клавиатуры.
|
||||||
@@ -38,7 +37,7 @@ class _RegistrationScreenState extends BaseState<RegistrationScreen> {
|
|||||||
// Возвращает кнопку регистрации.
|
// Возвращает кнопку регистрации.
|
||||||
getButton() {
|
getButton() {
|
||||||
return new Container(margin: new EdgeInsets.only(top: 36.0), child:
|
return new Container(margin: new EdgeInsets.only(top: 36.0), child:
|
||||||
buildRaisedButton(context, 'ЗАРЕГИСТРИРОВАТЬ', getOnPressed()));
|
buildRaisedButton(context, Strings.of(context).signUp(), getOnPressed()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Возвращает обработчик нажатий на кнопку регистрации.
|
// Возвращает обработчик нажатий на кнопку регистрации.
|
||||||
@@ -5,8 +5,8 @@ import 'dart:convert';
|
|||||||
import 'common.dart';
|
import 'common.dart';
|
||||||
import 'network.dart';
|
import 'network.dart';
|
||||||
import 'consts.dart';
|
import 'consts.dart';
|
||||||
import 'registration.dart';
|
import 'package:checker/registration/registration.dart';
|
||||||
import 'activate_token.dart';
|
import 'package:checker/registration/activate_token.dart';
|
||||||
|
|
||||||
class SplashScreen extends StatelessWidget {
|
class SplashScreen extends StatelessWidget {
|
||||||
|
|
||||||
|
|||||||
@@ -1,39 +0,0 @@
|
|||||||
import 'package:intl/intl.dart';
|
|
||||||
import 'package:flutter/widgets.dart';
|
|
||||||
import 'dart:async';
|
|
||||||
|
|
||||||
class StockStrings extends LocaleQueryData {
|
|
||||||
|
|
||||||
static StockStrings of(BuildContext context) {
|
|
||||||
return LocaleQuery.of(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
static final StockStrings instance = new StockStrings();
|
|
||||||
|
|
||||||
|
|
||||||
String ID_Store() => Intl.message('ID_Store');
|
|
||||||
String sign_up() => Intl.message('sign_up');
|
|
||||||
String registration() => Intl.message('registration');
|
|
||||||
String specify_din_store() => Intl.message('specify_din_store');
|
|
||||||
String confirmation() => Intl.message('confirmation');
|
|
||||||
String ask_change_store() => Intl.message('ask_change_store');
|
|
||||||
String yes() => Intl.message('yes');
|
|
||||||
String no() => Intl.message('no');
|
|
||||||
String request_sent_wait_activ() => Intl.message('request_sent_wait_activ');
|
|
||||||
String update_activ_status() => Intl.message('update_activ_status');
|
|
||||||
String app_activ() => Intl.message('app_activ');
|
|
||||||
String complite_activ() => Intl.message('complite_activ');
|
|
||||||
String card_scaner() => Intl.message('card_scaner');
|
|
||||||
String user_name() => Intl.message('user_name');
|
|
||||||
String card() => Intl.message('card');
|
|
||||||
String reward() => Intl.message('reward');
|
|
||||||
String sum() => Intl.message('sum');
|
|
||||||
String carry_purchase() => Intl.message('carry_purchase');
|
|
||||||
String complite_purchase() => Intl.message('complite_purchase');
|
|
||||||
String scan() => Intl.message('scan');
|
|
||||||
String confirm_purchase() => Intl.message('confirm_purchase');
|
|
||||||
String buyer() => Intl.message('buyer');
|
|
||||||
String purchase_complite() => Intl.message('purchase_complite');
|
|
||||||
String ID_not_found() => Intl.message('ID_not_found');
|
|
||||||
|
|
||||||
}
|
|
||||||
43
lib/strings.dart
Normal file
43
lib/strings.dart
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
import 'package:intl/intl.dart';
|
||||||
|
import 'package:flutter/widgets.dart';
|
||||||
|
import 'package:sprintf/sprintf.dart';
|
||||||
|
|
||||||
|
class Strings extends LocaleQueryData {
|
||||||
|
|
||||||
|
static Strings of(BuildContext context) {
|
||||||
|
return LocaleQuery.of(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
static final Strings instance = new Strings();
|
||||||
|
|
||||||
|
String confirmPurchase(String val) {
|
||||||
|
return sprintf(Intl.message('confirm_purchase'), val);
|
||||||
|
}
|
||||||
|
|
||||||
|
String purchaseCompleted(String val) {
|
||||||
|
return sprintf(Intl.message('purchase_complite'), val);
|
||||||
|
}
|
||||||
|
|
||||||
|
String idStore() => Intl.message('ID_Store');
|
||||||
|
String signUp() => Intl.message('sign_up');
|
||||||
|
String registration() => Intl.message('registration');
|
||||||
|
String specifyDinStore() => Intl.message('specify_din_store');
|
||||||
|
String confirmation() => Intl.message('confirmation');
|
||||||
|
String askChangeStore() => Intl.message('ask_change_store');
|
||||||
|
String yes() => Intl.message('yes');
|
||||||
|
String no() => Intl.message('no');
|
||||||
|
String requestSentWaitActivation() => Intl.message('request_sent_wait_activ');
|
||||||
|
String refreshActivationStatus() => Intl.message('update_activ_status');
|
||||||
|
String appActivated() => Intl.message('app_activ');
|
||||||
|
String completeRegistration() => Intl.message('complite_activ');
|
||||||
|
String cardScanner() => Intl.message('card_scaner');
|
||||||
|
String userName() => Intl.message('user_name');
|
||||||
|
String card() => Intl.message('card');
|
||||||
|
String reward() => Intl.message('reward');
|
||||||
|
String sum() => Intl.message('sum');
|
||||||
|
String carryingPurchase() => Intl.message('carry_purchase');
|
||||||
|
String completePurchase() => Intl.message('complite_purchase');
|
||||||
|
String scan() => Intl.message('scan');
|
||||||
|
String buyer() => Intl.message('buyer');
|
||||||
|
String idNotFound() => Intl.message('ID_not_found');
|
||||||
|
}
|
||||||
@@ -5,6 +5,7 @@ dependencies:
|
|||||||
http: '>=0.11.3+12'
|
http: '>=0.11.3+12'
|
||||||
intl: '>=0.14.0 <0.16.0'
|
intl: '>=0.14.0 <0.16.0'
|
||||||
intl_translation: '>=0.14.0 <0.16.0'
|
intl_translation: '>=0.14.0 <0.16.0'
|
||||||
|
sprintf: "^3.0.2"
|
||||||
flutter:
|
flutter:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user