113 lines
4.2 KiB
Dart
113 lines
4.2 KiB
Dart
import 'package:flutter/services.dart';
|
||
import 'package:flutter/material.dart';
|
||
|
||
import 'consts.dart';
|
||
import 'network.dart';
|
||
import 'resources.dart';
|
||
import 'package:checker/registration.dart';
|
||
import 'package:checker/purchase.dart';
|
||
import 'faq.dart';
|
||
import 'strings.dart';
|
||
|
||
// Канал для взаимодействия с кодом платформы.
|
||
const platform = const MethodChannel('com.dinect.checker/instance_id');
|
||
|
||
// Метод обеспечивает замену текущего объекта route новым.
|
||
pushRoute(BuildContext context, Widget widget) {
|
||
var route = new MaterialPageRoute<Null>(builder: (BuildContext context) => widget);
|
||
Navigator.of(context).pushReplacement(route);
|
||
}
|
||
|
||
// Добавление route, с возможностью вернуться к предыдущему экрану.
|
||
faq(BuildContext context, bool returnToScanner) {
|
||
var route = new MaterialPageRoute<Null>(builder: (BuildContext context) => new FAQScreen(returnToScanner));
|
||
Navigator.of(context).push(route);
|
||
}
|
||
|
||
// В методе отправляется запрос на удаление токена кассы, очищаются SharedPreferences приложения.
|
||
logout(BuildContext context) async {
|
||
String token = await platform.invokeMethod('getToken');
|
||
VoidCallback positiveCalback = () {
|
||
if (token != null) {
|
||
deleteToken(token).then((response) {
|
||
print(response.body);
|
||
platform.invokeMethod('removeKeys').then((result) {
|
||
Navigator.of(context).pop();
|
||
Navigator.of(context).pop();
|
||
pushRoute(context, new RegistrationScreen()); // Запускаем регистрацию
|
||
});
|
||
}).catchError((error) {
|
||
print(error.toString());
|
||
});
|
||
} else {
|
||
Navigator.of(context).pop();
|
||
Navigator.of(context).pop();
|
||
}
|
||
};
|
||
|
||
showYesNoDialog(context, StringsLocalization.confirmation(), StringsLocalization.askChangeStore(), positiveCalback);
|
||
}
|
||
|
||
forceLogout(BuildContext context) async {
|
||
String token = await platform.invokeMethod('getToken');
|
||
deleteToken(token).then((response) {
|
||
print(response.body);
|
||
platform.invokeMethod('removeKeys').then((result) {
|
||
Navigator.of(context).pop();
|
||
pushRoute(context, new RegistrationScreen()); // Запускаем регистрацию
|
||
});
|
||
}).catchError((error) {
|
||
print(error.toString());
|
||
});
|
||
}
|
||
|
||
/// Запуск спецефичной для каждой платформы части приложения - сканера.
|
||
/// Может производиться с нескольких экранов (splash, finish_registration).
|
||
startScanner(BuildContext context, String app) async {
|
||
|
||
String token = await platform.invokeMethod('getToken');
|
||
// Канал ловит вызовы методов из "нативной" части приложения.
|
||
// Могут быть вызваны либо logaut либо faq, либо purchase.
|
||
if (token != null) {
|
||
platform.setMethodCallHandler((MethodCall call) async {
|
||
|
||
print('call.method: ${call.method}');
|
||
if (call.method == 'logout') {
|
||
forceLogout(context);
|
||
} else if (call.method == 'faq') {
|
||
faq(context, true);
|
||
} else {
|
||
String userString = call.arguments[0];
|
||
print('user: ${userString}');
|
||
String card = call.arguments[1];
|
||
print('card: ${card}');
|
||
var route = new MaterialPageRoute<Null>(builder: (BuildContext context) => new PurchaseScreen(userString, card));
|
||
Navigator.of(context).pushReplacement(route);
|
||
}
|
||
});
|
||
await platform.invokeMethod('startScanner', {
|
||
'token' : token,
|
||
'url': url,
|
||
'appToken': appToken,
|
||
'color': Resources.getPrimaryColor(app).value
|
||
});
|
||
}
|
||
}
|
||
|
||
// Запуск диалога с двумя кнопками
|
||
showYesNoDialog(BuildContext context, String title, String content, VoidCallback positiveCallback) {
|
||
showDialog(context: context, child: new AlertDialog(
|
||
title: new Text(title),
|
||
content: new Text(content),
|
||
actions: <Widget>[
|
||
new FlatButton(
|
||
child: new Text(StringsLocalization.no()),
|
||
onPressed: () {
|
||
Navigator.of(context).pop();
|
||
}
|
||
),
|
||
new FlatButton(
|
||
child: new Text(StringsLocalization.yes()),
|
||
onPressed: positiveCallback)]));
|
||
}
|