Add welcome and setup screen

This commit is contained in:
ALEZ-DEV 2024-05-18 23:06:22 +02:00
parent 63b2aff20a
commit 29ff5488aa
7 changed files with 128 additions and 41 deletions

View File

@ -3,12 +3,16 @@ import 'package:provider/provider.dart';
import 'package:yaru/yaru.dart';
import './screens/screens.dart';
import './screens/setup_screen.dart';
import './providers/providers.dart';
class BabyloniaLauncher extends StatelessWidget {
const BabyloniaLauncher({super.key, required this.settingsProvider});
const BabyloniaLauncher(
{super.key,
required this.settingsProvider,
required this.gameStateProvider});
final SettingsProvider settingsProvider;
final GameStateProvider gameStateProvider;
@override
Widget build(BuildContext context) {
@ -18,7 +22,7 @@ class BabyloniaLauncher extends StatelessWidget {
create: (context) => settingsProvider,
),
ChangeNotifierProvider(
create: (context) => GameStateProvider(),
create: (context) => gameStateProvider,
),
],
child: YaruTheme(
@ -30,7 +34,9 @@ class BabyloniaLauncher extends StatelessWidget {
themeMode: ThemeMode.system,
highContrastTheme: yaruHighContrastLight,
highContrastDarkTheme: yaruHighContrastDark,
home: const Menu(),
home: Provider.of<GameStateProvider>(context).hasToSetup()
? const SetupScreen()
: const Menu(),
),
),
);

View File

@ -14,7 +14,11 @@ void main() async {
final SettingsProvider settings = SettingsProvider();
await settings.init();
final GameStateProvider gameState = GameStateProvider();
await gameState.updateGameState();
runApp(BabyloniaLauncher(
settingsProvider: settings,
gameStateProvider: gameState,
));
}

View File

@ -2,7 +2,7 @@ import 'package:babylonia_terminal_launcher/messages/game_state.pb.dart';
import 'package:flutter/material.dart';
class GameStateProvider with ChangeNotifier {
States? _gameState = null;
States? _gameState;
bool isUpdating = false;
Future updateGameState() async {
@ -19,4 +19,9 @@ class GameStateProvider with ChangeNotifier {
notifyListeners();
}
}
bool hasToSetup() {
return _gameState == States.ProtonNotInstalled ||
_gameState == States.DXVKNotInstalled;
}
}

View File

@ -2,6 +2,8 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../widgets/background_widget.dart';
import '../widgets/serious_lee_widget.dart';
import '../widgets/simple_button.dart';
import './../providers/providers.dart';
import './../models/settings.dart';
import './../models/background.dart';
@ -34,10 +36,7 @@ class HomeScreen extends StatelessWidget {
maxWidth: 600,
maxHeight: 50,
),
child: ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: Colors.blue[500],
),
child: SimpleButton(
onPressed: () async {
Provider.of<GameStateProvider>(context,
listen: false)
@ -94,44 +93,18 @@ class _ShowBackgroundState extends State<ShowBackground> {
if (Provider.of<SettingsProvider>(context).getSelectedBackgroundType !=
BackgroundType.disable) {
if (isLoading) {
return const DefaultBackground();
return const SeriousLeeWidget(
title: 'Babylonia Terminal',
);
} else {
return BackgroundWidget(
background: _background,
);
}
} else {
return const DefaultBackground();
return const SeriousLeeWidget(
title: 'Babylonia Terminal',
);
}
}
}
class DefaultBackground extends StatelessWidget {
const DefaultBackground({super.key});
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(
height: 300,
child: Image.asset('assets/images/Lee6.png'),
),
const Center(
child: Padding(
padding: EdgeInsets.all(8.0),
child: Text(
'Babylonia Terminal',
style: TextStyle(
fontSize: 34,
),
),
),
)
],
),
);
}
}

View File

@ -0,0 +1,42 @@
import 'package:flutter/material.dart';
import './../widgets/serious_lee_widget.dart';
import './../widgets/simple_button.dart';
class SetupScreen extends StatelessWidget {
const SetupScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Babylonia Terminal"),
centerTitle: true,
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const SeriousLeeWidget(title: 'Welcome to Babylonia Terminal!'),
const Text(
'We have to setup some things first',
style: TextStyle(
fontSize: 20,
),
),
Padding(
padding: const EdgeInsets.only(top: 15.0),
child: SizedBox(
width: 200,
child: SimpleButton(
onPressed: () {},
child: const Text('Start'),
),
),
)
],
),
),
);
}
}

View File

@ -0,0 +1,32 @@
import 'package:flutter/material.dart';
class SeriousLeeWidget extends StatelessWidget {
const SeriousLeeWidget({super.key, required this.title});
final String title;
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(
height: 300,
child: Image.asset('assets/images/Lee6.png'),
),
Center(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
title,
style: const TextStyle(
fontSize: 34,
),
),
),
)
],
),
);
}
}

View File

@ -0,0 +1,25 @@
import 'package:flutter/material.dart';
class SimpleButton extends StatelessWidget {
const SimpleButton({super.key, required this.child, required this.onPressed});
final Function()? onPressed;
final Widget? child;
@override
Widget build(BuildContext context) {
return ElevatedButton(
style: ButtonStyle(
backgroundColor: MaterialStateProperty.all(Colors.blue[500]),
side: MaterialStateProperty.all(BorderSide.none),
shape: MaterialStateProperty.all<RoundedRectangleBorder>(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(100.0),
side: const BorderSide(color: Colors.red),
),
),
),
onPressed: onPressed,
child: child,
);
}
}