Files
checker/lib/common.dart
2017-09-11 14:51:50 +03:00

144 lines
4.9 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'package:checker/screens/faq.dart';
import 'package:checker/screens/purchase.dart';
import 'package:checker/screens/registration.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'consts.dart';
import 'db.dart';
import 'network.dart';
import 'resources.dart';
import 'strings.dart';
// Канал для взаимодействия с кодом платформы.
const platform = const MethodChannel('com.dinect.checker/instance_id');
// Метод обеспечивает замену текущего объекта route новым.
pushRouteReplacement(BuildContext context, Widget widget) {
var route = new MaterialPageRoute<Null>(builder: (BuildContext context) => widget);
Navigator.of(context).pushReplacement(route);
}
pushRoute(BuildContext context, Widget widget) {
var route = new MaterialPageRoute<Null>(builder: (BuildContext context) => widget);
Navigator.of(context).push(route);
}
// Добавление route, с возможностью вернуться к предыдущему экрану.
faq(BuildContext context, bool returnToScanner) {
pushRoute(context, new FAQScreen(returnToScanner));
}
// В методе отправляется запрос на удаление токена кассы, очищаются SharedPreferences приложения.
logout(BuildContext context) async {
SqliteHelper helper = new SqliteHelper();
await helper.open();
String token = await helper.getToken();
VoidCallback positiveCallback = () {
if (token != null) {
deleteToken(token).then((response) {
print(response.body);
platform.invokeMethod('removeKeys').then((result) {
Navigator.of(context).pop();
Navigator.of(context).pop();
pushRouteReplacement(context, new RegistrationScreen()); // Запускаем регистрацию
});
}).catchError((error) {
print(error.toString());
});
} else {
Navigator.of(context).pop();
Navigator.of(context).pop();
}
};
showYesNoDialog(context, StringsLocalization.confirmation(), StringsLocalization.askChangeStore(), positiveCallback);
}
forceLogout(String token , BuildContext context) async {
deleteToken(token).then((response) {
print(response.body);
SqliteHelper helper = new SqliteHelper();
helper.open().then((_) {
helper.clear().then((_) {
helper.close().then((_) {
Navigator.of(context).pop();
pushRouteReplacement(context, new RegistrationScreen()); // Запускаем регистрацию
});
});
});
}).catchError((error) {
print(error.toString());
});
}
/// Запуск спецефичной для каждой платформы части приложения - сканера.
/// Может производиться с нескольких экранов (splash, finish_registration).
startScanner(BuildContext context, String app, SqliteHelper helper) async {
String token = await helper.getToken();
helper.close();
// Канал ловит вызовы методов из "нативной" части приложения.
// Могут быть вызваны либо logout либо faq, либо purchase.
if (token != null) {
platform.setMethodCallHandler((MethodCall call) async {
print('call.method: ${call.method}');
if (call.method == 'logout') {
forceLogout(token, 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)]));
}
getCurrencyTitle(int code) {
switch(code) {
case 643: return StringsLocalization.ruble();
case 840: return StringsLocalization.dollar();
case 980: return StringsLocalization.hryvna();
}
}
getLocaleTitle(String code) {
switch(code) {
case 'ru': return languages[0];
case 'en': return languages[1];
case 'ua': return languages[2];
}
}