WebVIew UI settings

This commit is contained in:
Yegor Vialov 2020-02-11 20:53:29 +00:00
parent 8a80d0c5d1
commit 01226cb9eb
4 changed files with 73 additions and 6 deletions

View File

@ -104,7 +104,7 @@ part 'pages/widgets/product_purchase.widget.dart';
part 'pages/widgets/page_loading_indicator.dart';
part 'pages/widgets/page_loading_error.dart';
part 'pages/panel.page.dart';
part 'pages/main.page.dart';
part 'pages/main/main.page.dart';
part 'pages/integration_settings.page.dart';
part 'home_assistant.class.dart';
part 'pages/log.page.dart';

View File

@ -20,7 +20,7 @@ class ConnectionManager {
String oauthUrl;
String webhookId;
bool useLovelace = true;
bool useWebView = true;
bool useWebView = false;
bool settingsLoaded = false;
bool get isAuthenticated => _token != null;
StreamSubscription _socketSubscription;
@ -42,6 +42,7 @@ class ConnectionManager {
Logger.e("Loading settings...");
SharedPreferences prefs = await SharedPreferences.getInstance();
useLovelace = prefs.getBool('use-lovelace') ?? true;
useWebView = prefs.getBool("use-webview") ?? false;
_domain = prefs.getString('hassio-domain');
_port = prefs.getString('hassio-port');
webhookId = prefs.getString('app-webhook-id');

View File

@ -1,4 +1,4 @@
part of '../main.dart';
part of '../../main.dart';
class MainPage extends StatefulWidget {
MainPage({Key key, this.title}) : super(key: key);
@ -24,6 +24,7 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver, Ticker
int _previousViewCount;
bool _showLoginButton = false;
bool _preventAppRefresh = false;
bool _showWebViewControls = true;
Entity _entityToShow;
@override
@ -129,6 +130,12 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver, Ticker
});
}
});
flutterWebViewPlugin.onScrollYChanged.listen((double offsetY) {
setState(() {
_showWebViewControls = (offsetY == 0);
});
});
}
await HomeAssistant().fetchData().then((_) {
_hideBottomBar();
@ -855,14 +862,30 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver, Ticker
key: _scaffoldKey,
primary: false,
bottomNavigationBar: bottomBar,
body: _buildScaffoldBody(true)
body: Container(
color: Colors.white,
)
);
} else if (ConnectionManager().settingsLoaded && ConnectionManager().useWebView) {
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark);
return WebviewScaffold(
url: ConnectionManager().httpWebHost,
primary: false,
appBar: EmptyAppBar (),
appBar: !_showWebViewControls ? EmptyAppBar() : AppBar(
actions: <Widget>[
IconButton(
icon: Icon(Icons.smartphone),
onPressed: () {
Navigator.of(context).pushNamed('/integration-settings');
}
),
IconButton(
icon: Icon(Icons.settings),
onPressed: () {
Navigator.of(context).pushNamed('/connection-settings');
}
)
]
),
bottomNavigationBar: bottomBar,
);
} else {
@ -926,3 +949,24 @@ class EmptyAppBar extends StatelessWidget implements PreferredSizeWidget {
@override
Size get preferredSize => Size(0.0,0.0);
}
class WebViewAppBar extends StatelessWidget implements PreferredSizeWidget {
@override
Widget build(BuildContext context) {
return Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
IconButton(
icon: Icon(Icons.smartphone),
onPressed: () {
Navigator.of(context).pushNamed('/connection-settings');
},
),
],
);
//return Container();
}
@override
Size get preferredSize => Size(0.0,30.0);
}

View File

@ -20,6 +20,8 @@ class _ConnectionSettingsPageState extends State<ConnectionSettingsPage> {
String _newLongLivedToken = "";
bool _useLovelace = true;
bool _newUseLovelace = true;
bool _useWebView = true;
bool _newUseWebView = true;
String oauthUrl;
bool useOAuth = false;
@ -60,6 +62,11 @@ class _ConnectionSettingsPageState extends State<ConnectionSettingsPage> {
} catch (e) {
_useLovelace = _newUseLovelace = true;
}
try {
_useWebView = _newUseWebView = prefs.getBool("use-webview") ?? true;
} catch (e) {
_useWebView = _newUseWebView = true;
}
});
}
@ -69,6 +76,7 @@ class _ConnectionSettingsPageState extends State<ConnectionSettingsPage> {
(_newHassioDomain != _hassioDomain) ||
(_newSocketProtocol != _socketProtocol) ||
(_newUseLovelace != _useLovelace) ||
(_newUseWebView != _useWebView) ||
(_newLongLivedToken != _longLivedToken));
}
@ -104,6 +112,7 @@ class _ConnectionSettingsPageState extends State<ConnectionSettingsPage> {
prefs.setString("hassio-protocol", _newSocketProtocol);
prefs.setString("hassio-res-protocol", _newSocketProtocol == "wss" ? "https" : "http");
prefs.setBool("use-lovelace", _newUseLovelace);
prefs.setBool("use-webview", _newUseWebView);
}
@override
@ -201,6 +210,19 @@ class _ConnectionSettingsPageState extends State<ConnectionSettingsPage> {
)
],
),
new Row(
children: [
Text("Use web UI"),
Switch(
value: _newUseWebView,
onChanged: (value) {
setState(() {
_newUseWebView = value;
});
},
)
],
),
Text(
"Authentication settings",
style: TextStyle(