Добавил экран FAQ со всеми описаниями

This commit is contained in:
kifio
2017-07-25 08:36:23 +03:00
parent ff0573d65d
commit 8738fbfd39
7 changed files with 109 additions and 24 deletions

View File

@@ -28,10 +28,6 @@ class _RegistrationScreenState extends BaseState<FinishRegistrationScreen> {
return 'ID магазина'; return 'ID магазина';
} }
@overide getMenuButtons(BuildContext context) {
return <Widget>[new IconButton(icon: new Icon(Icons.help_outline), onPressed: () {})];
}
@override Widget getScreenContent() { @override Widget getScreenContent() {
return new Column(children: <Widget>[ return new Column(children: <Widget>[
getLogo(), getLogo(),

View File

@@ -4,6 +4,7 @@ import 'dart:convert';
import 'dart:async'; import 'dart:async';
import 'main.dart'; import 'main.dart';
import 'faq.dart';
abstract class BaseState<T> extends State<T> { abstract class BaseState<T> extends State<T> {
@@ -22,6 +23,18 @@ abstract class BaseState<T> extends State<T> {
backgroundColor: primaryColor, actions: getMenuButtons(context)); 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) { Widget getBody(BuildContext context) {
return new Stack(children: <Widget>[getScreenContent(), getProgressIndicator()]); return new Stack(children: <Widget>[getScreenContent(), getProgressIndicator()]);
} }
@@ -32,7 +45,9 @@ abstract class BaseState<T> extends State<T> {
String getHint(); String getHint();
getMenuButtons(); faq() {
pushRoute(context, new FAQScreen());
}
/// Метод возвращает контейнер с отступами, который содержит картинку с логотипом. /// Метод возвращает контейнер с отступами, который содержит картинку с логотипом.
getLogo() { getLogo() {

89
lib/faq.dart Normal file
View 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 = '''Для эффективного считывания штрих кода участника системы лояльности необходимо камеру сканера поднести так, чтобы в неё не попадали вертикальные полосы рамки.
Долгое сканирование происходит из-за черной рамки, в которую помещен штрих-код, вертикальные полосы этой рамки расцениваются сканером как часть штрих-кода.''';
}

View File

@@ -60,7 +60,7 @@ checkToken(BuildContext context) async {
/// Может производиться с нескольких экранов (splash, finish_registration). /// Может производиться с нескольких экранов (splash, finish_registration).
startScanner(BuildContext context) async { startScanner(BuildContext context) async {
// Канал слушает ловит вызовы методов из "нативной" части приложения. // Канал ловит вызовы методов из "нативной" части приложения.
// Могут быть вызваны либо logaut либо faq, либо purchase. // Могут быть вызваны либо logaut либо faq, либо purchase.
platform.setMethodCallHandler((MethodCall call) async { platform.setMethodCallHandler((MethodCall call) async {

View File

@@ -14,10 +14,6 @@ class PurchaseScreen extends StatefulWidget {
class PurchaseScreenState<T> extends BaseState<T> { class PurchaseScreenState<T> extends BaseState<T> {
PurchaseScreenState() {
}
String integerPart = '', fractionalPart = ''; String integerPart = '', fractionalPart = '';
@override String getTitle() { @override String getTitle() {
@@ -30,8 +26,8 @@ class PurchaseScreenState<T> extends BaseState<T> {
@overide getMenuButtons(BuildContext context) { @overide getMenuButtons(BuildContext context) {
return <Widget>[ return <Widget>[
new IconButton(icon: new Icon(Icons.help_outline), onPressed: () {}), new getFaqButton(),
new IconButton(icon: new Image.asset(logout_png, height: iconHeight, width: iconHeight), onPressed: () => logout(context)) new getLogoutButton()
]; ];
} }
@@ -71,7 +67,7 @@ class PurchaseScreenState<T> extends BaseState<T> {
integerPart = tmpString; integerPart = tmpString;
controller.text = tmpString; controller.text = tmpString;
} }
textFieldValue = controller.text; textFieldValue = tmpString;
}); });
} }

View File

@@ -29,13 +29,6 @@ class PurchaseSuccessScreenState<T> extends PurchaseScreenState<T> {
return "Проведение покупки"; 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() { @override Widget getScreenContent() {
return new Column(children: <Widget>[ return new Column(children: <Widget>[
getValueWithTitle('Покупатель', 'Знаменитый Рокер Паук'), getValueWithTitle('Покупатель', 'Знаменитый Рокер Паук'),

View File

@@ -24,10 +24,6 @@ class _RegistrationScreenState extends BaseState<RegistrationScreen> {
return 'ID магазина'; return 'ID магазина';
} }
@overide getMenuButtons(BuildContext context) {
return <Widget>[new IconButton(icon: new Icon(Icons.help_outline), onPressed: () {})];
}
/// Высота контейнера задана для того, чтобы элементы располагались вверху экрана /// Высота контейнера задана для того, чтобы элементы располагались вверху экрана
/// и список скроллился снизу вверх при открытии клавиатуры. /// и список скроллился снизу вверх при открытии клавиатуры.
@override Widget getScreenContent() { @override Widget getScreenContent() {