Files
checker/lib/screens/registration.dart

106 lines
3.5 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/base/base_screen.dart';
import 'package:checker/screens/finish_registration.dart';
import 'package:flutter/material.dart';
import 'dart:convert'; // Пакет для обработки json с ответом от сервера.
import 'package:checker/common.dart';
import 'package:checker/consts.dart';
import 'package:checker/network.dart';
import 'package:checker/base/base_state.dart';
import 'package:checker/strings.dart';
/// Экран регистрации магазина и кассы.
class RegistrationScreen extends BaseScreen {
RegistrationScreen(helper, app) : super(helper, app);
@override State createState() => new _RegistrationScreenState();
}
class _RegistrationScreenState extends BaseState<RegistrationScreen> {
@override String getTitle() {
return StringsLocalization.registration();
}
@override getHint() {
return StringsLocalization.idStore();
}
/// Список виджетов, автоматически прокручиваемый вверх при открытии клавиатуры.
@override Widget getScreenContent() {
return new Container(
child: new ListView(children: <Widget>[
new Column(children: <Widget>[
getLogo(),
getHintLabel(),
getInputField(),
getButton()])
]));
}
@override getTextWidget() {
return new TextField(keyboardType: TextInputType.number,
decoration: new InputDecoration.collapsed(hintText: getHint(),
hintStyle: new TextStyle(color: greyTextColor, fontSize: 16.0)),
onChanged: (text) => handleUserInput(text));
}
/// Возвращает кнопку регистрации.
getButton() {
return new Container(margin: new EdgeInsets.only(top: 36.0), child:
buildRaisedButton(StringsLocalization.signUp(), getOnPressed()));
}
// Возвращает обработчик нажатий на кнопку регистрации.
getOnPressed() {
return _isValidMerchantID() && !loading ? () => _registerShop() : null;
}
/// Токен кассы - это DIN код. DIN код - это специальный код динекта, максимальная его длина - 25 символов.
_isValidMerchantID() {
print("${dinCode.length}");
return dinCode.length > 0 && dinCode.length < 25;
}
/// Показать progressBar, запросить токен.
_registerShop() {
setState(() {
loading = true;
_register();
});
}
/// Получение от платформы id установки, формирование запроса на получение токена, сохранение токена.
_register() async {
if (await platform.invokeMethod('isOnline')) {
String posID = await helper.getPosID();
createToken(dinCode, posID).then((response) {
setState(() {
error = null;
loading = false;
});
print(response.body);
print(response.statusCode.toString());
Map parsedMap = JSON.decode(response.body);
if (response.statusCode == 201) {
helper.createSession(dinCode, posID, parsedMap['token']).then((_) {
helper.close();
pushRouteReplacement(context, new FinishRegistrationScreen());
});
} else {
setState(() {
error = parsedMap['errors'][0];
});
}
}).catchError((error) {
print(error.toString());
});
}
}
}