diff --git a/lib/main/framework/ui/basic_configuration_tab.dart b/lib/main/framework/ui/basic_configuration_tab.dart index eece9cf..bffd231 100644 --- a/lib/main/framework/ui/basic_configuration_tab.dart +++ b/lib/main/framework/ui/basic_configuration_tab.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:minecraft_server_installer/main/framework/ui/strings.dart'; import 'package:minecraft_server_installer/vanila/adapter/presentation/game_version_view_model.dart'; import 'package:minecraft_server_installer/vanila/framework/ui/game_version_dropdown.dart'; @@ -14,6 +15,12 @@ class _BasicConfigurationTabState extends State { @override Widget build(BuildContext context) { - return const Column(children: [GameVersionDropdown(onChanged: print)]); + return const Column( + children: [ + GameVersionDropdown(onChanged: print), + Spacer(), + ElevatedButton(onPressed: null, child: Text(Strings.buttonStartToInstall)), + ], + ); } } diff --git a/lib/main/framework/ui/strings.dart b/lib/main/framework/ui/strings.dart index c7085f4..25acf60 100644 --- a/lib/main/framework/ui/strings.dart +++ b/lib/main/framework/ui/strings.dart @@ -1,3 +1,4 @@ abstract class Strings { static const fieldGameVersion = '遊戲版本'; + static const buttonStartToInstall = '開始安裝'; } diff --git a/lib/vanila/adapter/gateway/game_version_api_service.dart b/lib/vanila/adapter/gateway/game_version_api_service.dart index 4fbe643..9e3dc1c 100644 --- a/lib/vanila/adapter/gateway/game_version_api_service.dart +++ b/lib/vanila/adapter/gateway/game_version_api_service.dart @@ -1,5 +1,9 @@ +import 'dart:typed_data'; + import 'package:minecraft_server_installer/vanila/domain/entity/game_version.dart'; abstract interface class GameVersionApiService { Future> fetchGameVersionList(); + + Future fetchServerFile(Uri url); } diff --git a/lib/vanila/adapter/gateway/game_version_repository_impl.dart b/lib/vanila/adapter/gateway/game_version_repository_impl.dart index 758105a..c964d56 100644 --- a/lib/vanila/adapter/gateway/game_version_repository_impl.dart +++ b/lib/vanila/adapter/gateway/game_version_repository_impl.dart @@ -9,4 +9,9 @@ class GameVersionRepositoryImpl implements GameVersionRepository { @override Future> getGameVersionList() => _gameVersionApiService.fetchGameVersionList(); + + @override + Future downloadServerFile(GameVersion version, String savePath) async { + final fileBytes = await _gameVersionApiService.fetchServerFile(version.url); + } } diff --git a/lib/vanila/application/repository/game_version_repository.dart b/lib/vanila/application/repository/game_version_repository.dart index 836f45f..bf9d2d5 100644 --- a/lib/vanila/application/repository/game_version_repository.dart +++ b/lib/vanila/application/repository/game_version_repository.dart @@ -2,4 +2,6 @@ import 'package:minecraft_server_installer/vanila/domain/entity/game_version.dar abstract interface class GameVersionRepository { Future> getGameVersionList(); + + Future downloadServerFile(GameVersion version, String savePath); } diff --git a/lib/vanila/application/use_case/download_server_file_use_case.dart b/lib/vanila/application/use_case/download_server_file_use_case.dart new file mode 100644 index 0000000..02b5a34 --- /dev/null +++ b/lib/vanila/application/use_case/download_server_file_use_case.dart @@ -0,0 +1,10 @@ +import 'package:minecraft_server_installer/vanila/application/repository/game_version_repository.dart'; +import 'package:minecraft_server_installer/vanila/domain/entity/game_version.dart'; + +class DownloadServerFileUseCase { + final GameVersionRepository _gameVersionRepository; + + DownloadServerFileUseCase(this._gameVersionRepository); + + Future call(GameVersion version, String savePath) => _gameVersionRepository.downloadServerFile(version, savePath); +} diff --git a/lib/vanila/framework/api/game_version_api_service_impl.dart b/lib/vanila/framework/api/game_version_api_service_impl.dart index 8762e79..5cfc416 100644 --- a/lib/vanila/framework/api/game_version_api_service_impl.dart +++ b/lib/vanila/framework/api/game_version_api_service_impl.dart @@ -1,3 +1,5 @@ +import 'dart:typed_data'; + import 'package:http/http.dart' as http; import 'package:minecraft_server_installer/vanila/adapter/gateway/game_version_api_service.dart'; import 'package:minecraft_server_installer/vanila/domain/entity/game_version.dart'; @@ -17,4 +19,10 @@ class GameVersionApiServiceImpl implements GameVersionApiService { return gameVersionList; } + + @override + Future fetchServerFile(Uri url) async { + final response = await http.get(url); + return response.bodyBytes; + } }