Локализация платформонезависимой части приложения
This commit is contained in:
@@ -2,13 +2,12 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
import 'common.dart';
|
||||
import 'network.dart';
|
||||
import 'consts.dart';
|
||||
|
||||
abstract class BaseState<T> extends State<T> {
|
||||
abstract class BaseState<T> extends State<StatefulWidget> {
|
||||
|
||||
bool loading = false;
|
||||
String error = null;
|
||||
String error;
|
||||
String textFieldValue = '';
|
||||
|
||||
TextEditingController controller = new TextEditingController();
|
||||
@@ -22,7 +21,7 @@ abstract class BaseState<T> extends State<T> {
|
||||
backgroundColor: primaryColor, actions: getMenuButtons(context));
|
||||
}
|
||||
|
||||
@overide getMenuButtons(BuildContext context) {
|
||||
getMenuButtons(BuildContext context) {
|
||||
return <Widget>[getFaqButton()];
|
||||
}
|
||||
|
||||
@@ -38,7 +37,7 @@ abstract class BaseState<T> extends State<T> {
|
||||
return new Stack(children: <Widget>[getScreenContent(), getProgressIndicator()]);
|
||||
}
|
||||
|
||||
Widget getScreenContent(BuildContext context);
|
||||
Widget getScreenContent();
|
||||
|
||||
String getTitle();
|
||||
|
||||
@@ -80,7 +79,7 @@ abstract class BaseState<T> extends State<T> {
|
||||
getDecoratedTextWidget() {
|
||||
return new Container(margin: new EdgeInsets.only(left: verticalMargin, right: verticalMargin),
|
||||
padding: getPaddingForTextWidget(),
|
||||
decoration: getDecoraionForTextWidget(),
|
||||
decoration: getDecorationForTextWidget(),
|
||||
child: getTextWidget());
|
||||
}
|
||||
|
||||
@@ -94,7 +93,7 @@ abstract class BaseState<T> extends State<T> {
|
||||
}
|
||||
|
||||
/// Метод возвращает BoxDecoration для _getDecoratedInputField
|
||||
getDecoraionForTextWidget() {
|
||||
getDecorationForTextWidget() {
|
||||
return new BoxDecoration(color: getTextFilledBackground(),
|
||||
border: new Border.all(color: textBorderColor, width: 1.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,
|
||||
style: new TextStyle(color: textColor)),
|
||||
onPressed: () => startScanner(context)),
|
||||
decoration: _getDecoraionForScanButton());
|
||||
decoration: getDecorationForScanButton());
|
||||
}
|
||||
|
||||
_getDecoraionForScanButton() {
|
||||
getDecorationForScanButton() {
|
||||
return new BoxDecoration(
|
||||
border: new Border.all(color: primaryColor, width: 1.0),
|
||||
borderRadius: new BorderRadius.all(new Radius.circular(4.0)));
|
||||
|
||||
@@ -3,9 +3,10 @@ import 'package:flutter/material.dart';
|
||||
|
||||
import 'consts.dart';
|
||||
import 'network.dart';
|
||||
import 'registration.dart';
|
||||
import 'purchase.dart';
|
||||
import 'package:checker/registration/registration.dart';
|
||||
import 'package:checker/purchase/purchase.dart';
|
||||
import 'faq.dart';
|
||||
import 'strings.dart';
|
||||
|
||||
// Канал для взаимодействия с кодом платформы.
|
||||
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) {
|
||||
@@ -100,12 +101,12 @@ showYesNoDialog(BuildContext context, String title, String content, VoidCallback
|
||||
content: new Text(content),
|
||||
actions: <Widget>[
|
||||
new FlatButton(
|
||||
child: new Text('Нет'),
|
||||
child: new Text(Strings.of(context).no()),
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop();
|
||||
}
|
||||
),
|
||||
new FlatButton(
|
||||
child: new Text('Да'),
|
||||
child: new Text(Strings.of(context).yes()),
|
||||
onPressed: positiveCallback)]));
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@ import 'package:flutter/material.dart';
|
||||
// Serious constants
|
||||
const String appName = "Dinect";
|
||||
|
||||
const String url = 'https://pos-api-autoclub.dinect.com/20130701/';
|
||||
const String appToken = 'bdea0f3ba9034b688019a7cac753d1209e2b227f';
|
||||
const String url = 'https://pos-api-int.dinect.com/20130701/';
|
||||
const String appToken = '9fec83cdca38c357e6b65dbb17514cdd36bf2a08';
|
||||
|
||||
// Assets
|
||||
const String logo_png = 'assets/registration_logo.png';
|
||||
@@ -29,6 +29,5 @@ const Color faqTitlesColor = const Color(0xff404040);
|
||||
|
||||
// Dimens
|
||||
const double verticalMargin = 28.0;
|
||||
const double buttonVerticalMargin = 42.0;
|
||||
const double buttonHeight = 48.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/services.dart';
|
||||
|
||||
import 'base_state.dart';
|
||||
import 'consts.dart';
|
||||
@@ -38,7 +37,7 @@ class EntryItem extends StatelessWidget {
|
||||
class FAQScreen extends StatefulWidget {
|
||||
|
||||
FAQScreen(this.b);
|
||||
bool b;
|
||||
final bool b;
|
||||
|
||||
@override State createState() => new FAQScreenState<FAQScreen>(b);
|
||||
}
|
||||
@@ -46,16 +45,20 @@ class FAQScreen extends StatefulWidget {
|
||||
class FAQScreenState<T> extends BaseState<FAQScreen> {
|
||||
|
||||
FAQScreenState(this.returnToScanner);
|
||||
bool returnToScanner;
|
||||
final bool returnToScanner;
|
||||
|
||||
@override String getTitle() {
|
||||
return "FAQ";
|
||||
}
|
||||
|
||||
@overide getMenuButtons(BuildContext context) {
|
||||
@override getMenuButtons(BuildContext context) {
|
||||
return <Widget>[getLogoutButton()];
|
||||
}
|
||||
|
||||
@override String getHint() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/// Метод возвращает ListView с блоками faq.
|
||||
@override Widget getScreenContent() {
|
||||
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/src/intl_helpers.dart';
|
||||
|
||||
import 'stock_messages_messages_en.dart' as messages_messages_en;
|
||||
import 'stock_messages_messages_es.dart' as messages_messages_es;
|
||||
import 'stock_messages_messages_ru.dart' as messages_messages_ru;
|
||||
import 'stock_messages_messages_ua.dart' as messages_messages_ua;
|
||||
import 'messages_en.dart' as messages_messages_en;
|
||||
import 'messages_es.dart' as messages_messages_es;
|
||||
import 'messages_ru.dart' as messages_messages_ru;
|
||||
import 'messages_ua.dart' as messages_messages_ua;
|
||||
|
||||
typedef Future<dynamic> LibraryLoader();
|
||||
Map<String, LibraryLoader> _deferredLibraries = {
|
||||
@@ -25,10 +25,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"carry_purchase" : MessageLookupByLibrary.simpleMessage("Сarrying out a purchase"),
|
||||
"complite_activ" : MessageLookupByLibrary.simpleMessage("Complete registration"),
|
||||
"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"),
|
||||
"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"),
|
||||
"request_sent_wait_activ" : MessageLookupByLibrary.simpleMessage("The activation request for the application has been sent, wait for confirm activation"),
|
||||
"reward" : MessageLookupByLibrary.simpleMessage("Reward"),
|
||||
@@ -25,10 +25,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"carry_purchase" : MessageLookupByLibrary.simpleMessage("Realizar la compra"),
|
||||
"complite_activ" : MessageLookupByLibrary.simpleMessage("Terminar el registro"),
|
||||
"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"),
|
||||
"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"),
|
||||
"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"),
|
||||
@@ -25,10 +25,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"carry_purchase" : MessageLookupByLibrary.simpleMessage("Проведение покупки"),
|
||||
"complite_activ" : MessageLookupByLibrary.simpleMessage("Завершить регистрацию"),
|
||||
"complite_purchase" : MessageLookupByLibrary.simpleMessage("Завершить покупку"),
|
||||
"confirm_purchase" : MessageLookupByLibrary.simpleMessage("Вы подтверждаете покупку на N рублей"),
|
||||
"confirm_purchase" : MessageLookupByLibrary.simpleMessage("Вы подтверждаете покупку на %s рублей"),
|
||||
"confirmation" : MessageLookupByLibrary.simpleMessage("Подтверждение"),
|
||||
"no" : MessageLookupByLibrary.simpleMessage("Нет"),
|
||||
"purchase_complite" : MessageLookupByLibrary.simpleMessage("Покупка на сумму N рублей проведена"),
|
||||
"purchase_complite" : MessageLookupByLibrary.simpleMessage("Покупка на сумму %s рублей проведена"),
|
||||
"registration" : MessageLookupByLibrary.simpleMessage("Регистрация"),
|
||||
"request_sent_wait_activ" : MessageLookupByLibrary.simpleMessage("Запрос на активацию приложения отправлен, дождитесь подтверждения активации администратором"),
|
||||
"reward" : MessageLookupByLibrary.simpleMessage("Вознаграждение"),
|
||||
@@ -25,10 +25,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"carry_purchase" : MessageLookupByLibrary.simpleMessage("Проведення покупки"),
|
||||
"complite_activ" : MessageLookupByLibrary.simpleMessage("Завершити реєстрацію"),
|
||||
"complite_purchase" : MessageLookupByLibrary.simpleMessage("Завершити купівлю"),
|
||||
"confirm_purchase" : MessageLookupByLibrary.simpleMessage("Ви підтверджуєте покупку на N гривень"),
|
||||
"confirm_purchase" : MessageLookupByLibrary.simpleMessage("Ви підтверджуєте покупку на %s гривень"),
|
||||
"confirmation" : MessageLookupByLibrary.simpleMessage("Підтвердження"),
|
||||
"no" : MessageLookupByLibrary.simpleMessage("Ні"),
|
||||
"purchase_complite" : MessageLookupByLibrary.simpleMessage("Купівля на суму N гривень проведена"),
|
||||
"purchase_complite" : MessageLookupByLibrary.simpleMessage("Купівля на суму %s гривень проведена"),
|
||||
"registration" : MessageLookupByLibrary.simpleMessage("Реєстрація"),
|
||||
"request_sent_wait_activ" : MessageLookupByLibrary.simpleMessage("Запит на активацію додатку відправлений, дочекайтеся підтвердження активації адміністратором"),
|
||||
"reward" : MessageLookupByLibrary.simpleMessage("Винагорода"),
|
||||
@@ -1,16 +1,16 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'splash.dart';
|
||||
import 'consts.dart';
|
||||
import 'stock_strings.dart';
|
||||
import 'strings.dart';
|
||||
import 'dart:async';
|
||||
import 'i18n/stock_messages_all.dart';
|
||||
import 'i18n/messages_all.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
|
||||
Future<LocaleQueryData> _onLocaleChanged(Locale locale) async {
|
||||
final String localeString = locale.toString();
|
||||
await initializeMessages(localeString);
|
||||
Intl.defaultLocale = localeString;
|
||||
return StockStrings.instance;
|
||||
return Strings.instance;
|
||||
}
|
||||
|
||||
/// Точка входа в приложение.
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import 'package:flutter/services.dart';
|
||||
import 'dart:async';
|
||||
|
||||
import 'consts.dart';
|
||||
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'dart:convert';
|
||||
import 'dart:async';
|
||||
import 'dart:core';
|
||||
|
||||
import 'main.dart';
|
||||
import 'common.dart';
|
||||
import 'consts.dart';
|
||||
import 'network.dart';
|
||||
import 'base_state.dart';
|
||||
import 'package:checker/strings.dart';
|
||||
import 'package:checker/common.dart';
|
||||
import 'package:checker/consts.dart';
|
||||
import 'package:checker/network.dart';
|
||||
import 'package:checker/base_state.dart';
|
||||
import 'purchase_success.dart';
|
||||
|
||||
/// Экран проведения покупки.
|
||||
@@ -16,8 +15,8 @@ class PurchaseScreen extends StatefulWidget {
|
||||
|
||||
PurchaseScreen(this.user, this.card);
|
||||
|
||||
String user;
|
||||
String card;
|
||||
final String user;
|
||||
final String card;
|
||||
|
||||
@override State createState() => new PurchaseScreenState<PurchaseScreen>(user, card);
|
||||
}
|
||||
@@ -37,25 +36,39 @@ class PurchaseScreenState<T> extends BaseState<PurchaseScreen> {
|
||||
@override Widget getScreenContent() {
|
||||
return new Column(
|
||||
children: <Widget>[new Expanded(child: new ListView(children: <Widget>[
|
||||
getValueWithTitle('ФИО', user['first_name'] == null ? '' : user['first_name']),
|
||||
getValueWithTitle('Карта', card),
|
||||
getValueWithTitle('Вознаграждение', loyality),
|
||||
getValueWithTitle(Strings.of(context).userName(), user['first_name'] == null ? '' : user['first_name']),
|
||||
getValueWithTitle(Strings.of(context).card(), card),
|
||||
getValueWithTitle(Strings.of(context).reward(), loyality),
|
||||
getHintLabel(),
|
||||
getDecoratedTextWidget(),
|
||||
buildButton(new EdgeInsets.only(top: 36.0, left: buttonVerticalMargin, right: buttonVerticalMargin), buildRaisedButton(context, 'ЗАВЕРШИТЬ ПОКУПКУ', () => onPurchaseClick(context))),
|
||||
buildButton(new EdgeInsets.only(top: 24.0, left: buttonVerticalMargin, right: buttonVerticalMargin), buildFlatButton(context, 'СКАНИРОВАТЬ', primaryColor))
|
||||
buildButton(getScreenMargins(36.0), getCompleteButton()),
|
||||
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() {
|
||||
return "Проведение покупки";
|
||||
return Strings.of(context).carryingPurchase();
|
||||
}
|
||||
|
||||
@override getHint() {
|
||||
return 'Сумма';
|
||||
return Strings.of(context).sum();
|
||||
}
|
||||
|
||||
@overide getMenuButtons(BuildContext context) {
|
||||
@override getMenuButtons(BuildContext context) {
|
||||
return <Widget>[getFaqButton(), getLogoutButton()];
|
||||
}
|
||||
|
||||
@@ -130,7 +143,7 @@ class PurchaseScreenState<T> extends BaseState<PurchaseScreen> {
|
||||
|
||||
try {
|
||||
sumTotal = num.parse(text);
|
||||
} catch(exception, stacktrace) {
|
||||
} catch(exception) {
|
||||
print(exception);
|
||||
try {
|
||||
int idx = text.indexOf('.');
|
||||
@@ -140,7 +153,7 @@ class PurchaseScreenState<T> extends BaseState<PurchaseScreen> {
|
||||
fractionalPart = fractionalPart.substring(0, 2);
|
||||
}
|
||||
return '${integerPart}.${fractionalPart}';
|
||||
} catch(exception, stacktrace){
|
||||
} catch(exception){
|
||||
print(exception);
|
||||
}
|
||||
}
|
||||
@@ -150,17 +163,17 @@ class PurchaseScreenState<T> extends BaseState<PurchaseScreen> {
|
||||
onPurchaseClick(BuildContext context) {
|
||||
String val = _parseSum(controller.text);
|
||||
showDialog(context: context, child: new AlertDialog(
|
||||
title: new Text('Подтверждение'),
|
||||
content: new Text('Вы подтверждаете покупку на ${val} руб?'),
|
||||
title: new Text(Strings.of(context).confirmation()),
|
||||
content: new Text(getContentMessage(val)),
|
||||
actions: <Widget>[
|
||||
new FlatButton(
|
||||
child: new Text('Нет'),
|
||||
child: new Text(Strings.of(context).no()),
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
),
|
||||
new FlatButton(
|
||||
child: new Text('Да'),
|
||||
child: new Text(Strings.of(context).yes()),
|
||||
onPressed: () {
|
||||
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')) {
|
||||
|
||||
@@ -180,7 +197,7 @@ class PurchaseScreenState<T> extends BaseState<PurchaseScreen> {
|
||||
'doc_id': result,
|
||||
'curr_iso_code': '643',
|
||||
'commit': 'true',
|
||||
'sum_total': sum_total
|
||||
'sum_total': sumTotal
|
||||
};
|
||||
|
||||
var headers = {
|
||||
@@ -192,7 +209,7 @@ class PurchaseScreenState<T> extends BaseState<PurchaseScreen> {
|
||||
|
||||
print(response.body);
|
||||
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) {
|
||||
print(error.toString());
|
||||
@@ -1,18 +1,16 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
import 'main.dart';
|
||||
import 'common.dart';
|
||||
import 'consts.dart';
|
||||
import 'base_state.dart';
|
||||
import 'purchase.dart';
|
||||
import 'package:checker/common.dart';
|
||||
import 'package:checker/consts.dart';
|
||||
import 'package:checker/strings.dart';
|
||||
import 'package:checker/base_state.dart';
|
||||
|
||||
/// Экран проведения покупки.
|
||||
class PurchaseSuccessScreen extends StatefulWidget {
|
||||
|
||||
PurchaseSuccessScreen(this.val, this.name);
|
||||
String val;
|
||||
String name;
|
||||
final String val;
|
||||
final String name;
|
||||
|
||||
@override State createState() => new PurchaseSuccessScreenState(val, name);
|
||||
}
|
||||
@@ -24,28 +22,46 @@ class PurchaseSuccessScreenState<T> extends BaseState<PurchaseSuccessScreen> {
|
||||
String sum;
|
||||
String username;
|
||||
|
||||
@overide getMenuButtons(BuildContext context) {
|
||||
@override getMenuButtons(BuildContext context) {
|
||||
return <Widget>[getFaqButton(), getLogoutButton()];
|
||||
}
|
||||
|
||||
@override String getTitle() {
|
||||
return "Проведение покупки";
|
||||
return Strings.of(context).carryingPurchase();
|
||||
}
|
||||
|
||||
@override String getHint() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@override Widget getScreenContent() {
|
||||
return new Column(children: <Widget>[
|
||||
getValueWithTitle('Покупатель', username),
|
||||
getValueWithTitle(Strings.of(context).buyer(), username),
|
||||
getSuccessMessage(),
|
||||
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() {
|
||||
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),
|
||||
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)))))]);
|
||||
}
|
||||
|
||||
getMessageTitle() {
|
||||
return Strings.of(context).purchaseCompleted(sum);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,11 +1,12 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
import 'common.dart';
|
||||
import 'consts.dart';
|
||||
import 'network.dart';
|
||||
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 {
|
||||
@override State createState() => new _RegistrationScreenState();
|
||||
@@ -23,11 +24,11 @@ class _RegistrationScreenState extends BaseState<FinishRegistrationScreen> {
|
||||
}
|
||||
|
||||
@override String getTitle() {
|
||||
return "Регистрация";
|
||||
return Strings.of(context).registration();
|
||||
}
|
||||
|
||||
@override getHint() {
|
||||
return 'ID магазина';
|
||||
return Strings.of(context).idStore();
|
||||
}
|
||||
|
||||
@override Widget getScreenContent() {
|
||||
@@ -36,7 +37,9 @@ class _RegistrationScreenState extends BaseState<FinishRegistrationScreen> {
|
||||
getHintLabel(),
|
||||
getDecoratedTextWidget(),
|
||||
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() {
|
||||
return _tokenActive ? tokenActiveMessage : tokenWaitMessage;
|
||||
return _tokenActive
|
||||
? Strings.of(context).completeRegistration()
|
||||
: Strings.of(context).refreshActivationStatus();
|
||||
}
|
||||
|
||||
/// Фоновое изображение для сообщения.
|
||||
@@ -1,12 +1,11 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'dart:convert'; // Пакет для обработки json с ответом от сервера.
|
||||
|
||||
import 'common.dart';
|
||||
import 'network.dart';
|
||||
import 'consts.dart';
|
||||
import 'package:checker/common.dart';
|
||||
import 'package:checker/network.dart';
|
||||
import 'package:checker/base_state.dart';
|
||||
import 'package:checker/strings.dart';
|
||||
import 'activate_token.dart';
|
||||
import 'base_state.dart';
|
||||
import 'stock_strings.dart';
|
||||
|
||||
/// Экран регистрации магазина и кассы.
|
||||
class RegistrationScreen extends StatefulWidget {
|
||||
@@ -16,11 +15,11 @@ class RegistrationScreen extends StatefulWidget {
|
||||
class _RegistrationScreenState extends BaseState<RegistrationScreen> {
|
||||
|
||||
@override String getTitle() {
|
||||
return StockStrings.of(context).registration();
|
||||
return Strings.of(context).registration();
|
||||
}
|
||||
|
||||
@override getHint() {
|
||||
return 'ID магазина';
|
||||
return Strings.of(context).idStore();
|
||||
}
|
||||
|
||||
// Список виджетов, автоматически прокручиваемый вверх при открытии клавиатуры.
|
||||
@@ -38,7 +37,7 @@ class _RegistrationScreenState extends BaseState<RegistrationScreen> {
|
||||
// Возвращает кнопку регистрации.
|
||||
getButton() {
|
||||
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 'network.dart';
|
||||
import 'consts.dart';
|
||||
import 'registration.dart';
|
||||
import 'activate_token.dart';
|
||||
import 'package:checker/registration/registration.dart';
|
||||
import 'package:checker/registration/activate_token.dart';
|
||||
|
||||
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');
|
||||
}
|
||||
Reference in New Issue
Block a user