diff --git a/lib/mobile_example.dart b/lib/mobile_example.dart index c908e34..ead8372 100644 --- a/lib/mobile_example.dart +++ b/lib/mobile_example.dart @@ -1,8 +1,10 @@ +import 'dart:convert'; import 'dart:math'; import 'package:flutter/material.dart'; import 'package:gymlink_module_web/main_mobile.dart'; import 'package:gymlink_module_web/providers/main.dart'; +import 'package:http/http.dart' as http; import 'package:provider/provider.dart'; void main() { @@ -71,11 +73,50 @@ class _ExamplePageState extends State { @override void initState() { super.initState(); - Future.microtask( - () => context.read().onTokenReceived('token123')); + // Future.microtask( + // () => context.read().onTokenReceived('token123')); Future.microtask(() => context .read() .setTheme(ThemeData.light(useMaterial3: true))); + + Future.microtask(() => context.read().setOnError(() { + const snackBar = SnackBar( + content: Text('Ошибка подключения'), + duration: Duration(seconds: 3), // Длительность отображения Snackbar + behavior: SnackBarBehavior + .fixed, // Поведение Snackbar (fixed или floating) + ); + ScaffoldMessenger.of(context).showSnackBar(snackBar); + Future.delayed(const Duration(seconds: 3)) + .then((value) => _setToken()); + })); + + Future.microtask(() async { + await _setToken(); + }); + } + + Future _setToken() async { + final token = await _getToken(); + if (token != '') { + context.read().onTokenReceived(token); + } else { + context.read().onError(); + } + } + + Future _getToken() async { + var url = + Uri.http('gymlink.freemyip.com:8080', 'api/auth/authorize_client'); + var response = await http.post(url, body: { + 'GymKey': 'eeb42dcb-8e5b-4f21-825a-3fc7ada43445', + 'id': '123' + }); // Just testing token + var decodedBody = jsonDecode(response.body) as Map; + if (decodedBody['payload'] == null) { + return ''; + } + return decodedBody['payload']['token']; } @override diff --git a/lib/providers/main.dart b/lib/providers/main.dart index 5a1db61..74f7213 100644 --- a/lib/providers/main.dart +++ b/lib/providers/main.dart @@ -6,6 +6,8 @@ class GymLinkProvider with ChangeNotifier { bool get isLoading => _isLoading; bool _blackTheme = false; bool get blackTheme => _blackTheme; + String _token = ''; + String get token => _token; ThemeData _theme = myTheme; ThemeData get theme => _theme; void Function() _onError = () => {}; @@ -13,13 +15,16 @@ class GymLinkProvider with ChangeNotifier { void Function() get onError => _onError; void onTokenReceived(String token) { - if (token == 'token123') { - _isLoading = false; - notifyListeners(); - } else { - _isLoading = true; - notifyListeners(); - } + _token = token; + _isLoading = false; + notifyListeners(); + // if (token == 'token123') { + // _isLoading = false; + // notifyListeners(); + // } else { + // _isLoading = true; + // notifyListeners(); + // } } void changeTheme(int color) { diff --git a/web/js/demo-js-interop.js b/web/js/demo-js-interop.js index df8b7c7..92e010c 100644 --- a/web/js/demo-js-interop.js +++ b/web/js/demo-js-interop.js @@ -7,10 +7,35 @@ }; let appState = window._appState; + function getToken() { + fetch( + 'http://gymlink.freemyip.com:8080/api/auth/authorize_client', + { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + GymKey: 'eeb42dcb-8e5b-4f21-825a-3fc7ada43445', // Just testing token + id: '123', + }), + } + ) + .then(res => res.json()) + .catch(e => { + console.log(e); + setTimeout(getToken, 1000); + }) + .then(data => { + if (data.payload) + appState.onTokenReceived(data.payload.token); + else { + console.log(data); + setTimeout(getToken, 1000); + } + }); + } + let btn = document.getElementById('token'); - btn.addEventListener('click', function () { - appState.onTokenReceived('token123'); - }); + btn.addEventListener('click', getToken); let colorChangeBtnRed = document.getElementById('colorChangeBtnRed'); colorChangeBtnRed.addEventListener('click', function () {