Resolves #187 Fix crash on view count changes

This commit is contained in:
estevez-dev 2019-02-21 15:35:58 +02:00
parent 4b6dda5a9c
commit 24f80feeee
3 changed files with 12 additions and 9 deletions

View File

@ -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<List> getHistory(String entityId) async {

View File

@ -146,7 +146,7 @@ class MainPage extends StatefulWidget {
_MainPageState createState() => new _MainPageState();
}
class _MainPageState extends State<MainPage> with WidgetsBindingObserver {
class _MainPageState extends State<MainPage> with WidgetsBindingObserver, TickerProviderStateMixin {
HomeAssistant _homeAssistant;
//Map _instanceConfig;
String _webSocketApiEndpoint;
@ -255,6 +255,7 @@ class _MainPageState extends State<MainPage> 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<MainPage> with WidgetsBindingObserver {
},
),
bottom: empty ? null : TabBar(
controller: _viewsTabController,
tabs: buildUIViewTabs(),
isScrollable: true,
),
@ -578,10 +580,12 @@ class _MainPageState extends State<MainPage> 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<MainPage> 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<MainPage> 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();

View File

@ -8,8 +8,9 @@ class HomeAssistantUI {
views = [];
}
Widget build(BuildContext context) {
Widget build(BuildContext context, TabController tabController) {
return TabBarView(
controller: tabController,
children: _buildViews(context)
);
}