C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

FletでReactチュートリアルを真似る5

こちらの続きです。
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インスタンスのリストさえあれば大丈夫かな?