FletでWindows向けビルドが失敗する
Fletのトラブルシューティング記事です。
Fletを使ってWindowsアプリを作っていたところ、theme.dartが原因でビルドエラーが出てしまいました。
Fletのバージョン依存の問題らしく、回避のために記事にしておこうと思います。
Flet
Fletとは、Pythonを利用してGUIアプリケーションを開発するためのフレームワークです。
- Python言語で完結すること
- クロスプラットフォーム(モバイル、ウェブ、デスクトップ)
この2点を大きな特徴としています。中身はFlutterのため、モダンなUIを持ち、ホットリードが可能です。
アプリをさっと作って動かすだけであればpip installだけで準備ができるため、環境構築もカンタンです。
ただし、まだバージョン1.0を迎えていないため、利用する際には注意が必要です。
ビルドエラー
今回発生したエラーの抜粋です。
../../../../../../AppData/Local/Pub/Cache/hosted/pub.dev/flet-0.25.2/lib/src/utils/theme.dart(356,28): error G44692867: A value of type 'TabBarThemeData' can't be returned from a function with return type
'TabBarTheme?'. [C:MYPROJECT\build\flutter\build\windows\x64\flutter\flutter_assemble.vcxproj]
../../../../../../AppData/Local/Pub/Cache/hosted/pub.dev/flet-0.25.2/lib/src/utils/theme.dart(438,28): error G44692867: A value of type 'DialogThemeData' can't be returned from a function with return type
'DialogTheme?'. [C:MYPROJECT\build\flutter\build\windows\x64\flutter\flutter_assemble.vcxproj]
../../../../../../AppData/Local/Pub/Cache/hosted/pub.dev/flet-0.25.2/lib/src/utils/theme.dart(482,26): error G44692867: A value of type 'CardThemeData' can't be returned from a function with return type
'CardTheme?'. [C:MYPROJECT\build\flutter\build\windows\x64\flutter\flutter_assemble.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(254,5): error MSB8066:
'C:MYPROJECT\build\flutter\build\windows\x64\CMakeFiles\7709877bbcac1fac002d182c7d3db39e\flutter_windows.dll.rule;C:MYPROJECT\build
\flutter\build\windows\x64\CMakeFiles\7bf40fe8777649bc7ee9e5f4af6acc77\flutter_assemble.rule' のカスタム ビルドがコード 1 で終了しました。
[C:MYPROJECT\build\flutter\build\windows\x64\flutter\flutter_assemble.vcxproj]
Build process failed.
theme.dartでエラーが発生しています。Fletを使っているだけであれば、通常は意識しないファイルです。
TabBarThemeDataやDialogThemeDataがどうこうとメッセージが表示されていますが、このプロジェクトでは使っていません。
ちなみに、環境は以下の通りです。
OS | Windows 11 |
Pythonバージョン | 3.12.8 |
Fletバージョン | 0.25.2 |
原因
結論の繰り返しになりますが、Fletのバージョン0.25.2に由来する問題です。redditに同じエラーに遭遇した方がいました。
24/12/14から25/1/27の間にFletをインストールした環境の場合、今回のエラーを踏んでいる可能性があります。
バージョン | リリース日 |
---|---|
v0.25.1 | 2024/11/30 |
v0.25.2 | 2024/12/14 |
v0.26.0 | 2025/1/27 |
対処方法
0.25.2に変わる別のバージョンをインストールします。
インストール可能なバージョンの確認
# 25/1/28時点
$ pip index versions flet
WARNING: pip index is currently an experimental command. It may be removed/changed in a future release without prior warning.
flet (0.26.0)
Available versions: 0.26.0, 0.25.2, 0.25.1, 0.25.0, 0.24.1, 0.24.0, 0.23.2, 0.23.1, 0.23.0, 0.22.1, 0.22.0, 0.21.2, 0.19.0, 0.18.0, 0.17.0, 0.16.0, 0.15.0, 0.14.0, 0.13.0, 0.12.2, 0.12.1, 0.12.0, 0.11.0, 0.10.3, 0.10.2, 0.10.1, 0.10.0, 0.9.0, 0.1.65, 0.1.64, 0.1.63, 0.1.62, 0.1.61, 0.1.60, 0.1.59, 0.1.58, 0.1.57, 0.1.56, 0.1.0
INSTALLED: 0.25.2
LATEST: 0.26.0
次のバージョンである0.26.0をインストールすることにします。
対象パッケージの確認
$ pip list | grep flet
flet 0.25.2
flet-cli 0.25.2
flet-desktop 0.25.2
flet-web 0.25.2
私の環境では4つ見つかりました。これ以外に見つかった場合も、まとめてバージョンアップしてしまうのが良いかと思います。
※fletのみ0.26.0に更新するとバージョンの不整合が起きます
バージョンを指定してインストール
問題のあるバージョンをインストールしないよう、requirements.txtを更新しておきます。
# requirement.txt
flet >= 0.26.0
flet-cli >= 0.26.0
flet-desktop >= 0.26.0
flet-web >= 0.26.0
requirements.txtを利用してインストール
pip install -r requirement.txt
ビルド
通常通りビルドします。
$ flet build windows
[20:45:58] Created Flutter bootstrap project from gh:flet-dev/flet-build-template with ref "0.26.0" ✅
[20:47:10] Packaged Python app ✅
[20:47:12] Customized app icons and splash images ✅
[20:47:20] Generated app icons ✅
[20:49:18] Built Windows app ✅
[20:49:19] Copied build to build\windows directory ✅
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Successfully built your Windows app! 🥳 Find it in build\windows directory. 📁
他に問題がなければ、この通り成功するはずです。
補足
そもそもビルドが成功したことがない場合、以下を確認してみると良いかもしれません。
- Visual Studio Code 2022が必要
- “C++によるデスクトップ開発”というワークロードが必要
- Windowsの開発者モードをオンにする必要がある
- システム > 開発者向け > 開発者モード を”オン”
- 必要なパッケージがインストールされているか
- 意図せず別のvenvを使っていたりして…
以上です。