Добавлена проверка статуса токена, обработка статуса токена

This commit is contained in:
Ivan Murashov
2017-07-18 16:49:47 +03:00
parent fc07eca469
commit ff8ddf4334
12 changed files with 287 additions and 60 deletions

View File

@@ -1,17 +1,75 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'splash.dart';
import 'dart:async';
import 'dart:convert';
const String _name = 'Ivan Murashov';
/// Главный класс приложения.
/// Здесь распоосложены константы и некоторые методы, которые могут вызываться с разных экранов приложения.
// Serious constants
const String intUrl = 'https://pos-api-int.dinect.com/20130701/';
const String intToken = '9fec83cdca38c357e6b65dbb17514cdd36bf2a08';
// Hints
const String merchantIDHint = 'ID магазина';
const String posIDHint = 'Номер кассы';
// Assets
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';
final httpClient = createHttpClient();
void main() {
runApp(new Checker());
}
/// Токен кассы. Инициализируется при регистрации.
String token;
/// Проверка статуса токена. Токен может быть активирован, либо не активирован.
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();
}
}).catchError((error) {
print(error.toString());
});
}
/// Запуск спецефичной для каждой платформы части приложения - сканера.
/// Может производиться с нескольких экранов (splash, finish_registration).
startScanner() async{
const platform = const MethodChannel('com.dinect.checker/instance_id');
await platform.invokeMethod('startScanner');
}
/// Навигация по приложению.
/// widget - следующий экран приложения.
pushRoute(BuildContext context, Widget widget) {
Navigator.of(context).push(new MaterialPageRoute<Null>(
builder: (BuildContext context) {
return widget;
}));
}
class Checker extends StatelessWidget {
@override Widget build(BuildContext context) {
return new MaterialApp(title: "DemoApp", home: new SplashScreen());
@@ -27,4 +85,8 @@ abstract class BaseState<T> extends State<StatefulWidget> {
void logout() {
}
}
abstract class Callback {
void call(BuildContext context);
}