Flet の環境構築と基礎 (実行・ページ遷移)
Flutter を Python で使用できる Flet について, 基本的な使い方の覚え書き
検証環境
- Windows 11 Home
- Python 3.11.5
Flutter・Flet とは
- Flutter は, Google が開発したプログラミング言語 dart を用いてアプリ作成が可能なフレームワークで, マルチプラットフォームの開発が可能 (モバイル・Web アプリ・Windows 等ネイティブアプリに対応)
- アプリのデバッグが非常に簡単で, 手軽にマルチプラットフォームのアプリが作成できる便利なフレームワーク
- Flet は Flutter を Python で使用可能にするもの
インストール
- pip で簡単にインストール可能
pip install flet
- 今回は venv で構築
- 公式ドキュメント では Poetry, uv を用いた環境構築の手段も掲載されている (uv は初めて聞いたが Rust を用いて実装された高速なパッケージ管理ツールらしい)
最小限のアプリの作成
- 以下のコマンドで最小限のアプリ構成を作れる
flet create $DIR
$DIRには出力先のディレクトリ名を入れる
実行
runコマンドで実行可能
flet run
main.pyが実行されて GUI が表示される
ホットリロードについて
- Flutter の特徴の一つで, 実行中にコードの変更を反映するホットリロードがある (いちいち実行しなおす必要がない)
- Flet においては実行中にソースファイルを書き換えセーブするとホットリロードされる
ページ遷移の実装
page と view について
- flet では一つの Page というコンテナに複数の View を用意することでページ遷移を実装するのがベターらしい (Navigation and Routing)
それぞれの view の作成
- 今回はそれぞれのページの View を返す関数を実装
def main_page_view(page: ft.Page): return ft.View( "/", controls=[ ft.SafeArea(ft.Text("Hello, FletApp!")), ft.ElevatedButton("to test", on_click=lambda _: page.go("/test")) ], appbar=ft.AppBar( title=ft.Text( value="Flet App", size=32, text_align="center", color=ft.colors.BLACK ), bgcolor=ft.colors.GREEN_200 ) ) def test_page(): return ft.View( "/test", controls=[ ft.Text("Test Page!") ], appbar=ft.AppBar( title=ft.Text( value="Test", size=32, text_align="center", color=ft.colors.BLACK ), bgcolor=ft.colors.GREEN_200 ) )
ページ遷移は
page.goで実装main関数の中でルーティングを設定
def main(page: ft.Page): def route_change(e): page.views.clear() # routing if page.route == "/": page.views.append(main_page_view(page)) elif page.route == "/test": page.views.append(test_page()) # update page.update() page.on_route_change = route_change page.go("/") # home page
- ページ遷移ごとに
route_chageが呼び出され, それぞれのページの関数が返す View を表示する
その他
- 基本的には Flutter でできることは大体できそう
- 実行速度は測っていないが, PC 環境では遅くは感じない
- numpy や matplotlib などを使いたいときは Flutter より便利かもしれない (上記のライブラリは動くみたい)
- Riverpod などの Flutter における状態管理用ライブラリは使用できないらしいので, 複雑なアプリケーションの作成は Flutter とは異なる方法で実装する必要がありそう