こちらの続きです。
FletでReactチュートリアルを真似る4 - C#ATIA
そうか、と思い書き換えました。
#python import flet as ft from state import State class Square(ft.UserControl): def __init__(self): super().__init__(self) self.state = State(None) self.square = ft.ElevatedButton( '', width = 30, height = 30, bgcolor = ft.colors.BLUE_100, style = ft.ButtonStyle( shape=ft.RoundedRectangleBorder(radius=0), padding = 1, ), on_click = self.on_click_handler ) self.state.bind(self.on_change_handler) def build(self): return self.square def on_click_handler(self, e): self.state.set('X') def on_change_handler(self): txt = self.state.get() self.square.text = txt self.update()
ボタン(監視されるもの)1個に付き、1個のStateインスタンスにしました。
変更なければon_change_handler呼び出されないですし、スコープの
大きいStateインスタンスが不要になりました。
(コンストラクタの”どのボタンか?”を判断するインデックスも不要)
うーん、そもそもクリックされて自身が変化するだけなので、ここまで
やる必要も無いのも事実なのですが、勉強の為だと言い聞かせてます。
但し、Stateのリフトアップする際、やっぱり戻すような気もしなくもない。
スコープの大きいStateインスタンスのリストさえあれば大丈夫かな?