Resolves #563 Fullscreen mode

This commit is contained in:
Yegor Vialov 2020-05-29 18:16:59 +00:00
parent 096e714a04
commit e0a28c0b59
5 changed files with 57 additions and 15 deletions

View File

@ -185,8 +185,13 @@ void main() async {
}; };
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
await AppSettings().loadAppTheme(); await AppSettings().loadStartupSettings();
await Hive.initFlutter(); await Hive.initFlutter();
if (AppSettings().displayMode == DisplayMode.fullscreen) {
SystemChrome.setEnabledSystemUIOverlays([]);
} else {
SystemChrome.setEnabledSystemUIOverlays(SystemUiOverlay.values);
}
runZoned(() { runZoned(() {
runApp(new HAClientApp( runApp(new HAClientApp(

View File

@ -1,5 +1,7 @@
part of '../main.dart'; part of '../main.dart';
enum DisplayMode {normal, fullscreen}
class AppSettings { class AppSettings {
static const DEFAULT_HIVE_BOX = 'defaultSettingsBox'; static const DEFAULT_HIVE_BOX = 'defaultSettingsBox';
@ -26,6 +28,7 @@ class AppSettings {
String webhookId; String webhookId;
double haVersion; double haVersion;
bool scrollBadges; bool scrollBadges;
DisplayMode displayMode;
AppTheme appTheme; AppTheme appTheme;
final int defaultLocationUpdateIntervalMinutes = 20; final int defaultLocationUpdateIntervalMinutes = 20;
Duration locationUpdateInterval; Duration locationUpdateInterval;
@ -34,9 +37,10 @@ class AppSettings {
bool get isAuthenticated => longLivedToken != null; bool get isAuthenticated => longLivedToken != null;
bool get isTempAuthenticated => tempToken != null; bool get isTempAuthenticated => tempToken != null;
loadAppTheme() async { loadStartupSettings() async {
SharedPreferences prefs = await SharedPreferences.getInstance(); SharedPreferences prefs = await SharedPreferences.getInstance();
appTheme = AppTheme.values[prefs.getInt('app-theme') ?? AppTheme.defaultTheme.index]; appTheme = AppTheme.values[prefs.getInt('app-theme') ?? AppTheme.defaultTheme.index];
displayMode = DisplayMode.values[prefs.getInt('display-mode') ?? DisplayMode.normal.index];
} }
Future load(bool full) async { Future load(bool full) async {

View File

@ -484,7 +484,7 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver, Ticker
floating: true, floating: true,
pinned: true, pinned: true,
snap: false, snap: false,
primary: true, primary: AppSettings().displayMode == DisplayMode.normal,
title: Text(HomeAssistant().locationName ?? ""), title: Text(HomeAssistant().locationName ?? ""),
actions: <Widget>[ actions: <Widget>[
PopupMenuButton( PopupMenuButton(
@ -645,10 +645,7 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver, Ticker
bottomNavigationBar: BottomInfoBar( bottomNavigationBar: BottomInfoBar(
controller: _bottomInfoBarController, controller: _bottomInfoBarController,
), ),
body: SafeArea( body: _buildScaffoldBody(true)
top: false,
child: _buildScaffoldBody(true)
)
); );
} else { } else {
return Scaffold( return Scaffold(
@ -658,10 +655,7 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver, Ticker
bottomNavigationBar: BottomInfoBar( bottomNavigationBar: BottomInfoBar(
controller: _bottomInfoBarController, controller: _bottomInfoBarController,
), ),
body: SafeArea( body: _buildScaffoldBody(false)
top: false,
child: _buildScaffoldBody(false)
)
); );
} }
} }

View File

@ -23,7 +23,7 @@ class _AppSettingsPageState extends State<AppSettingsPage> {
Widget _buildMenuItem(BuildContext context, IconData icon,String title, AppSettingsSection section) { Widget _buildMenuItem(BuildContext context, IconData icon,String title, AppSettingsSection section) {
return ListTile( return ListTile(
title: Text(title, style: Theme.of(context).textTheme.subhead), title: Text(title),
leading: Icon(icon), leading: Icon(icon),
trailing: Icon(Icons.keyboard_arrow_right), trailing: Icon(Icons.keyboard_arrow_right),
onTap: () { onTap: () {

View File

@ -13,6 +13,7 @@ class _LookAndFeelSettingsPageState extends State<LookAndFeelSettingsPage> {
AppTheme _currentTheme; AppTheme _currentTheme;
bool _scrollBadges = false; bool _scrollBadges = false;
DisplayMode _displayMode;
@override @override
void initState() { void initState() {
@ -25,7 +26,8 @@ class _LookAndFeelSettingsPageState extends State<LookAndFeelSettingsPage> {
await prefs.reload(); await prefs.reload();
SharedPreferences.getInstance().then((prefs) { SharedPreferences.getInstance().then((prefs) {
setState(() { setState(() {
_currentTheme = AppTheme.values[prefs.getInt("app-theme") ?? AppTheme.defaultTheme.index]; _currentTheme = AppTheme.values[prefs.getInt('app-theme') ?? AppTheme.defaultTheme.index];
_displayMode = DisplayMode.values[prefs.getInt('display-mode') ?? DisplayMode.normal.index];
_scrollBadges = prefs.getBool('scroll-badges') ?? true; _scrollBadges = prefs.getBool('scroll-badges') ?? true;
}); });
}); });
@ -42,18 +44,34 @@ class _LookAndFeelSettingsPageState extends State<LookAndFeelSettingsPage> {
}); });
} }
Future _saveOther() async { Future _saveBadgesSettings() async {
SharedPreferences prefs = await SharedPreferences.getInstance(); SharedPreferences prefs = await SharedPreferences.getInstance();
AppSettings().scrollBadges = _scrollBadges; AppSettings().scrollBadges = _scrollBadges;
await prefs.setBool('scroll-badges', _scrollBadges); await prefs.setBool('scroll-badges', _scrollBadges);
} }
Future _saveDisplayMode(DisplayMode mode) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
AppSettings().displayMode = mode;
await prefs.setInt('display-mode', mode.index);
if (mode == DisplayMode.fullscreen) {
SystemChrome.setEnabledSystemUIOverlays([]);
} else {
SystemChrome.setEnabledSystemUIOverlays(SystemUiOverlay.values);
}
}
Map appThemeName = { Map appThemeName = {
AppTheme.defaultTheme: 'Default', AppTheme.defaultTheme: 'Default',
AppTheme.haTheme: 'Home Assistant theme', AppTheme.haTheme: 'Home Assistant theme',
AppTheme.darkTheme: 'Dark theme' AppTheme.darkTheme: 'Dark theme'
}; };
Map DisplayModeName = {
DisplayMode.normal: 'Normal',
DisplayMode.fullscreen: 'Fullscreen'
};
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return ListView( return ListView(
@ -93,7 +111,28 @@ class _LookAndFeelSettingsPageState extends State<LookAndFeelSettingsPage> {
setState(() { setState(() {
_scrollBadges = val; _scrollBadges = val;
}); });
_saveOther(); _saveBadgesSettings();
},
),
Container(height: Sizes.doubleRowPadding),
Text("Fullscreen mode:", style: Theme.of(context).textTheme.body2),
Container(height: Sizes.rowPadding),
DropdownButton<DisplayMode>(
value: _displayMode,
iconSize: 30.0,
isExpanded: true,
style: Theme.of(context).textTheme.title,
items: DisplayMode.values.map((value) {
return new DropdownMenuItem<DisplayMode>(
value: value,
child: Text('${DisplayModeName[value]}'),
);
}).toList(),
onChanged: (DisplayMode val) {
setState(() {
_displayMode = val;
});
_saveDisplayMode(val);
}, },
), ),
] ]