Регистрация, проверка токена, обработка ошибок, сканирование

This commit is contained in:
Ivan Murashov
2017-07-21 22:35:28 +03:00
parent 013a75e464
commit 8cf5d4b028
10 changed files with 454 additions and 185 deletions

View File

@@ -4,6 +4,7 @@ import 'splash.dart';
import 'registration.dart';
import 'dart:async';
import 'dart:convert';
import 'purchase.dart';
/// Главный класс приложения.
/// Здесь распоосложены константы и некоторые методы, которые могут вызываться с разных экранов приложения.
@@ -21,56 +22,62 @@ const String logo_png = 'assets/registration_logo.png';
const String splash_png = 'assets/splash.png';
const String logout_png = 'assets/logout.png';
const String activate_token_bg_png = 'assets/activate_token_message_background.png';
const String active_token_bg_png = 'assets/active_token_message_background.png';
// Colors
const Color primaryColor = const Color(0xffeb0004);
const Color disabledColor = const Color(0xffbfbfbf);
const Color greyTextColor = const Color(0xffa5a5a5);
const Color textBorderColor = const Color(0xffcfd8dc);
const Color textFieldBackground = const Color(0xffefefef);
const Color tokenActiveTextColor = const Color(0xff1f5a1f);
const Color tokenActivateTextColor = const Color(0xff4e3a19);
// HttpClient
final httpClient = createHttpClient();
void main() {
runApp(new Checker());
}
/// Токен кассы. Инициализируется при регистрации.
String token;
String merchantID = "";
/// Точка входа в приложение.
void main() {
runApp(new Checker());
}
/// Проверка статуса токена. Токен может быть активирован, либо не активирован.
void checkToken(BuildContext context, Callback callback) {
String url = intUrl + 'tokens/' + token + '?_dmapptoken=' + intToken;
print(url);
httpClient.get(url).then((response) {
print(response.body);
Map parsedMap = JSON.decode(response.body);
bool active = parsedMap['active'];
if (!active) {
callback.call(context);
} else {
// Запускается экран сканера, токен кассы активирован, с его помощью можно делать запросы к pos-api.
startScanner(context);
}
}).catchError((error) {
print(error.toString());
});
checkToken(BuildContext context) async {
return httpClient.get(intUrl + 'tokens/' + token + '?_dmapptoken=' + intToken);
}
/// Запуск спецефичной для каждой платформы части приложения - сканера.
/// Может производиться с нескольких экранов (splash, finish_registration).
startScanner(BuildContext context) async{
startScanner(BuildContext context) async {
const platform = const MethodChannel('com.dinect.checker/instance_id');
// Канал слушает ловит вызовы методов из "нативной" части приложения.
// Могут быть вызваны либо logaut либо faq, либо purchase.
platform.setMethodCallHandler((MethodCall call) async {
pushRoute(context, new RegistrationScreen());
return result;
// or
// throw new PlatformException(errorCode, anErrorMessage, someDetails);
if (call.method == 'foo') {
String url = intUrl + 'tokens/' + token + '?_dmapptoken=' + intToken;
httpClient.delete(url).then((response) {
print(response.body);
}).catchError((error) {
print(error.toString());
});
pushRoute(context, new RegistrationScreen());
} else {
pushRoute(context, new PurchaseScreen());
}
return result;
});
await platform.invokeMethod('startScanner');
@@ -87,15 +94,11 @@ pushRoute(BuildContext context, Widget widget) {
class Checker extends StatelessWidget {
@override Widget build(BuildContext context) {
return new MaterialApp(title: "DemoApp",
return new MaterialApp(title: "AutoClub",
home: new SplashScreen(),
theme: new ThemeData(
primaryColor: primaryColor,
accentColor: primaryColor
));
}
}
abstract class Callback {
void call(BuildContext context);
}
}