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( 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); }