Добавил экран FAQ со всеми описаниями
This commit is contained in:
@@ -28,10 +28,6 @@ class _RegistrationScreenState extends BaseState<FinishRegistrationScreen> {
|
||||
return 'ID магазина';
|
||||
}
|
||||
|
||||
@overide getMenuButtons(BuildContext context) {
|
||||
return <Widget>[new IconButton(icon: new Icon(Icons.help_outline), onPressed: () {})];
|
||||
}
|
||||
|
||||
@override Widget getScreenContent() {
|
||||
return new Column(children: <Widget>[
|
||||
getLogo(),
|
||||
|
||||
@@ -4,6 +4,7 @@ import 'dart:convert';
|
||||
import 'dart:async';
|
||||
|
||||
import 'main.dart';
|
||||
import 'faq.dart';
|
||||
|
||||
abstract class BaseState<T> extends State<T> {
|
||||
|
||||
@@ -22,6 +23,18 @@ abstract class BaseState<T> extends State<T> {
|
||||
backgroundColor: primaryColor, actions: getMenuButtons(context));
|
||||
}
|
||||
|
||||
@overide getMenuButtons(BuildContext context) {
|
||||
return <Widget>[getFaqButton()];
|
||||
}
|
||||
|
||||
getFaqButton() {
|
||||
return new IconButton(icon: new Icon(Icons.help_outline), onPressed: () => faq());
|
||||
}
|
||||
|
||||
getLogoutButton() {
|
||||
return new IconButton(icon: new Image.asset(logout_png, height: iconHeight, width: iconHeight), onPressed: () => logout(context));
|
||||
}
|
||||
|
||||
Widget getBody(BuildContext context) {
|
||||
return new Stack(children: <Widget>[getScreenContent(), getProgressIndicator()]);
|
||||
}
|
||||
@@ -32,7 +45,9 @@ abstract class BaseState<T> extends State<T> {
|
||||
|
||||
String getHint();
|
||||
|
||||
getMenuButtons();
|
||||
faq() {
|
||||
pushRoute(context, new FAQScreen());
|
||||
}
|
||||
|
||||
/// Метод возвращает контейнер с отступами, который содержит картинку с логотипом.
|
||||
getLogo() {
|
||||
|
||||
89
lib/faq.dart
Normal file
89
lib/faq.dart
Normal file
@@ -0,0 +1,89 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
import 'main.dart';
|
||||
|
||||
/// Класс содержит заголовки и текст блоков FAQ.
|
||||
class Entry {
|
||||
Entry(this.title, this.text);
|
||||
final String title;
|
||||
final String text;
|
||||
}
|
||||
|
||||
class EntryItem extends StatelessWidget {
|
||||
const EntryItem(this.entry);
|
||||
|
||||
final Entry entry;
|
||||
|
||||
Widget _buildTiles(Entry root) {
|
||||
return new ExpansionTile(
|
||||
key: new PageStorageKey<Entry>(root),
|
||||
title: new Text(root.title),
|
||||
children: [new Text(root.text)]
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return _buildTiles(entry);
|
||||
}
|
||||
}
|
||||
|
||||
/// Экран проведения покупки.
|
||||
class FAQScreen extends StatelessWidget {
|
||||
|
||||
AppBar getAppBar(BuildContext context) {
|
||||
return new AppBar(title: new Text('FAQ', style: new TextStyle(fontSize: 18.0)),
|
||||
backgroundColor: primaryColor, actions: <Widget>[getLogoutButton()]);
|
||||
}
|
||||
|
||||
getLogoutButton() {
|
||||
return new IconButton(icon: new Image.asset(logout_png, height: iconHeight, width: iconHeight), onPressed: () => logout(context));
|
||||
}
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return new MaterialApp(home: new Scaffold(appBar: getAppBar(context), body: getBody()));
|
||||
}
|
||||
|
||||
/// Метод возвращает ListView с блоками faq.
|
||||
getBody() {
|
||||
return new ListView.builder(
|
||||
itemBuilder: (BuildContext context, int index) => new EntryItem(data[index]),
|
||||
itemCount: data.length);
|
||||
}
|
||||
|
||||
/// Список с контентом
|
||||
final List<Entry> data = <Entry>[
|
||||
new Entry('Регистрация', registrationGuide),
|
||||
new Entry('Использование', usageGuide),
|
||||
new Entry('Контакты поддержки', supportGuide),
|
||||
new Entry('Использование', commonGuide)
|
||||
];
|
||||
|
||||
/// TODO: Отформатировать строки
|
||||
|
||||
static const String registrationGuide = '''После запуска приложения вы окажетесь на странице регистрации магазина.
|
||||
Введите DIN код магазина (выдается партнером/менеджером International Auto Club, дублируется на почту)
|
||||
Нажать кнопку: «Зарегистрировать»
|
||||
Дождитесь подтверждение активации программы, нажатием кнопки “Обновите статус активации” обновите статус.
|
||||
После подтверждения запроса на активацию программы Партнером/менеджером нажмите кнопку “Завершить регистрацию”, приложение готово к использованию.
|
||||
|
||||
В случае желания изменить номер кассы, необходимо нажать на “значек” верхнем правом углу и вернуться на шаг регистрации.''';
|
||||
|
||||
static const String usageGuide = '''Действие 1:
|
||||
При предъявлении покупателем штрих кода участника системы лояльности, запустите данное приложение.
|
||||
На экране появиться сканер штрих кодов. Поднесите гаджет к смартфону или карте покупателя и отсканируйте предъявленный штрих код сканером.
|
||||
При успешном сканировании на вашем экране появятся данные партнера.
|
||||
Действие 2:
|
||||
Необходимо ввести сумму покупки данного покупателя и нажать на кнопку «Зафиксировать».
|
||||
Всплывет окно “Подтверждения правильности ввода суммы” в случае правильного ввода суммы, нажмите “ДА”, сумма будет проведена и вознаграждение будет начислено участнику системы лояльности.
|
||||
|
||||
Если же сумма введена с ошибкой, нажмите “НЕТ” вы вернетесь на шаг ввода суммы и скорректируете ее.''';
|
||||
|
||||
static const String supportGuide = '''При некорректной работе приложения AUTO BONUS просьба сразу обратиться по телефону нашей технической поддержки: 8-800-234-6064 (звонок бесплатный), вас свяжут с менеджером. При звонке приготовьтесь назвать ИНН и наименование вашей организации.
|
||||
Рекомендуйте покупателям установить мобильное приложение дисконтной системы International Auto Club AUTO BONUS, и получайте кэш бэк и их покупок в любых наземных или интернет магазинов.
|
||||
Наш сайт https://www.auto-club.biz''';
|
||||
|
||||
static const String commonGuide = '''Для эффективного считывания штрих кода участника системы лояльности необходимо камеру сканера поднести так, чтобы в неё не попадали вертикальные полосы рамки.
|
||||
Долгое сканирование происходит из-за черной рамки, в которую помещен штрих-код, вертикальные полосы этой рамки расцениваются сканером как часть штрих-кода.''';
|
||||
}
|
||||
@@ -60,7 +60,7 @@ checkToken(BuildContext context) async {
|
||||
/// Может производиться с нескольких экранов (splash, finish_registration).
|
||||
startScanner(BuildContext context) async {
|
||||
|
||||
// Канал слушает ловит вызовы методов из "нативной" части приложения.
|
||||
// Канал ловит вызовы методов из "нативной" части приложения.
|
||||
// Могут быть вызваны либо logaut либо faq, либо purchase.
|
||||
platform.setMethodCallHandler((MethodCall call) async {
|
||||
|
||||
|
||||
@@ -14,10 +14,6 @@ class PurchaseScreen extends StatefulWidget {
|
||||
|
||||
class PurchaseScreenState<T> extends BaseState<T> {
|
||||
|
||||
PurchaseScreenState() {
|
||||
|
||||
}
|
||||
|
||||
String integerPart = '', fractionalPart = '';
|
||||
|
||||
@override String getTitle() {
|
||||
@@ -30,8 +26,8 @@ class PurchaseScreenState<T> extends BaseState<T> {
|
||||
|
||||
@overide getMenuButtons(BuildContext context) {
|
||||
return <Widget>[
|
||||
new IconButton(icon: new Icon(Icons.help_outline), onPressed: () {}),
|
||||
new IconButton(icon: new Image.asset(logout_png, height: iconHeight, width: iconHeight), onPressed: () => logout(context))
|
||||
new getFaqButton(),
|
||||
new getLogoutButton()
|
||||
];
|
||||
}
|
||||
|
||||
@@ -71,7 +67,7 @@ class PurchaseScreenState<T> extends BaseState<T> {
|
||||
integerPart = tmpString;
|
||||
controller.text = tmpString;
|
||||
}
|
||||
textFieldValue = controller.text;
|
||||
textFieldValue = tmpString;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -29,13 +29,6 @@ class PurchaseSuccessScreenState<T> extends PurchaseScreenState<T> {
|
||||
return "Проведение покупки";
|
||||
}
|
||||
|
||||
@overide getMenuButtons(BuildContext context) {
|
||||
return <Widget>[
|
||||
new IconButton(icon: new Icon(Icons.help_outline), onPressed: () {}),
|
||||
new IconButton(icon: new Image.asset(logout_png, height: 20.0, width: 20.0), onPressed: () => logout(context))
|
||||
];
|
||||
}
|
||||
|
||||
@override Widget getScreenContent() {
|
||||
return new Column(children: <Widget>[
|
||||
getValueWithTitle('Покупатель', 'Знаменитый Рокер Паук'),
|
||||
|
||||
@@ -24,10 +24,6 @@ class _RegistrationScreenState extends BaseState<RegistrationScreen> {
|
||||
return 'ID магазина';
|
||||
}
|
||||
|
||||
@overide getMenuButtons(BuildContext context) {
|
||||
return <Widget>[new IconButton(icon: new Icon(Icons.help_outline), onPressed: () {})];
|
||||
}
|
||||
|
||||
/// Высота контейнера задана для того, чтобы элементы располагались вверху экрана
|
||||
/// и список скроллился снизу вверх при открытии клавиатуры.
|
||||
@override Widget getScreenContent() {
|
||||
|
||||
Reference in New Issue
Block a user