diff --git a/lib/home_assistant.class.dart b/lib/home_assistant.class.dart index eaebabe..b5742df 100644 --- a/lib/home_assistant.class.dart +++ b/lib/home_assistant.class.dart @@ -559,8 +559,8 @@ class HomeAssistant { } } - Widget buildViews(BuildContext context, bool lovelace) { - return ui.build(context); + Widget buildViews(BuildContext context, bool lovelace, TabController tabController) { + return ui.build(context, tabController); } Future getHistory(String entityId) async { diff --git a/lib/main.dart b/lib/main.dart index 7b5ce8f..e17c411 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -146,7 +146,7 @@ class MainPage extends StatefulWidget { _MainPageState createState() => new _MainPageState(); } -class _MainPageState extends State with WidgetsBindingObserver { +class _MainPageState extends State with WidgetsBindingObserver, TickerProviderStateMixin { HomeAssistant _homeAssistant; //Map _instanceConfig; String _webSocketApiEndpoint; @@ -255,6 +255,7 @@ class _MainPageState extends State with WidgetsBindingObserver { _showInfoBottomBar(progress: true,); await _homeAssistant.fetch().then((result) { _hideBottomBar(); + _viewsTabController = TabController(vsync: this, length: _homeAssistant.ui?.views?.length ?? 0); }).catchError((e) { _setErrorState(e); }); @@ -557,6 +558,7 @@ class _MainPageState extends State with WidgetsBindingObserver { }, ), bottom: empty ? null : TabBar( + controller: _viewsTabController, tabs: buildUIViewTabs(), isScrollable: true, ), @@ -578,10 +580,12 @@ class _MainPageState extends State with WidgetsBindingObserver { ), ) : - _homeAssistant.buildViews(context, _useLovelaceUI), + _homeAssistant.buildViews(context, _useLovelaceUI, _viewsTabController), ); } + TabController _viewsTabController; + @override Widget build(BuildContext context) { Widget bottomBar; @@ -647,10 +651,7 @@ class _MainPageState extends State with WidgetsBindingObserver { drawer: _buildAppDrawer(), primary: false, bottomNavigationBar: bottomBar, - body: DefaultTabController( - length: _homeAssistant.ui?.views?.length ?? 0, - child: _buildScaffoldBody(false), - ), + body: _buildScaffoldBody(false), ); } } @@ -658,6 +659,7 @@ class _MainPageState extends State with WidgetsBindingObserver { @override void dispose() { WidgetsBinding.instance.removeObserver(this); + _viewsTabController.dispose(); if (_stateSubscription != null) _stateSubscription.cancel(); if (_settingsSubscription != null) _settingsSubscription.cancel(); if (_serviceCallSubscription != null) _serviceCallSubscription.cancel(); diff --git a/lib/ui_class/ui.dart b/lib/ui_class/ui.dart index c5423c3..4e696b3 100644 --- a/lib/ui_class/ui.dart +++ b/lib/ui_class/ui.dart @@ -8,8 +8,9 @@ class HomeAssistantUI { views = []; } - Widget build(BuildContext context) { + Widget build(BuildContext context, TabController tabController) { return TabBarView( + controller: tabController, children: _buildViews(context) ); }