Files
checker/lib/activate_token.dart

125 lines
5.1 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 'main.dart';
import 'dart:convert'; // Пакет для обработки json с ответом от сервера.
/// TODO: Вот это все ерунда конечно, это должно обрабатыватсья через state экрана регистрации.
class FinishRegistrationScreen extends StatefulWidget {
@override State createState() => new _RegistrationScreenState();
}
class _RegistrationScreenState extends State<FinishRegistrationScreen> {
bool _tokenActive = false;
String _merchantID = null;
@override Widget build(BuildContext context) {
return new Scaffold(appBar: _getAppBar(), body: _getScreen(context));
}
AppBar _getAppBar() {
return new AppBar(title: new Text("Регистрация", style: new TextStyle(fontSize: 18.0)),
backgroundColor: primaryColor, actions: <Widget>[
new IconButton(
icon: new Icon(Icons.help_outline),
onPressed: () {}
)]);
}
Widget _getScreen(BuildContext context) {
if (_merchantID == null) {
_getSavedMerchantID();
}
return new Column(children: <Widget>[
_getLogo(),
_getMerchantIDTitle(),
_getDecoratedText(),
_getMessage(),
_getButton(context)
]);
}
_getLogo() {
double containerHeight = 92.0;
double imageWidth = 156.0;
return new Container(height: containerHeight, child: new Image.asset(logo_png, width: imageWidth));
}
_getMerchantIDTitle() {
return new Container(margin: new EdgeInsets.only(top: 8.0, bottom: 8.0, left: 28.0, right: 28.0),
child: new Row(crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[new Text('ID Магазина', textAlign: TextAlign.left, style: new TextStyle(fontWeight: FontWeight.w300, color: greyTextColor, fontSize: 14.0))]));
}
_getDecoratedText() {
return new Container(margin: new EdgeInsets.only(left: 28.0, right: 28.0),
padding: new EdgeInsets.only(top: 12.0, bottom: 12.0, left: 16.0, right: 16.0),
decoration: _getDecoraionForMerchantId(),
child: new Row(children: <Widget>[_getMerchantIDText()]));
}
_getMerchantIDText() {
return new Text(_merchantID != null ? _merchantID : '', style: new TextStyle(color: Colors.black, fontSize: 16.0));
}
_getSavedMerchantID() {
const platform = const MethodChannel('com.dinect.checker/instance_id');
platform.invokeMethod('getMerchantID').then((result) {
setState(() {
_merchantID = result;
print(_merchantID);
});
});
}
Container _getMessage() {
return new Container(height: _tokenActive ? 72.0 : 108.0, decoration: _getDecoraionForMessageField(),
margin: new EdgeInsets.only(top: 20.0, left: 12.0, right: 12.0),
padding: new EdgeInsets.only(bottom: 16.0, left: 14.0, right: 14.0),
child: new Center(child: new Text(_tokenActive ? 'Программа активирована' : 'Запрос на активацию программы отправлен, дождитесь подтверждения активации администратором',
textAlign: TextAlign.center, style: new TextStyle(height: 1.5, fontWeight: FontWeight.bold, fontSize: 14.0, color: _tokenActive ? tokenActiveTextColor : tokenActivateTextColor))));
}
Decoration _getDecoraionForMessageField() {
return new BoxDecoration(image: new DecorationImage(
image: new ExactAssetImage(_tokenActive ? active_token_bg_png : activate_token_bg_png), fit: _tokenActive ? BoxFit.fitWidth : BoxFit.fill));
}
Decoration _getDecoraionForMerchantId() {
return new BoxDecoration(color: textFieldBackground,
border: new Border.all(color: const Color(0xffcfd8dc), width: 1.0),
borderRadius: new BorderRadius.all(new Radius.circular(4.0)));
}
/// Метод возвращает кнопку, которая запускает отправку токена кассы на сервер.
_getButton(BuildContext context) {
double buttonHeight = 42.0;
double topMargin = 8.0;
return new Container(margin: new EdgeInsets.only(top: topMargin), height: buttonHeight,
child: new RaisedButton(child: new Text(_tokenActive ? 'ЗАВЕРШИТЬ РЕГИСТРАЦИЮ' : 'ОБНОВИТЬ СТАТУС АКТИВАЦИИ',
style: new TextStyle(fontSize: 14.0, color: Colors.white)),
onPressed: () {
if (_tokenActive) {
startScanner(context);
} else {
checkToken(context).then((response) {
print(response.body);
Map parsedMap = JSON.decode(response.body);
// Обновить экран, заменить сообщение о необходимости активации токена, на сообщние о том, что токен активен.
setState(() {
_tokenActive = parsedMap['active'];
});
}).catchError((error) {
print(error.toString());
return false;
});
}
},
color: primaryColor));
}
}