MCSI-3 Custom RAM size option #24

Merged
squid merged 4 commits from MCSI-3_custom_ram_size_option into main 2025-07-11 01:39:54 +08:00
Showing only changes of commit e86781c9a3 - Show all commits

View File

@ -6,35 +6,17 @@ import 'package:minecraft_server_installer/main/adapter/presentation/installatio
import 'package:minecraft_server_installer/main/adapter/presentation/installation_state.dart'; import 'package:minecraft_server_installer/main/adapter/presentation/installation_state.dart';
import 'package:minecraft_server_installer/main/framework/ui/strings.dart'; import 'package:minecraft_server_installer/main/framework/ui/strings.dart';
class PathBrowsingField extends StatefulWidget { class PathBrowsingField extends StatelessWidget {
const PathBrowsingField({super.key}); const PathBrowsingField({super.key});
@override
State<PathBrowsingField> createState() => _PathBrowsingFieldState();
}
class _PathBrowsingFieldState extends State<PathBrowsingField> {
final _textEditingController = TextEditingController();
@override
void initState() {
super.initState();
_textEditingController.text = context.read<InstallationBloc>().state.savePath ?? '';
}
@override @override
Widget build(BuildContext context) => BlocConsumer<InstallationBloc, InstallationState>( Widget build(BuildContext context) => BlocConsumer<InstallationBloc, InstallationState>(
listener: (_, state) { listener: (_, __) {},
if (state.savePath != null) { builder: (_, state) => Row(
_textEditingController.text = state.savePath!;
}
},
builder: (_, __) => Row(
children: [ children: [
Expanded( Expanded(
child: TextField( child: TextField(
controller: _textEditingController, controller: TextEditingController(text: state.savePath ?? ''),
readOnly: true, readOnly: true,
canRequestFocus: false, canRequestFocus: false,
decoration: InputDecoration( decoration: InputDecoration(
@ -47,7 +29,7 @@ class _PathBrowsingFieldState extends State<PathBrowsingField> {
SizedBox( SizedBox(
height: 48, height: 48,
child: OutlinedButton( child: OutlinedButton(
onPressed: _browseDirectory, onPressed: () => _browseDirectory(context, initialPath: state.savePath),
style: OutlinedButton.styleFrom( style: OutlinedButton.styleFrom(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(4)), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(4)),
), ),
@ -58,13 +40,14 @@ class _PathBrowsingFieldState extends State<PathBrowsingField> {
), ),
); );
Future<void> _browseDirectory() async { Future<void> _browseDirectory(BuildContext context, {String? initialPath}) async {
final hasInitialPath = initialPath?.isNotEmpty ?? false;
final directory = await FilePicker.platform.getDirectoryPath( final directory = await FilePicker.platform.getDirectoryPath(
dialogTitle: Strings.dialogTitleSelectDirectory, dialogTitle: Strings.dialogTitleSelectDirectory,
initialDirectory: _textEditingController.text.isNotEmpty ? _textEditingController.text : null, initialDirectory: hasInitialPath ? initialPath : null,
); );
if (!mounted || directory == null) { if (!context.mounted || directory == null) {
return; return;
} }