diff --git a/babylonia_terminal_launcher/lib/app.dart b/babylonia_terminal_launcher/lib/app.dart index 359bb0f..e251a14 100644 --- a/babylonia_terminal_launcher/lib/app.dart +++ b/babylonia_terminal_launcher/lib/app.dart @@ -19,6 +19,7 @@ class BabyloniaLauncher extends StatelessWidget { @override Widget build(BuildContext context) { ErrorReporter.listenAllRustError(navigatorKey); + gameStateProvider.updateSetup(); return MultiProvider( providers: [ ChangeNotifierProvider( @@ -38,7 +39,7 @@ class BabyloniaLauncher extends StatelessWidget { themeMode: ThemeMode.system, highContrastTheme: yaruHighContrastLight, highContrastDarkTheme: yaruHighContrastDark, - home: Provider.of(context).hasToSetup() + home: Provider.of(context).haveToSetup ? const SetupScreen() : const Menu(), ), diff --git a/babylonia_terminal_launcher/lib/providers/game_state_provider.dart b/babylonia_terminal_launcher/lib/providers/game_state_provider.dart index 1aa6b9a..8be6876 100644 --- a/babylonia_terminal_launcher/lib/providers/game_state_provider.dart +++ b/babylonia_terminal_launcher/lib/providers/game_state_provider.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; class GameStateProvider with ChangeNotifier { States? _gameState; bool isUpdating = false; + bool haveToSetup = false; get gameState { return _gameState; @@ -24,7 +25,12 @@ class GameStateProvider with ChangeNotifier { } } - bool hasToSetup() { + void updateSetup() { + haveToSetup = needToSetup(); + notifyListeners(); + } + + bool needToSetup() { return _gameState == States.ProtonNotInstalled || _gameState == States.DXVKNotInstalled || _gameState == States.FontNotInstalled || diff --git a/babylonia_terminal_launcher/lib/screens/setups/steps_screen.dart b/babylonia_terminal_launcher/lib/screens/setups/steps_screen.dart index 955198b..6ba09ab 100644 --- a/babylonia_terminal_launcher/lib/screens/setups/steps_screen.dart +++ b/babylonia_terminal_launcher/lib/screens/setups/steps_screen.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:provider/provider.dart'; +import 'package:yaru/yaru.dart'; import './../../messages/game_state.pb.dart'; import './../../providers/providers.dart'; @@ -31,6 +32,9 @@ class StepsScreen extends StatelessWidget { case States.DependecieNotInstalled: controller.updateSection(3); break; + default: + controller.updateSection(null); + break; } return Center( @@ -64,8 +68,9 @@ class StepsScreen extends StatelessWidget { Padding( padding: const EdgeInsets.only(top: 12.0), child: SimpleButton( - onPressed: - true ? null : () => gameStateProvider.updateGameState(), + onPressed: !gameStateProvider.needToSetup() + ? () => gameStateProvider.updateSetup() + : null, child: const Text('next'), ), ), diff --git a/babylonia_terminal_launcher/lib/widgets/selectable_yaru_expansion_panel.dart b/babylonia_terminal_launcher/lib/widgets/selectable_yaru_expansion_panel.dart index b9ecc62..2759e09 100644 --- a/babylonia_terminal_launcher/lib/widgets/selectable_yaru_expansion_panel.dart +++ b/babylonia_terminal_launcher/lib/widgets/selectable_yaru_expansion_panel.dart @@ -8,12 +8,12 @@ import 'package:yaru/constants.dart'; import 'package:yaru/widgets.dart'; class SectionController extends ChangeNotifier { - int selectedItem = 0; + int? selectedItem; Function()? onChange; SectionController({required this.selectedItem}); - void updateSection(int newSelectedItem) { + void updateSection(int? newSelectedItem) { selectedItem = newSelectedItem; notifyListeners(); if (onChange != null) { @@ -77,9 +77,15 @@ class _SelectableYaruExpansionPanelState super.initState(); widget.controller.onChange = widget.collapseOnExpand ? () { - _expandedStore[widget.controller.selectedItem]; - for (var n = 0; n < _expandedStore.length; n++) { - if (_expandedStore[n]) { + if (widget.controller.selectedItem != null) { + _expandedStore[widget.controller.selectedItem!]; + for (var n = 0; n < _expandedStore.length; n++) { + if (_expandedStore[n]) { + setState(() => _expandedStore[n] = false); + } + } + } else { + for (var n = 0; n < _expandedStore.length; n++) { setState(() => _expandedStore[n] = false); } } @@ -93,7 +99,9 @@ class _SelectableYaruExpansionPanelState Widget build(BuildContext context) { assert(widget.children.length == widget.headers.length); - _expandedStore[widget.controller.selectedItem] = true; + if (widget.controller.selectedItem != null) { + _expandedStore[widget.controller.selectedItem!] = true; + } return YaruBorderContainer( border: widget.border,