Files
checker/lib/main.dart

102 lines
3.3 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:flutter/material.dart';
import 'package:flutter/services.dart';
import 'splash.dart';
import 'registration.dart';
import 'dart:async';
import 'dart:convert';
/// Главный класс приложения.
/// Здесь распоосложены константы и некоторые методы, которые могут вызываться с разных экранов приложения.
// 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';
// Colors
const Color primaryColor = const Color(0xffeb0004);
const Color disabledColor = const Color(0xffbfbfbf);
// HttpClient
final httpClient = createHttpClient();
void main() {
runApp(new Checker());
}
/// Токен кассы. Инициализируется при регистрации.
String token;
String merchantID = "";
/// Проверка статуса токена. Токен может быть активирован, либо не активирован.
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());
});
}
/// Запуск спецефичной для каждой платформы части приложения - сканера.
/// Может производиться с нескольких экранов (splash, finish_registration).
startScanner(BuildContext context) async{
const platform = const MethodChannel('com.dinect.checker/instance_id');
platform.setMethodCallHandler((MethodCall call) async {
pushRoute(context, new RegistrationScreen());
return result;
// or
// throw new PlatformException(errorCode, anErrorMessage, someDetails);
});
await platform.invokeMethod('startScanner');
}
/// Навигация по приложению.
/// widget - следующий экран приложения.
pushRoute(BuildContext context, Widget widget) {
Navigator.of(context).pushReplacement(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(),
theme: new ThemeData(
primaryColor: primaryColor,
accentColor: primaryColor
));
}
}
abstract class Callback {
void call(BuildContext context);
}