diff --git a/android/app/src/main/java/com/dinect/checker/activity/CameraActivity.java b/android/app/src/main/java/com/dinect/checker/activity/CameraActivity.java index d20af8c..a39621c 100644 --- a/android/app/src/main/java/com/dinect/checker/activity/CameraActivity.java +++ b/android/app/src/main/java/com/dinect/checker/activity/CameraActivity.java @@ -72,17 +72,18 @@ public class CameraActivity extends AppCompatActivity { actionBar.setDisplayHomeAsUpEnabled(true); } + mCamera = getCameraInstance(); + mCamera.setDisplayOrientation(90); holder.addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { try { - mCamera = getCameraInstance(); + mCamera.setPreviewDisplay(holder); mCamera.startPreview(); mCamera.setPreviewCallback(previewCallback); mCamera.autoFocus(autoFocusCB); - mCamera.setDisplayOrientation(90); initCountours(); } catch (Exception e) { e.printStackTrace(); @@ -95,7 +96,7 @@ public class CameraActivity extends AppCompatActivity { @Override public void surfaceDestroyed(SurfaceHolder holder) { - mCamera = null; + } }); } @@ -116,6 +117,12 @@ public class CameraActivity extends AppCompatActivity { return super.onOptionsItemSelected(item); } + @Override + public void onDestroy() { + super.onDestroy(); + mCamera = null; + } + private void initCountours() { diff --git a/android/app/src/main/res/layout/a_scanner.xml b/android/app/src/main/res/layout/a_scanner.xml index a0b3ac5..c3a0be0 100644 --- a/android/app/src/main/res/layout/a_scanner.xml +++ b/android/app/src/main/res/layout/a_scanner.xml @@ -10,38 +10,6 @@ android:layout_width="match_parent" android:layout_height="match_parent"/> - - - - - - - - - - - - - - - new _RegistrationScreenState(); } -class _RegistrationScreenState extends BaseState { +class _RegistrationScreenState extends State { @override Widget build(BuildContext context) { return new Scaffold(appBar: _getAppBar(), body: _getScreen(context)); @@ -18,22 +18,14 @@ class _RegistrationScreenState extends BaseState { backgroundColor: primaryColor, actions: [ new IconButton( icon: new Icon(Icons.help_outline), - tooltip: 'Air it', - onPressed: faq, - ), - new IconButton( - icon: new Image(height: 24.0, width: 24.0, image: new AssetImage(logout_png)), - tooltip: 'Restitch it', - onPressed: logout, - ) - ]); + onPressed: () {} + )]); } Widget _getScreen(BuildContext context) { return new Center(child: new Column(children: [ _getLogo(), - _getDecoratedInputField(merchantIDHint), - _getDecoratedInputField(posIDHint), + _getDecoratedText(), _getMessage(), _getButton(context) ])); @@ -44,27 +36,22 @@ class _RegistrationScreenState extends BaseState { child: new Image.asset(logo_png, height: 24.0, width: 156.0)); } - Container _getDecoratedInputField(String hint) { - return new Container( - padding: new EdgeInsets.only(left: 28.0, right: 28.0, top: 8.0), - child: new Container(height: 48.0, - padding: new EdgeInsets.only(left: 16.0, right: 16.0), - decoration: _getDecoraionForInputField(), - child: _getInputField(hint))) ; + Container _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: _getMerchantIDText()); } - TextField _getInputField(String hint) { - return new TextField(decoration: new InputDecoration(hintText: hint, - hideDivider: true, - hintStyle: new TextStyle(color: const Color(0xffa5a5a5), - fontSize: 16.0)), onChanged: null); + Text _getMerchantIDText() { + return new Text(merchantID, style: new TextStyle(color: const Color(0xffa5a5a5), fontSize: 16.0)); } Container _getMessage() { return new Container(padding: new EdgeInsets.only(top: 20.0, left: 26.0, right: 26.0), child: new Container(height: 128.0, decoration: _getDecoraionForMessageField(), padding: new EdgeInsets.only(top: 16.0, bottom: 8.0, left: 28.0, right: 28.0), - child: new Text('Запрос на активацию программы отправлен, дождитесь подтверждения активации администратором', + child: new Text('Запрос на активацию программы отправлен, дождrитесь подтверждения активации администратором', textAlign: TextAlign.center, style: new TextStyle(fontWeight: FontWeight.bold, color: const Color(0xff4e3a19))))); } @@ -73,7 +60,7 @@ class _RegistrationScreenState extends BaseState { image: new ExactAssetImage(activate_token_bg_png), fit: BoxFit.fill)); } - Decoration _getDecoraionForInputField() { + Decoration _getDecoraionForMerchantId() { return new BoxDecoration(color: Colors.white, border: new Border.all(color: const Color(0xffcfd8dc), width: 1.0), borderRadius: new BorderRadius.all(new Radius.circular(4.0))); @@ -84,9 +71,9 @@ class _RegistrationScreenState extends BaseState { child: new Container(height: 64.0, padding: new EdgeInsets.all(8.0), child: new RaisedButton(child: new Text('Обновить статус активации', style: new TextStyle(color: Colors.white)), - onPressed: _checkToken(context), - disabledColor: const Color(0xffbfbfbf), - color: const Color(0xff3078c0)))); + onPressed: () { + startScanner(context); + }))); } } diff --git a/lib/main.dart b/lib/main.dart index 76023a8..c5bfb1e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'splash.dart'; +import 'registration.dart'; import 'dart:async'; import 'dart:convert'; @@ -34,6 +35,7 @@ void main() { /// Токен кассы. Инициализируется при регистрации. String token; +String merchantID = ""; /// Проверка статуса токена. Токен может быть активирован, либо не активирован. void checkToken(BuildContext context, Callback callback) { @@ -62,21 +64,16 @@ void checkToken(BuildContext context, Callback callback) { /// Запуск спецефичной для каждой платформы части приложения - сканера. /// Может производиться с нескольких экранов (splash, finish_registration). startScanner(BuildContext context) async{ + const platform = const MethodChannel('com.dinect.checker/instance_id'); platform.setMethodCallHandler((MethodCall call) async { - logout(); - print(call.method); - // dynamic arguments = call.arguments; - // handle call then - return result; + pushRoute(context, new RegistrationScreen()); + return result; // or // throw new PlatformException(errorCode, anErrorMessage, someDetails); }); - await platform.invokeMethod('startScanner'); -} -logout() { - pushRute(_context, new RegistrationScreen()); + await platform.invokeMethod('startScanner'); } /// Навигация по приложению. @@ -99,14 +96,6 @@ class Checker extends StatelessWidget { } } -abstract class BaseState extends State { - - void faq() { - - } - -} - abstract class Callback { void call(BuildContext context); -} \ No newline at end of file +} diff --git a/lib/registration.dart b/lib/registration.dart index 8bcc4c0..3c447bd 100644 --- a/lib/registration.dart +++ b/lib/registration.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'main.dart'; +import 'dart:async'; import 'activate_token.dart'; /// Экран регистрации магазина и кассы. @@ -9,7 +10,7 @@ class RegistrationScreen extends StatefulWidget { @override State createState() => new _RegistrationScreenState(); } -class _RegistrationScreenState extends BaseState { +class _RegistrationScreenState extends State { String _merchantID = ""; bool _loading = false; @@ -20,7 +21,7 @@ class _RegistrationScreenState extends BaseState { AppBar _getAppBar() { return new AppBar(title: new Text("Регистрация"), - actions: [new IconButton(icon: new Icon(Icons.help_outline), onPressed: faq)]); + actions: [new IconButton(icon: new Icon(Icons.help_outline), onPressed: () {})]); } Widget _getScreen(BuildContext context) { @@ -70,7 +71,7 @@ class _RegistrationScreenState extends BaseState { padding: new EdgeInsets.only(left: 40.0, right: 40.0), child: new RaisedButton(child: new Text('ЗАРЕГИСТРИРОВАТЬ', style: new TextStyle(color: Colors.white)), - onPressed: _isValidMerchantID() ? () => _registerShop(context, _merchantID) : null, + onPressed: _isValidMerchantID() ? () => _registerShop(context) : null, color: primaryColor)); } @@ -79,57 +80,63 @@ class _RegistrationScreenState extends BaseState { } _isValidMerchantID() { - return _merchantID.length == 5; + return merchantID.length == 5; } _handleUserInput(String text) { if (text.length > 0) { setState(() { - _merchantID = text; + merchantID = text; }); } } - _registerShop(BuildContext context, String merchantShop) { + _registerShop(BuildContext context) { setState(() { - loading = true; - _register(context, merchantShop); + _loading = true; + _registerDemo(context); }); } - _register(BuildContext context, String merchantShop) async { - - const platform = const MethodChannel('com.dinect.checker/instance_id'); - String url = intUrl + 'tokens/?_dmapptoken=' + intToken; - String pos = await platform.invokeMethod('getInstanceID'); - print(pos); - String userAgent = 'dm-checker-test v1.0.1'; - - var body = { - 'merchant_shop': merchantShop, - 'pos': pos, - 'description': userAgent + '-' + pos - }; - - print(url); - - for (var value in body.values) { - print(value); - } - - httpClient.post(url, body: body).then((response) { - print(response.body); - Map parsedMap = JSON.decode(response.body); - token = parsedMap['token']; - platform.invokeMethod('saveToken', {'token' : token}).then((value) { - print(value.toString()); - }); - setState(() { - loading = false; - }); + _registerDemo(BuildContext context) { + new Future.delayed(const Duration(milliseconds: 1000), () { + _loading = false; pushRoute(context, new FinishRegistrationScreen()); - }).catchError((error) { - print(error.toString()); }); } + + _register(BuildContext context) async { + // const platform = const MethodChannel('com.dinect.checker/instance_id'); + // String url = intUrl + 'tokens/?_dmapptoken=' + intToken; + // String pos = await platform.invokeMethod('getInstanceID'); + // print(pos); + // String userAgent = 'dm-checker-test v1.0.1'; + + // var body = { + // 'merchant_shop': merchantShop, + // 'pos': pos, + // 'description': userAgent + '-' + pos + // }; + + // print(url); + + // for (var value in body.values) { + // print(value); + // } + + // httpClient.post(url, body: body).then((response) { + // print(response.body); + // Map parsedMap = JSON.decode(response.body); + // token = parsedMap['token']; + // platform.invokeMethod('saveToken', {'token' : token}).then((value) { + // print(value.toString()); + // }); + // setState(() { + // loading = false; + // }); + // pushRoute(context, new FinishRegistrationScreen()); + // }).catchError((error) { + // print(error.toString()); + // }); + } } \ No newline at end of file diff --git a/lib/splash.dart b/lib/splash.dart index bec8c2c..b699e82 100644 --- a/lib/splash.dart +++ b/lib/splash.dart @@ -28,11 +28,10 @@ class SplashScreen extends StatelessWidget { // В случае, если в приложении отсутствует токен, // необходимо запустить регистрацию кассы. // if (token == null) { - // pushRoute(context, new RegistrationScreen()); + pushRoute(context, new RegistrationScreen()); // } else { // checkToken(context, new CheckTokenCallback()); // } - startScanner(context); } }