diff --git a/lib/base_state.dart b/lib/base_state.dart index 1e05a15..aba4d61 100644 --- a/lib/base_state.dart +++ b/lib/base_state.dart @@ -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 extends State { +abstract class BaseState extends State { bool loading = false; - String error = null; + String error; String textFieldValue = ''; TextEditingController controller = new TextEditingController(); @@ -22,7 +21,7 @@ abstract class BaseState extends State { backgroundColor: primaryColor, actions: getMenuButtons(context)); } - @overide getMenuButtons(BuildContext context) { + getMenuButtons(BuildContext context) { return [getFaqButton()]; } @@ -38,7 +37,7 @@ abstract class BaseState extends State { return new Stack(children: [getScreenContent(), getProgressIndicator()]); } - Widget getScreenContent(BuildContext context); + Widget getScreenContent(); String getTitle(); @@ -80,7 +79,7 @@ abstract class BaseState extends State { 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 extends State { } /// Метод возвращает 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 extends State { 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))); diff --git a/lib/common.dart b/lib/common.dart index e223084..e7f3efd 100644 --- a/lib/common.dart +++ b/lib/common.dart @@ -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: [ 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)])); } diff --git a/lib/consts.dart b/lib/consts.dart index ddd9dd9..666d9dc 100644 --- a/lib/consts.dart +++ b/lib/consts.dart @@ -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; diff --git a/lib/faq.dart b/lib/faq.dart index 23efb1e..a3b53ed 100644 --- a/lib/faq.dart +++ b/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(b); } @@ -46,16 +45,20 @@ class FAQScreen extends StatefulWidget { class FAQScreenState extends BaseState { FAQScreenState(this.returnToScanner); - bool returnToScanner; + final bool returnToScanner; @override String getTitle() { return "FAQ"; } - @overide getMenuButtons(BuildContext context) { + @override getMenuButtons(BuildContext context) { return [getLogoutButton()]; } + @override String getHint() { + return null; + } + /// Метод возвращает ListView с блоками faq. @override Widget getScreenContent() { return new WillPopScope(onWillPop: onWillPop, child: new ListView.builder( diff --git a/lib/i18n/stock_messages_all.dart b/lib/i18n/messages_all.dart similarity index 86% rename from lib/i18n/stock_messages_all.dart rename to lib/i18n/messages_all.dart index ee60501..7e32ab7 100644 --- a/lib/i18n/stock_messages_all.dart +++ b/lib/i18n/messages_all.dart @@ -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 LibraryLoader(); Map _deferredLibraries = { diff --git a/lib/i18n/stock_messages_messages_en.dart b/lib/i18n/messages_en.dart similarity index 97% rename from lib/i18n/stock_messages_messages_en.dart rename to lib/i18n/messages_en.dart index 35821af..048896b 100644 --- a/lib/i18n/stock_messages_messages_en.dart +++ b/lib/i18n/messages_en.dart @@ -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"), diff --git a/lib/i18n/stock_messages_messages_es.dart b/lib/i18n/messages_es.dart similarity index 96% rename from lib/i18n/stock_messages_messages_es.dart rename to lib/i18n/messages_es.dart index 5322a7a..bbf243b 100644 --- a/lib/i18n/stock_messages_messages_es.dart +++ b/lib/i18n/messages_es.dart @@ -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"), diff --git a/lib/i18n/stock_messages_messages_ru.dart b/lib/i18n/messages_ru.dart similarity index 95% rename from lib/i18n/stock_messages_messages_ru.dart rename to lib/i18n/messages_ru.dart index 1ee157a..3bd155b 100644 --- a/lib/i18n/stock_messages_messages_ru.dart +++ b/lib/i18n/messages_ru.dart @@ -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("Вознаграждение"), diff --git a/lib/i18n/stock_messages_messages_ua.dart b/lib/i18n/messages_ua.dart similarity index 95% rename from lib/i18n/stock_messages_messages_ua.dart rename to lib/i18n/messages_ua.dart index 747a98a..7bb9dbc 100644 --- a/lib/i18n/stock_messages_messages_ua.dart +++ b/lib/i18n/messages_ua.dart @@ -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("Винагорода"), diff --git a/lib/main.dart b/lib/main.dart index 8c0fcca..8b2228d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -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 _onLocaleChanged(Locale locale) async { final String localeString = locale.toString(); await initializeMessages(localeString); Intl.defaultLocale = localeString; - return StockStrings.instance; + return Strings.instance; } /// Точка входа в приложение. diff --git a/lib/network.dart b/lib/network.dart index a998129..c5f16fa 100644 --- a/lib/network.dart +++ b/lib/network.dart @@ -1,5 +1,4 @@ import 'package:flutter/services.dart'; -import 'dart:async'; import 'consts.dart'; diff --git a/lib/purchase.dart b/lib/purchase/purchase.dart similarity index 72% rename from lib/purchase.dart rename to lib/purchase/purchase.dart index 820e2e9..d0589e7 100644 --- a/lib/purchase.dart +++ b/lib/purchase/purchase.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(user, card); } @@ -37,25 +36,39 @@ class PurchaseScreenState extends BaseState { @override Widget getScreenContent() { return new Column( children: [new Expanded(child: new ListView(children: [ - 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 [getFaqButton(), getLogoutButton()]; } @@ -130,7 +143,7 @@ class PurchaseScreenState extends BaseState { try { sumTotal = num.parse(text); - } catch(exception, stacktrace) { + } catch(exception) { print(exception); try { int idx = text.indexOf('.'); @@ -140,7 +153,7 @@ class PurchaseScreenState extends BaseState { fractionalPart = fractionalPart.substring(0, 2); } return '${integerPart}.${fractionalPart}'; - } catch(exception, stacktrace){ + } catch(exception){ print(exception); } } @@ -150,17 +163,17 @@ class PurchaseScreenState extends BaseState { 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: [ 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 extends BaseState { ])); } - 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 extends BaseState { 'doc_id': result, 'curr_iso_code': '643', 'commit': 'true', - 'sum_total': sum_total + 'sum_total': sumTotal }; var headers = { @@ -192,7 +209,7 @@ class PurchaseScreenState extends BaseState { 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()); diff --git a/lib/purchase_success.dart b/lib/purchase/purchase_success.dart similarity index 52% rename from lib/purchase_success.dart rename to lib/purchase/purchase_success.dart index c333ecf..6f0d45c 100644 --- a/lib/purchase_success.dart +++ b/lib/purchase/purchase_success.dart @@ -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 extends BaseState { String sum; String username; - @overide getMenuButtons(BuildContext context) { + @override getMenuButtons(BuildContext context) { return [getFaqButton(), getLogoutButton()]; } @override String getTitle() { - return "Проведение покупки"; + return Strings.of(context).carryingPurchase(); + } + + @override String getHint() { + return null; } @override Widget getScreenContent() { return new Column(children: [ - 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: [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); + } + } \ No newline at end of file diff --git a/lib/activate_token.dart b/lib/registration/activate_token.dart similarity index 85% rename from lib/activate_token.dart rename to lib/registration/activate_token.dart index 31f78ea..364528c 100644 --- a/lib/activate_token.dart +++ b/lib/registration/activate_token.dart @@ -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 { } @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 { 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 { /// Получаем текст сообщения, в зависимости от статуса активации. getMessageString() { - return _tokenActive ? tokenActiveMessage : tokenWaitMessage; + return _tokenActive + ? Strings.of(context).completeRegistration() + : Strings.of(context).refreshActivationStatus(); } /// Фоновое изображение для сообщения. diff --git a/lib/registration.dart b/lib/registration/registration.dart similarity index 89% rename from lib/registration.dart rename to lib/registration/registration.dart index 5fbbb17..ce98c12 100644 --- a/lib/registration.dart +++ b/lib/registration/registration.dart @@ -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 { @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 { // Возвращает кнопку регистрации. getButton() { return new Container(margin: new EdgeInsets.only(top: 36.0), child: - buildRaisedButton(context, 'ЗАРЕГИСТРИРОВАТЬ', getOnPressed())); + buildRaisedButton(context, Strings.of(context).signUp(), getOnPressed())); } // Возвращает обработчик нажатий на кнопку регистрации. diff --git a/lib/splash.dart b/lib/splash.dart index 6740ee2..d15dae1 100644 --- a/lib/splash.dart +++ b/lib/splash.dart @@ -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 { diff --git a/lib/stock_strings.dart b/lib/stock_strings.dart deleted file mode 100644 index 984f813..0000000 --- a/lib/stock_strings.dart +++ /dev/null @@ -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'); - -} diff --git a/lib/strings.dart b/lib/strings.dart new file mode 100644 index 0000000..5909ac8 --- /dev/null +++ b/lib/strings.dart @@ -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'); +} \ No newline at end of file diff --git a/pubspec.yaml b/pubspec.yaml index 2a279a2..eb6d9a4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -5,6 +5,7 @@ dependencies: http: '>=0.11.3+12' intl: '>=0.14.0 <0.16.0' intl_translation: '>=0.14.0 <0.16.0' + sprintf: "^3.0.2" flutter: sdk: flutter