mirror of
https://github.com/Auties00/Reboot-Launcher.git
synced 2026-01-14 03:32:23 +01:00
Switched to getx for state management
Fixed last remaining bug
This commit is contained in:
@@ -1,19 +1,9 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:reboot_launcher/src/util/game_process_controller.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:reboot_launcher/src/page/info_page.dart';
|
||||
import 'package:reboot_launcher/src/page/launcher_page.dart';
|
||||
import 'package:reboot_launcher/src/page/server_page.dart';
|
||||
import 'package:reboot_launcher/src/widget/window_buttons.dart';
|
||||
|
||||
import '../model/fortnite_version.dart';
|
||||
import '../util/generic_controller.dart';
|
||||
import '../util/reboot.dart';
|
||||
import '../util/version_controller.dart';
|
||||
|
||||
class HomePage extends StatefulWidget {
|
||||
const HomePage({Key? key}) : super(key: key);
|
||||
|
||||
@@ -22,129 +12,27 @@ class HomePage extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _HomePageState extends State<HomePage> {
|
||||
late final TextEditingController _usernameController;
|
||||
late final VersionController _versionController;
|
||||
late final GenericController<bool> _rebootController;
|
||||
late final GenericController<bool> _localController;
|
||||
late final TextEditingController _hostController;
|
||||
late final TextEditingController _portController;
|
||||
late final GameProcessController _gameProcessController;
|
||||
late final GenericController<Process?> _serverController;
|
||||
late final GenericController<bool> _startedServerController;
|
||||
late final GenericController<bool> _startedGameController;
|
||||
late Future _future;
|
||||
bool _loaded = false;
|
||||
final List<Widget> _children = [LauncherPage(), ServerPage(), const InfoPage()];
|
||||
int _index = 0;
|
||||
|
||||
@override
|
||||
void initState(){
|
||||
_future = _load();
|
||||
super.initState();
|
||||
}
|
||||
|
||||
Future<bool> _load() async {
|
||||
if (_loaded) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var preferences = await SharedPreferences.getInstance();
|
||||
await downloadRebootDll(preferences);
|
||||
|
||||
Iterable json = jsonDecode(preferences.getString("versions") ?? "[]");
|
||||
var versions =
|
||||
json.map((entry) => FortniteVersion.fromJson(entry)).toList();
|
||||
var selectedVersion = preferences.getString("version");
|
||||
_versionController = VersionController(
|
||||
versions: versions,
|
||||
serializer: _saveVersions,
|
||||
selectedVersion: selectedVersion != null
|
||||
? versions.firstWhere((element) => element.name == selectedVersion)
|
||||
: null);
|
||||
|
||||
_rebootController =
|
||||
GenericController(initialValue: preferences.getBool("reboot") ?? false);
|
||||
|
||||
_usernameController =
|
||||
TextEditingController(text: preferences.getString("${_rebootController.value ? "host" : "game"}_username"));
|
||||
|
||||
_localController =
|
||||
GenericController(initialValue: preferences.getBool("local") ?? true);
|
||||
|
||||
_hostController =
|
||||
TextEditingController(text: preferences.getString("host"));
|
||||
|
||||
_portController =
|
||||
TextEditingController(text: preferences.getString("port"));
|
||||
|
||||
_gameProcessController = GameProcessController();
|
||||
|
||||
_serverController = GenericController(initialValue: null);
|
||||
|
||||
_startedServerController = GenericController(initialValue: false);
|
||||
|
||||
_startedGameController = GenericController(initialValue: false);
|
||||
|
||||
_loaded = true;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Future<void> _saveVersions() async {
|
||||
var preferences = await SharedPreferences.getInstance();
|
||||
var versions =
|
||||
_versionController.versions.map((entry) => entry.toJson()).toList();
|
||||
preferences.setString("versions", jsonEncode(versions));
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return NavigationView(
|
||||
pane: NavigationPane(
|
||||
selected: _index,
|
||||
onChanged: (index) => setState(() => _index = index),
|
||||
displayMode: PaneDisplayMode.top,
|
||||
indicator: const EndNavigationIndicator(),
|
||||
items: [
|
||||
_createPane("Launcher", FluentIcons.game),
|
||||
_createPane("Server", FluentIcons.server_enviroment),
|
||||
_createPane("Info", FluentIcons.info),
|
||||
],
|
||||
trailing: const WindowTitleBar()),
|
||||
content: FutureBuilder(
|
||||
future: _future,
|
||||
builder: (context, snapshot) {
|
||||
if (snapshot.hasError) {
|
||||
return Center(
|
||||
child: Text(
|
||||
"An error occurred while loading the launcher: ${snapshot.error}",
|
||||
textAlign: TextAlign.center));
|
||||
}
|
||||
|
||||
if (!snapshot.hasData) {
|
||||
return const Center(child: ProgressRing());
|
||||
}
|
||||
|
||||
return NavigationBody(index: _index, children: [
|
||||
LauncherPage(
|
||||
usernameController: _usernameController,
|
||||
versionController: _versionController,
|
||||
rebootController: _rebootController,
|
||||
serverController: _serverController,
|
||||
localController: _localController,
|
||||
gameProcessController: _gameProcessController,
|
||||
startedGameController: _startedGameController,
|
||||
startedServerController: _startedServerController
|
||||
),
|
||||
ServerPage(
|
||||
localController: _localController,
|
||||
hostController: _hostController,
|
||||
portController: _portController,
|
||||
serverController: _serverController,
|
||||
startedServerController: _startedServerController
|
||||
),
|
||||
const InfoPage()
|
||||
]);
|
||||
}),
|
||||
pane: NavigationPane(
|
||||
selected: _index,
|
||||
onChanged: (index) => setState(() => _index = index),
|
||||
displayMode: PaneDisplayMode.top,
|
||||
indicator: const EndNavigationIndicator(),
|
||||
items: [
|
||||
_createPane("Launcher", FluentIcons.game),
|
||||
_createPane("Server", FluentIcons.server_enviroment),
|
||||
_createPane("Info", FluentIcons.info),
|
||||
],
|
||||
trailing: const WindowTitleBar()),
|
||||
content: NavigationBody(
|
||||
index: _index,
|
||||
children: _children
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -10,10 +10,7 @@ class InfoPage extends StatelessWidget {
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
children: [
|
||||
const Expanded(
|
||||
child: SizedBox()
|
||||
),
|
||||
|
||||
const Expanded(child: SizedBox()),
|
||||
Column(
|
||||
children: [
|
||||
const CircleAvatar(
|
||||
@@ -31,13 +28,9 @@ class InfoPage extends StatelessWidget {
|
||||
onPressed: () => launchUrl(Uri.parse(_discordLink))),
|
||||
],
|
||||
),
|
||||
|
||||
const Expanded(
|
||||
child: Align(
|
||||
alignment: Alignment.bottomLeft,
|
||||
child: Text("Version 1.0")
|
||||
)
|
||||
)
|
||||
alignment: Alignment.bottomLeft, child: Text("Version 2.2")))
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,69 +1,33 @@
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:reboot_launcher/src/util/game_process_controller.dart';
|
||||
import 'package:reboot_launcher/src/util/generic_controller.dart';
|
||||
import 'package:reboot_launcher/src/util/version_controller.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:reboot_launcher/src/controller/game_controller.dart';
|
||||
import 'package:reboot_launcher/src/widget/deployment_selector.dart';
|
||||
import 'package:reboot_launcher/src/widget/launch_button.dart';
|
||||
import 'package:reboot_launcher/src/widget/restart_warning.dart';
|
||||
import 'package:reboot_launcher/src/widget/username_box.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import '../widget/version_selector.dart';
|
||||
import 'package:reboot_launcher/src/widget/version_selector.dart';
|
||||
|
||||
import 'package:reboot_launcher/src/controller/warning_controller.dart';
|
||||
|
||||
class LauncherPage extends StatelessWidget {
|
||||
final TextEditingController usernameController;
|
||||
final VersionController versionController;
|
||||
final GenericController<bool> rebootController;
|
||||
final GenericController<Process?> serverController;
|
||||
final GenericController<bool> localController;
|
||||
final GameProcessController gameProcessController;
|
||||
final GenericController<bool> startedGameController;
|
||||
final GenericController<bool> startedServerController;
|
||||
final StreamController _streamController = StreamController();
|
||||
final WarningController _warningController = Get.put(WarningController());
|
||||
final GameController _gameController = Get.put(GameController());
|
||||
|
||||
LauncherPage(
|
||||
{Key? key,
|
||||
required this.usernameController,
|
||||
required this.versionController,
|
||||
required this.rebootController,
|
||||
required this.serverController,
|
||||
required this.localController,
|
||||
required this.gameProcessController,
|
||||
required this.startedGameController,
|
||||
required this.startedServerController})
|
||||
: super(key: key);
|
||||
LauncherPage({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
StreamBuilder(
|
||||
stream: _streamController.stream,
|
||||
builder: (context, snapshot) => UsernameBox(
|
||||
controller: usernameController,
|
||||
rebootController: rebootController)),
|
||||
VersionSelector(
|
||||
controller: versionController,
|
||||
),
|
||||
DeploymentSelector(
|
||||
controller: rebootController,
|
||||
onSelected: () => _streamController.add(null),
|
||||
enabled: true
|
||||
),
|
||||
LaunchButton(
|
||||
usernameController: usernameController,
|
||||
versionController: versionController,
|
||||
rebootController: rebootController,
|
||||
serverController: serverController,
|
||||
localController: localController,
|
||||
gameProcessController: gameProcessController,
|
||||
startedGameController: startedGameController,
|
||||
startedServerController: startedServerController)
|
||||
],
|
||||
);
|
||||
return Obx(() => Column(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
if (_warningController.warning.value) const RestartWarning(),
|
||||
UsernameBox(),
|
||||
VersionSelector(),
|
||||
DeploymentSelector(enabled: true),
|
||||
const LaunchButton()
|
||||
],
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,62 +1,32 @@
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:reboot_launcher/src/util/generic_controller.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:reboot_launcher/src/controller/server_controller.dart';
|
||||
import 'package:reboot_launcher/src/controller/warning_controller.dart';
|
||||
import 'package:reboot_launcher/src/widget/local_server_switch.dart';
|
||||
import 'package:reboot_launcher/src/widget/port_input.dart';
|
||||
|
||||
import '../widget/host_input.dart';
|
||||
import '../widget/server_button.dart';
|
||||
import 'package:reboot_launcher/src/widget/host_input.dart';
|
||||
import 'package:reboot_launcher/src/widget/server_button.dart';
|
||||
|
||||
class ServerPage extends StatefulWidget {
|
||||
final GenericController<bool> localController;
|
||||
final TextEditingController hostController;
|
||||
final TextEditingController portController;
|
||||
final GenericController<Process?> serverController;
|
||||
final GenericController<bool> startedServerController;
|
||||
import 'package:reboot_launcher/src/widget/restart_warning.dart';
|
||||
|
||||
const ServerPage(
|
||||
{Key? key,
|
||||
required this.localController,
|
||||
required this.hostController,
|
||||
required this.serverController,
|
||||
required this.portController,
|
||||
required this.startedServerController})
|
||||
: super(key: key);
|
||||
class ServerPage extends StatelessWidget {
|
||||
final WarningController _warningController = Get.put(WarningController());
|
||||
final ServerController _serverController = Get.put(ServerController());
|
||||
|
||||
@override
|
||||
State<ServerPage> createState() => _ServerPageState();
|
||||
}
|
||||
|
||||
class _ServerPageState extends State<ServerPage> {
|
||||
final StreamController _controller = StreamController.broadcast();
|
||||
ServerPage({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
StreamBuilder(
|
||||
stream: _controller.stream,
|
||||
builder: (context, snapshot) => HostInput(
|
||||
controller: widget.hostController,
|
||||
localController: widget.localController)),
|
||||
StreamBuilder(
|
||||
stream: _controller.stream,
|
||||
builder: (context, snapshot) => PortInput(
|
||||
controller: widget.portController,
|
||||
localController: widget.localController)),
|
||||
LocalServerSwitch(
|
||||
controller: widget.localController,
|
||||
onSelected: (_) => _controller.add(null)),
|
||||
ServerButton(
|
||||
localController: widget.localController,
|
||||
portController: widget.portController,
|
||||
hostController: widget.hostController,
|
||||
serverController: widget.serverController,
|
||||
startController: widget.startedServerController)
|
||||
]);
|
||||
return Obx(() => Column(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
if (_warningController.warning.value) const RestartWarning(),
|
||||
HostInput(),
|
||||
PortInput(),
|
||||
LocalServerSwitch(),
|
||||
ServerButton()
|
||||
]));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user