From cb751a74329db7e1755c1a2054a7088e3dd59543 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 5 Apr 2020 13:19:43 +1000 Subject: [PATCH] Load preferences before opening server settings dialog - This ensures the settings are loaded and ready to go (cherry picked from commit cd72d474a626232d10a7f7ff08419a10038c2c08) --- lib/login_settings.dart | 59 +++++++++++++++++++---------------------- lib/settings.dart | 8 ++++-- 2 files changed, 33 insertions(+), 34 deletions(-) diff --git a/lib/login_settings.dart b/lib/login_settings.dart index f5a3b0b2..aadbfffb 100644 --- a/lib/login_settings.dart +++ b/lib/login_settings.dart @@ -6,8 +6,12 @@ import 'preferences.dart'; class InvenTreeLoginSettingsWidget extends StatefulWidget { + final SharedPreferences _preferences; + + InvenTreeLoginSettingsWidget(this._preferences) : super(); + @override - _InvenTreeLoginSettingsState createState() => _InvenTreeLoginSettingsState(); + _InvenTreeLoginSettingsState createState() => _InvenTreeLoginSettingsState(_preferences); } @@ -15,9 +19,18 @@ class _InvenTreeLoginSettingsState extends State { final GlobalKey _formKey = new GlobalKey(); - String _addr; - String _user; - String _pass; + final SharedPreferences _preferences; + + String _server = ''; + String _username = ''; + String _password = ''; + + _InvenTreeLoginSettingsState(this._preferences) : super() { + _server = _preferences.getString('server') ?? ''; + _username = _preferences.getString('username') ?? ''; + _password = _preferences.getString('password') ?? ''; + } + String _validateServer(String value) { @@ -48,18 +61,11 @@ class _InvenTreeLoginSettingsState extends State { return null; } - @override - void initState() { - load(); - } - @override Widget build(BuildContext context) { final Size screenSize = MediaQuery.of(context).size; - load(); - return Scaffold( appBar: AppBar( title: Text("Login Settings"), @@ -70,32 +76,33 @@ class _InvenTreeLoginSettingsState extends State { key: _formKey, child: new ListView( children: [ - Text("Server"), + Text("Server Address"), new TextFormField( - initialValue: _addr, + initialValue: _server, decoration: InputDecoration( hintText: "127.0.0.1:8000", labelText: "Server:Port", ), validator: _validateServer, onSaved: (String value) { - _addr = value; + _server = value; }, ), + Divider(), Text("Login Details"), TextFormField( - initialValue: _user, + initialValue: _username, decoration: InputDecoration( hintText: "Username", labelText: "Username", ), validator: _validateUsername, onSaved: (String value) { - _user = value; + _username = value; } ), TextFormField( - initialValue: _pass, + initialValue: _password, obscureText: true, decoration: InputDecoration( hintText: "Password", @@ -103,13 +110,13 @@ class _InvenTreeLoginSettingsState extends State { ), validator: _validatePassword, onSaved: (String value) { - _pass = value; + _password = value; }, ), Container( width: screenSize.width, child: RaisedButton( - child: Text("Login"), + child: Text("Save"), onPressed: this.save, ) ) @@ -120,23 +127,11 @@ class _InvenTreeLoginSettingsState extends State { ); } - void load() async { - SharedPreferences prefs = await SharedPreferences.getInstance(); - - _addr = prefs.getString('server'); - _user = prefs.getString('username'); - _pass = prefs.getString('password'); - - // Refresh the widget - setState(() { - }); - } - void save() async { if (_formKey.currentState.validate()) { _formKey.currentState.save(); - await InvenTreeUserPreferences().saveLoginDetails(_addr, _user, _pass); + await InvenTreeUserPreferences().saveLoginDetails(_server, _username, _password); } } diff --git a/lib/settings.dart b/lib/settings.dart index 957571d9..55b28ace 100644 --- a/lib/settings.dart +++ b/lib/settings.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:shared_preferences/shared_preferences.dart'; import 'login_settings.dart'; @@ -40,8 +41,11 @@ class _InvenTreeSettingsState extends State { ); } - void _editServerSettings() { - Navigator.push(context, MaterialPageRoute(builder: (context) => InvenTreeLoginSettingsWidget())); + void _editServerSettings() async { + + var prefs = await SharedPreferences.getInstance(); + + Navigator.push(context, MaterialPageRoute(builder: (context) => InvenTreeLoginSettingsWidget(prefs))); } void _about() async {