MCSI-1 refactor: move bloc higher layer

This commit is contained in:
SquidSpirit 2025-06-29 11:58:45 +08:00
parent e8ad6592f5
commit 05744c37c3
2 changed files with 17 additions and 27 deletions

View File

@ -1,16 +1,28 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:minecraft_server_installer/main/framework/ui/basic_configuration_tab.dart'; import 'package:minecraft_server_installer/main/framework/ui/basic_configuration_tab.dart';
import 'package:minecraft_server_installer/vanila/adapter/gateway/game_version_repository_impl.dart';
import 'package:minecraft_server_installer/vanila/adapter/presentation/game_version_bloc.dart';
import 'package:minecraft_server_installer/vanila/application/use_case/get_game_version_list_use_case.dart';
import 'package:minecraft_server_installer/vanila/framework/api/game_version_api_service_impl.dart';
class MinecraftServerInstaller extends StatelessWidget { class MinecraftServerInstaller extends StatelessWidget {
const MinecraftServerInstaller({super.key}); const MinecraftServerInstaller({super.key});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final gameVersionApiService = GameVersionApiServiceImpl();
final gameVersionRepository = GameVersionRepositoryImpl(gameVersionApiService);
final getGameVersionListUseCase = GetGameVersionListUseCase(gameVersionRepository);
return MaterialApp( return MaterialApp(
title: 'Minecraft Server Installer', title: 'Minecraft Server Installer',
theme: ThemeData(primarySwatch: Colors.blue), theme: ThemeData(primarySwatch: Colors.blue),
home: const Scaffold( home: MultiBlocProvider(
body: Padding(padding: EdgeInsets.symmetric(horizontal: 24, vertical: 32), child: BasicConfigurationTab()), providers: [BlocProvider<GameVersionBloc>(create: (context) => GameVersionBloc(getGameVersionListUseCase))],
child: const Scaffold(
body: Padding(padding: EdgeInsets.symmetric(horizontal: 24, vertical: 32), child: BasicConfigurationTab()),
),
), ),
); );
} }

View File

@ -1,41 +1,19 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:minecraft_server_installer/main/framework/ui/strings.dart'; import 'package:minecraft_server_installer/main/framework/ui/strings.dart';
import 'package:minecraft_server_installer/vanila/adapter/gateway/game_version_repository_impl.dart';
import 'package:minecraft_server_installer/vanila/adapter/presentation/game_version_bloc.dart'; import 'package:minecraft_server_installer/vanila/adapter/presentation/game_version_bloc.dart';
import 'package:minecraft_server_installer/vanila/adapter/presentation/game_version_view_model.dart'; import 'package:minecraft_server_installer/vanila/adapter/presentation/game_version_view_model.dart';
import 'package:minecraft_server_installer/vanila/application/use_case/get_game_version_list_use_case.dart';
import 'package:minecraft_server_installer/vanila/framework/api/game_version_api_service_impl.dart';
class GameVersionDropdown extends StatelessWidget { class GameVersionDropdown extends StatefulWidget {
const GameVersionDropdown({super.key, required this.onChanged}); const GameVersionDropdown({super.key, required this.onChanged});
final void Function(GameVersionViewModel?) onChanged; final void Function(GameVersionViewModel?) onChanged;
@override @override
Widget build(BuildContext context) { State<GameVersionDropdown> createState() => _GameVersionDropdownState();
return BlocProvider<GameVersionBloc>(
create: (_) {
final gameVersionApiService = GameVersionApiServiceImpl();
final gameVersionRepository = GameVersionRepositoryImpl(gameVersionApiService);
final getGameVersionListUseCase = GetGameVersionListUseCase(gameVersionRepository);
return GameVersionBloc(getGameVersionListUseCase);
},
child: _GameVersionDropdown(key: key, onChanged: onChanged),
);
}
} }
class _GameVersionDropdown extends StatefulWidget { class _GameVersionDropdownState extends State<GameVersionDropdown> {
const _GameVersionDropdown({super.key, required this.onChanged});
final void Function(GameVersionViewModel?) onChanged;
@override
State<_GameVersionDropdown> createState() => _GameVersionDropdownState();
}
class _GameVersionDropdownState extends State<_GameVersionDropdown> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();