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/screens/currencies.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(StringsLocalization.currency(), '')]; bool returnToScanner; SettingsState(SqliteHelper helper, String app, bool returnToScanner) { this.helper = helper; this.app = app; this.returnToScanner = returnToScanner; } @override Widget build(BuildContext ctx) { helper.getSettings().then((info) { if (menuItems != null) { if (menuItems[0].selectedValue != info['currency'].toString()) { setState(() { menuItems[0].selectedValue = info['currency'].toString(); }); } } }); return new WillPopScope(onWillPop: onWillPop, child: getMainWidget()); } @override Widget getScreenContent() { return menuItems == null ? getBackground() : 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 (MenuItem item in menuItems) { if (item.selectedValue != '') { widgets.add(getSettingsItem(item)); } } return widgets; } Widget getSettingsItem(MenuItem item) { return new Container( height: 56.0, padding: new EdgeInsets.only(left: 8.0), child: (new FlatButton( onPressed: () => onPressed(menuItems.indexOf(item)), child: new Row(children: [ new Expanded(child: new Text(item.title, style: new TextStyle( fontWeight: FontWeight.w600, color: faqGrey, fontSize: 14.0))), new Text(getCurrencyTitle(int.parse(item.selectedValue)), 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)); } } 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(); } onWillPop() { if(returnToScanner) { return startScanner(context, app, helper); } else { return true; } } }