From 1096e06e89aba8e7b1b6f8c80fdc8083d3f0370f Mon Sep 17 00:00:00 2001 From: nek9o <149204931+nek9o@users.noreply.github.com> Date: Tue, 19 May 2026 06:05:05 +0900 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=E8=A9=B3=E7=B4=B0=E8=A8=AD?= =?UTF-8?q?=E5=AE=9A=E3=81=AE=E6=B0=B8=E7=B6=9A=E5=8C=96=E3=81=8A=E3=82=88?= =?UTF-8?q?=E3=81=B3API=20URL=E4=BF=9D=E5=AD=98=E6=BC=8F=E3=82=8C=E3=81=AE?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - GenerationSettings(生成パラメータ)のローカル保存に対応 - GenerationSettings モデルに `fromMap` / `toMap` メソッドを追加 - LayoutPreferences に `getGenerationSettings` / `setGenerationSettings` メソッドを追加し、SharedPreferences へのシリアライズ処理を実装 - GenerationSettingsNotifier の初期化時に保存済みデータをロードし、状態が変更されるたびに自動で SharedPreferences へ保存するよう `state` セッターをオーバーライド - API URL が一部の画面から変更された際に保存されない不具合を修正 - 詳細設定ダイアログ(DetailedSettingsDialog)およびプレビューペイン(PreviewPane)の API URL 変更時にも `LayoutPreferences.setApiUrl()` を実行するように保存処理を追加 --- lib/core/layout_preferences.dart | 19 ++++++++ lib/features/preview/ui/preview_pane.dart | 1 + .../settings/models/generation_settings.dart | 44 +++++++++++++++++++ .../settings/store/settings_store.dart | 17 ++++++- .../settings/ui/detailed_settings_dialog.dart | 2 + 5 files changed, 82 insertions(+), 1 deletion(-) diff --git a/lib/core/layout_preferences.dart b/lib/core/layout_preferences.dart index 8a822f4..94ea57c 100644 --- a/lib/core/layout_preferences.dart +++ b/lib/core/layout_preferences.dart @@ -119,6 +119,25 @@ class LayoutPreferences { await _prefs?.setString(_apiUrlKey, url); } + // Generation Settings + static Map? getGenerationSettings() { + final jsonString = _prefs?.getString('generation_settings'); + if (jsonString != null) { + try { + return json.decode(jsonString) as Map; + } catch (e) { + return null; + } + } + return null; + } + + static Future setGenerationSettings(Map settings) async { + await init(); + final jsonString = json.encode(settings); + await _prefs?.setString('generation_settings', jsonString); + } + // Clear all preferences static Future clearAll() async { await init(); diff --git a/lib/features/preview/ui/preview_pane.dart b/lib/features/preview/ui/preview_pane.dart index 6f6706f..dc690c4 100644 --- a/lib/features/preview/ui/preview_pane.dart +++ b/lib/features/preview/ui/preview_pane.dart @@ -752,6 +752,7 @@ class _PreviewPaneState extends ConsumerState { initial: TextEditingValue(text: ref.read(apiUrlProvider)), onChange: (value) { ref.read(apiUrlProvider.notifier).state = value.text; + LayoutPreferences.setApiUrl(value.text); }, ), ), diff --git a/lib/features/settings/models/generation_settings.dart b/lib/features/settings/models/generation_settings.dart index 6a82f20..03aa51d 100644 --- a/lib/features/settings/models/generation_settings.dart +++ b/lib/features/settings/models/generation_settings.dart @@ -114,4 +114,48 @@ class GenerationSettings { return map; } + + factory GenerationSettings.fromMap(Map map) { + return GenerationSettings( + samplerName: map['samplerName'] as String? ?? 'Euler a', + width: map['width'] as int? ?? 512, + height: map['height'] as int? ?? 512, + steps: map['steps'] as int? ?? 20, + cfgScale: (map['cfgScale'] as num?)?.toDouble() ?? 7.0, + seed: map['seed'] as int? ?? -1, + scheduler: map['scheduler'] as String? ?? 'Automatic', + saveImages: map['saveImages'] as bool? ?? true, + batchSize: map['batchSize'] as int? ?? 1, + batchCount: map['batchCount'] as int? ?? 1, + sdMode: map['sdMode'] as String? ?? 'SD', + uiDebugMode: map['uiDebugMode'] as bool? ?? false, + enableHires: map['enableHires'] as bool? ?? false, + hiresUpscaler: map['hiresUpscaler'] as String?, + hiresSteps: map['hiresSteps'] as int? ?? 20, + denoisingStrength: (map['denoisingStrength'] as num?)?.toDouble() ?? 0.7, + hrScale: (map['hrScale'] as num?)?.toDouble() ?? 2.0, + ); + } + + Map toMap() { + return { + 'samplerName': samplerName, + 'width': width, + 'height': height, + 'steps': steps, + 'cfgScale': cfgScale, + 'seed': seed, + 'scheduler': scheduler, + 'saveImages': saveImages, + 'batchSize': batchSize, + 'batchCount': batchCount, + 'sdMode': sdMode, + 'uiDebugMode': uiDebugMode, + 'enableHires': enableHires, + 'hiresUpscaler': hiresUpscaler, + 'hiresSteps': hiresSteps, + 'denoisingStrength': denoisingStrength, + 'hrScale': hrScale, + }; + } } diff --git a/lib/features/settings/store/settings_store.dart b/lib/features/settings/store/settings_store.dart index f30441a..e735044 100644 --- a/lib/features/settings/store/settings_store.dart +++ b/lib/features/settings/store/settings_store.dart @@ -7,6 +7,7 @@ import '../models/sampler.dart'; import '../models/scheduler.dart'; import '../models/sd_model.dart'; import '../models/upscaler.dart'; +import '../../../core/layout_preferences.dart'; final sdModelsProvider = FutureProvider>((ref) async { final client = ref.watch(forgeApiClientProvider); @@ -36,7 +37,21 @@ final upscalersProvider = FutureProvider>((ref) async { final selectedModelProvider = StateProvider((ref) => null); class GenerationSettingsNotifier extends StateNotifier { - GenerationSettingsNotifier() : super(GenerationSettings()); + GenerationSettingsNotifier() : super(_loadInitialSettings()); + + static GenerationSettings _loadInitialSettings() { + final saved = LayoutPreferences.getGenerationSettings(); + if (saved != null) { + return GenerationSettings.fromMap(saved); + } + return GenerationSettings(); + } + + @override + set state(GenerationSettings value) { + super.state = value; + LayoutPreferences.setGenerationSettings(value.toMap()); + } void updateSampler(String sampler) { state = state.copyWith(samplerName: sampler); diff --git a/lib/features/settings/ui/detailed_settings_dialog.dart b/lib/features/settings/ui/detailed_settings_dialog.dart index d995664..d6bdd67 100644 --- a/lib/features/settings/ui/detailed_settings_dialog.dart +++ b/lib/features/settings/ui/detailed_settings_dialog.dart @@ -3,6 +3,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:forui/forui.dart'; import '../../../core/l10n.dart'; +import '../../../core/layout_preferences.dart'; import '../../../core/providers.dart'; import '../store/settings_store.dart'; @@ -36,6 +37,7 @@ class DetailedSettingsDialog extends ConsumerWidget { initial: TextEditingValue(text: ref.read(apiUrlProvider)), onChange: (value) { ref.read(apiUrlProvider.notifier).state = value.text; + LayoutPreferences.setApiUrl(value.text); }, ), ), From cc3806e75a5ebe6576a25ca2a90685725c9ffc22 Mon Sep 17 00:00:00 2001 From: nek9o <149204931+nek9o@users.noreply.github.com> Date: Tue, 19 May 2026 06:32:19 +0900 Subject: [PATCH 2/5] =?UTF-8?q?fix(ci):=20Windows=E3=83=93=E3=83=AB?= =?UTF-8?q?=E3=83=89=E3=81=AB=E3=81=8A=E3=81=91=E3=82=8BSDK=E8=A7=A3?= =?UTF-8?q?=E6=B1=BA=E3=81=AE=E5=84=AA=E5=85=88=E5=BA=A6=E3=81=A8AOT?= =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=83=91=E3=82=A4=E3=83=AB=E3=82=A8=E3=83=A9?= =?UTF-8?q?=E3=83=BC=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Setup Flutter ステップに stable チャンネルの指定を追加 - ランナーにプリインストールされている別の Flutter/Dart SDK への解決を防止するため、環境変数 FLUTTER_ROOT と PATH の上書き処理を追加 - 依存パッケージの AOT コンパイル制限(final クラス制約)に対し、正しい Flutter 3.41.1 (stable) SDK でのビルドを強制して解決 --- .github/workflows/auto-release.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/auto-release.yml b/.github/workflows/auto-release.yml index 147f546..bf5ca64 100644 --- a/.github/workflows/auto-release.yml +++ b/.github/workflows/auto-release.yml @@ -45,6 +45,7 @@ jobs: - name: Setup Flutter uses: subosito/flutter-action@v2 with: + channel: 'stable' flutter-version: "3.41.1" - name: Enable Windows Desktop @@ -77,7 +78,16 @@ jobs: run: flutter pub get - name: Build Windows (includes License Generation) - run: dart run rps build:windows + shell: pwsh + run: | + # Ensure correct Flutter/Dart SDK resolution from subosito/flutter-action + if ($env:FLUTTER_HOME) { + $env:FLUTTER_ROOT = $env:FLUTTER_HOME + $env:PATH = "$env:FLUTTER_ROOT\bin;$env:FLUTTER_ROOT\bin\cache\dart-sdk\bin;" + $env:PATH + } + flutter config --enable-windows-desktop + flutter pub run rps gen + flutter build windows --release - name: Create Zip Archive shell: pwsh From 1d11405891d2abccf1985337a7f19b6e29a4ff61 Mon Sep 17 00:00:00 2001 From: nek9o <149204931+nek9o@users.noreply.github.com> Date: Tue, 19 May 2026 06:48:58 +0900 Subject: [PATCH 3/5] =?UTF-8?q?fix(ci):=20GitHub=20Actions=E3=81=A7?= =?UTF-8?q?=E3=81=AEFlutter=20SDK=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7?= =?UTF-8?q?=E3=83=B3=E5=BC=B7=E5=88=B6=E3=81=A8AOT=E3=82=B3=E3=83=B3?= =?UTF-8?q?=E3=83=91=E3=82=A4=E3=83=AB=E3=82=A8=E3=83=A9=E3=83=BC=E3=81=AE?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - subosito/flutter-action が指定されたバージョン(3.41.1)を無視して最新バージョンを解決してしまう問題を修正 - 安定版の Flutter 3.41.1 SDK を公式の Google Storage アーカイブから直接ダウンロードして展開する手動セットアップへ変更 - PATH を明示的に設定し、依存パッケージ(forui, phosphor_flutter)の final クラス制約に伴う AOT コンパイルエラーを完全に解消 --- .github/workflows/auto-release.yml | 37 ++++++++++++++++++------------ 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/.github/workflows/auto-release.yml b/.github/workflows/auto-release.yml index bf5ca64..ee2b0cd 100644 --- a/.github/workflows/auto-release.yml +++ b/.github/workflows/auto-release.yml @@ -43,13 +43,28 @@ jobs: echo "Generated version: ${version}" - name: Setup Flutter - uses: subosito/flutter-action@v2 - with: - channel: 'stable' - flutter-version: "3.41.1" + shell: pwsh + run: | + # subosito/flutter-action がバージョン指定を無視する問題を回避するため、 + # 公式アーカイブから直接 Flutter SDK をダウンロード・展開する + $flutterVersion = "3.41.1" + $flutterUrl = "https://storage.googleapis.com/flutter_infra_release/releases/stable/windows/flutter_windows_${flutterVersion}-stable.zip" + $installDir = "C:\flutter-sdk" + + Write-Host "Flutter SDK ${flutterVersion} をダウンロード中..." + Invoke-WebRequest -Uri $flutterUrl -OutFile flutter.zip -UseBasicParsing - - name: Enable Windows Desktop - run: flutter config --enable-windows-desktop + Write-Host "展開中..." + Expand-Archive flutter.zip -DestinationPath $installDir -Force + Remove-Item flutter.zip + + # PATH に追加(flutter/bin と dart-sdk/bin) + $flutterBin = "$installDir\flutter\bin" + echo $flutterBin | Out-File -FilePath $env:GITHUB_PATH -Append + + # バージョン確認 + & "$flutterBin\flutter.bat" --version + & "$flutterBin\flutter.bat" config --enable-windows-desktop - name: Update Version Files shell: pwsh @@ -78,16 +93,8 @@ jobs: run: flutter pub get - name: Build Windows (includes License Generation) - shell: pwsh run: | - # Ensure correct Flutter/Dart SDK resolution from subosito/flutter-action - if ($env:FLUTTER_HOME) { - $env:FLUTTER_ROOT = $env:FLUTTER_HOME - $env:PATH = "$env:FLUTTER_ROOT\bin;$env:FLUTTER_ROOT\bin\cache\dart-sdk\bin;" + $env:PATH - } - flutter config --enable-windows-desktop - flutter pub run rps gen - flutter build windows --release + dart run rps build:windows - name: Create Zip Archive shell: pwsh From 958fa3f9ca45fdf1b62fe2bd8a4321720e2417d9 Mon Sep 17 00:00:00 2001 From: nek9o <149204931+nek9o@users.noreply.github.com> Date: Tue, 19 May 2026 07:01:55 +0900 Subject: [PATCH 4/5] =?UTF-8?q?fix(ci):=20=E3=83=80=E3=82=A6=E3=83=B3?= =?UTF-8?q?=E3=83=AD=E3=83=BC=E3=83=89=E3=81=97=E3=81=9F=E3=80=8C3.41.1?= =?UTF-8?q?=E3=80=8D=E3=81=AE=20Flutter=20=E3=81=A8=20Dart=20SDK=20?= =?UTF-8?q?=E3=81=AE=E4=B8=A1=E6=96=B9=E3=81=AE=E3=83=91=E3=82=B9=E3=82=92?= =?UTF-8?q?GitHub=20Actions=E3=81=AE=E7=92=B0=E5=A2=83=E5=85=A8=E4=BD=93?= =?UTF-8?q?=E3=81=AB=E6=9C=80=E5=84=AA=E5=85=88=E3=81=A7=E7=99=BB=E9=8C=B2?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/auto-release.yml | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/.github/workflows/auto-release.yml b/.github/workflows/auto-release.yml index ee2b0cd..51158f7 100644 --- a/.github/workflows/auto-release.yml +++ b/.github/workflows/auto-release.yml @@ -45,8 +45,7 @@ jobs: - name: Setup Flutter shell: pwsh run: | - # subosito/flutter-action がバージョン指定を無視する問題を回避するため、 - # 公式アーカイブから直接 Flutter SDK をダウンロード・展開する + # プリインストールのFlutter(3.44.0)との競合を避けるため、公式アーカイブから直接取得 $flutterVersion = "3.41.1" $flutterUrl = "https://storage.googleapis.com/flutter_infra_release/releases/stable/windows/flutter_windows_${flutterVersion}-stable.zip" $installDir = "C:\flutter-sdk" @@ -58,14 +57,21 @@ jobs: Expand-Archive flutter.zip -DestinationPath $installDir -Force Remove-Item flutter.zip - # PATH に追加(flutter/bin と dart-sdk/bin) - $flutterBin = "$installDir\flutter\bin" - echo $flutterBin | Out-File -FilePath $env:GITHUB_PATH -Append - - # バージョン確認 + $flutterRoot = "$installDir\flutter" + $flutterBin = "$flutterRoot\bin" + + # 環境変数 FLUTTER_ROOT を上書き + echo "FLUTTER_ROOT=$flutterRoot" | Out-File -FilePath $env:GITHUB_ENV -Append + + # flutter.bat --version を実行して dart-sdk などを初期化 & "$flutterBin\flutter.bat" --version & "$flutterBin\flutter.bat" config --enable-windows-desktop + # PATH に flutter\bin と dart-sdk\bin を両方追加して最優先にする + $dartBin = "$flutterRoot\bin\cache\dart-sdk\bin" + echo $flutterBin | Out-File -FilePath $env:GITHUB_PATH -Append + echo $dartBin | Out-File -FilePath $env:GITHUB_PATH -Append + - name: Update Version Files shell: pwsh run: | From ccd1a8ad151db99731c7dc62553c16794ba2e7fc Mon Sep 17 00:00:00 2001 From: nek9o <149204931+nek9o@users.noreply.github.com> Date: Tue, 19 May 2026 07:11:39 +0900 Subject: [PATCH 5/5] =?UTF-8?q?fix(ci):=20PR=E7=94=A8=E3=83=93=E3=83=AB?= =?UTF-8?q?=E3=83=89=E3=83=AF=E3=83=BC=E3=82=AF=E3=83=95=E3=83=AD=E3=83=BC?= =?UTF-8?q?=E3=81=AB=E3=82=82Flutter=203.41.1=E3=81=AE=E6=89=8B=E5=8B=95?= =?UTF-8?q?=E3=82=BB=E3=83=83=E3=83=88=E3=82=A2=E3=83=83=E3=83=97=E3=82=92?= =?UTF-8?q?=E9=81=A9=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/windows-build.yml | 33 ++++++++++++++++++++++++----- .gitignore | 1 + 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/.github/workflows/windows-build.yml b/.github/workflows/windows-build.yml index 5c5fbf1..d7b3a8b 100644 --- a/.github/workflows/windows-build.yml +++ b/.github/workflows/windows-build.yml @@ -9,12 +9,35 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: subosito/flutter-action@v2 - with: - channel: "stable" + - name: Setup Flutter + shell: pwsh + run: | + # プリインストールのFlutter(3.44.0)との競合を避けるため、公式アーカイブから直接取得 + $flutterVersion = "3.41.1" + $flutterUrl = "https://storage.googleapis.com/flutter_infra_release/releases/stable/windows/flutter_windows_${flutterVersion}-stable.zip" + $installDir = "C:\flutter-sdk" + + Write-Host "Flutter SDK ${flutterVersion} をダウンロード中..." + Invoke-WebRequest -Uri $flutterUrl -OutFile flutter.zip -UseBasicParsing + + Write-Host "展開中..." + Expand-Archive flutter.zip -DestinationPath $installDir -Force + Remove-Item flutter.zip + + $flutterRoot = "$installDir\flutter" + $flutterBin = "$flutterRoot\bin" + + # 環境変数 FLUTTER_ROOT を上書き + echo "FLUTTER_ROOT=$flutterRoot" | Out-File -FilePath $env:GITHUB_ENV -Append + + # flutter.bat --version を実行して dart-sdk などを初期化 + & "$flutterBin\flutter.bat" --version + & "$flutterBin\flutter.bat" config --enable-windows-desktop - - name: Enable Windows Desktop - run: flutter config --enable-windows-desktop + # PATH に flutter\bin と dart-sdk\bin を両方追加して最優先にする + $dartBin = "$flutterRoot\bin\cache\dart-sdk\bin" + echo $flutterBin | Out-File -FilePath $env:GITHUB_PATH -Append + echo $dartBin | Out-File -FilePath $env:GITHUB_PATH -Append - name: Install Dependencies run: flutter pub get diff --git a/.gitignore b/.gitignore index 5c1fcde..cf19654 100644 --- a/.gitignore +++ b/.gitignore @@ -70,3 +70,4 @@ temp_diff.txt .env docs/comfyui_migration_analysis* full_history.patch +logs_69598121678