mirror of
https://github.com/Auties00/Reboot-Launcher.git
synced 2026-01-13 19:22:22 +01:00
refactor
This commit is contained in:
89
gui/lib/src/widget/page/backend/state_toggle.dart
Normal file
89
gui/lib/src/widget/page/backend/state_toggle.dart
Normal file
@@ -0,0 +1,89 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:reboot_common/common.dart';
|
||||
import 'package:reboot_launcher/src/controller/backend_controller.dart';
|
||||
import 'package:reboot_launcher/src/controller/game_controller.dart';
|
||||
import 'package:reboot_launcher/src/controller/hosting_controller.dart';
|
||||
import 'package:reboot_launcher/src/widget/snackbar/snackbar.dart';
|
||||
import 'package:reboot_launcher/src/widget/section/backend/message.dart';
|
||||
import 'package:reboot_launcher/src/util/translations.dart';
|
||||
|
||||
class BackendButton extends StatefulWidget {
|
||||
const BackendButton({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<BackendButton> createState() => _BackendButtonState();
|
||||
}
|
||||
|
||||
class _BackendButtonState extends State<BackendButton> {
|
||||
final GameController _gameController = Get.find<GameController>();
|
||||
final HostingController _hostingController = Get.find<HostingController>();
|
||||
final BackendController _backendController = Get.find<BackendController>();
|
||||
final StreamController<void> _textController = StreamController.broadcast();
|
||||
late final void Function() _listener = () => _textController.add(null);
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
_backendController.port.addListener(_listener);
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_backendController.port.removeListener(_listener);
|
||||
_textController.close();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => Align(
|
||||
alignment: AlignmentDirectional.bottomCenter,
|
||||
child: SizedBox(
|
||||
height: 48,
|
||||
width: double.infinity,
|
||||
child: Button(
|
||||
child: Align(
|
||||
alignment: Alignment.center,
|
||||
child: StreamBuilder(
|
||||
stream: _textController.stream,
|
||||
builder: (context, snapshot) => Obx(() => Text(_text))
|
||||
),
|
||||
),
|
||||
onPressed: () => _backendController.toggle(
|
||||
eventHandler: _onEvent,
|
||||
errorHandler: _onError
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
SnackBar? _onEvent(AuthBackendType type, AuthBackendEvent event) {
|
||||
_backendController.started.value = event.type.isStart && !event.type.isError;
|
||||
if(event.type == AuthBackendEventType.startedImplementation) {
|
||||
_backendController.implementation = event.implementation;
|
||||
}
|
||||
return onBackendResult(type, event);
|
||||
}
|
||||
|
||||
void _onError(String error) {
|
||||
if(_backendController.started.value) {
|
||||
_backendController.stop();
|
||||
_gameController.instance.value?.kill();
|
||||
_hostingController.instance.value?.kill();
|
||||
onBackendError(error);
|
||||
}
|
||||
}
|
||||
|
||||
String get _text {
|
||||
if(_backendController.type.value == AuthBackendType.local
|
||||
&& _backendController.port.text.trim() == kDefaultBackendPort.toString()){
|
||||
return translations.checkServer;
|
||||
}else if(_backendController.started.value){
|
||||
return translations.stopServer;
|
||||
}else {
|
||||
return translations.startServer;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user