import 'dart:async'; import 'package:checker/base/base_screen.dart'; import 'package:checker/base/base_state.dart'; import 'package:checker/common.dart'; import 'package:checker/consts.dart'; import 'package:checker/db.dart'; import 'package:checker/network.dart'; import 'package:checker/screens/currencies.dart'; import 'package:checker/screens/languages.dart'; import 'package:checker/screens/splash.dart'; import 'package:checker/strings.dart'; import 'package:flutter/material.dart'; class SettingsScreen extends BaseScreen { final bool returnToScanner; SettingsScreen(helper, app, this.returnToScanner) : super(helper, app); @override State createState() => new SettingsState(helper, app, returnToScanner); } class MenuItem { // Заголовок пункта меню и выбранное значение. String title, selectedValue; MenuItem(this.title, this.selectedValue); } class SettingsState extends BaseState { List menuItems = [ new MenuItem('', ''), new MenuItem('', ''), new MenuItem('', '') ]; bool returnToScanner; bool isAutomaticallyImplyLeading() => true; SettingsState(SqliteHelper helper, String app, bool returnToScanner) : super(helper, app) { this.returnToScanner = returnToScanner; } @override void initState() { print('init state!'); super.initState(); } @override Widget build(BuildContext ctx) { helper.getSettings(true).then((info) { setState(() { // print('currency: ${info['currency']}'); // print('locale: ${info['locale']}'); // print('token: ${info['token']}'); menuItems[0].title = StringsLocalization.currency(); menuItems[1].title = StringsLocalization.locale(); menuItems[2].title = StringsLocalization.logout(); menuItems[0].selectedValue = info['currency'].toString(); menuItems[1].selectedValue = info['locale'] == null ? StringsLocalization.localeCode : info['locale']; menuItems[2].selectedValue = info['token'] == null ? '' : getTokenSuffix(info['token']); }); }); return getMainWidget(); } String getTokenSuffix(String token) { return token.substring(token.length - 4, token.length); } Widget getMainWidget() { return new Scaffold(appBar: getAppBar(), body: getScreenContent()); } @override Widget getScreenContent() { return new Container( margin: new EdgeInsets.only(top: 16.0), child: new ListView(children: getSettings())); } @override List getMenuButtons() { return null; } List getSettings() { List widgets = new List(); for (int i = 0; i < menuItems.length; i++) { if (menuItems[i].selectedValue.toString() != '') { print('title : ${menuItems[i].title}'); widgets.add( getSettingsItem(() => onPressed(menuItems.indexOf(menuItems[i])), menuItems[i].title, getValue(i))); } } return widgets; } String getValue(int position) { switch (position) { case 0 : return getCurrencyTitle(int.parse(menuItems[position].selectedValue)); case 1 : print('val : ${menuItems[position].selectedValue}'); return getLocaleTitle(menuItems[position].selectedValue); default : return null; } } Widget getSettingsItem(VoidCallback onPressed, String title, String value) { return new Container( height: 56.0, padding: new EdgeInsets.only(left: 8.0), child: (new FlatButton( onPressed: onPressed, child: getRow(title, value)))); } Widget getRow(String title, String value) { if (value == null) { return new Row(children: [ new Text(title, style: new TextStyle( fontWeight: FontWeight.w600, color: faqGrey, fontSize: 14.0)) ]); } else { return new Row(children: [ new Expanded(child: new Text(title, style: new TextStyle( fontWeight: FontWeight.w600, color: faqGrey, fontSize: 14.0))), new Text(value, style: new TextStyle( fontWeight: FontWeight.w400, color: faqGrey, fontSize: 14.0)), getArrow() ]); } } void onPressed(int position) { switch (position) { case 0 : return pushRoute(context, new CurrenciesScreen(helper, app)); case 1 : return pushRoute(context, new LanguagesScreen(helper, app)); case 2 : return logout(context, helper); } } // В методе отправляется запрос на удаление токена кассы, очищаются SharedPreferences приложения. logout(BuildContext context, SqliteHelper helper) async { String token = await helper.getToken(); VoidCallback positiveCallback = () { if (token != null) { getDeleteTokenRequest(token).then((response) { helper.clear().then((result) { while (Navigator.of(context).canPop()) { Navigator.of(context).pop(); } var route = new MaterialPageRoute(builder: (BuildContext context) => new SplashScreen(helper, app)); new Future.delayed(const Duration(milliseconds: 200), () { Navigator.of(context).pushReplacement(route); }); }); }).catchError((error) { print(error.toString()); }); } else { while (Navigator.of(context).canPop()) { Navigator.of(context).pop(); } } }; showYesNoDialog(context, StringsLocalization.confirmation(), StringsLocalization.askChangeStore(), positiveCallback); } // Запуск диалога с двумя кнопками showYesNoDialog(BuildContext context, String title, String content, VoidCallback positiveCallback) { showDialog( context: context, child: new AlertDialog( title: new Text(title), content: new Text(content), actions: [ new FlatButton( child: new Text(StringsLocalization.no()), onPressed: () { Navigator.of(context).pop(); }), new FlatButton( child: new Text(StringsLocalization.yes()), onPressed: positiveCallback) ])); } Widget getArrow() { return new Container(margin: new EdgeInsets.only(left: 8.0), child: new Image.asset(settings_arrow_png, height: 42.0)); } @override String getTitle() { return StringsLocalization.settings(); } }