【GUI】Fletスレ【Python/Flutter】 (69レス)
上下前次1-新
26: 04/18(金)19:40 ID:ZUjnUsfX(2/2) AAS
おお、そんなところで設定できたのね。Themeは見てなかったよ。
27: 04/23(水)05:54 ID:curLR6rF(1) AAS
AlertDialogに「OK」「Cancel」のテキストボタンを置いて、それぞれを押したときの処理を書くという場合、テキストボタンのon_clickにlambdaで書ける内容なら苦労しないんだけど、文が必要なときはどうするのがいいかな?
今は、関数を作ってテキストボタンのon_clickに指定しているんだけど、わざわざ名前付きの関数を作らなきゃいけないのがちょっと不満なんだよね。よくあるGUIライブラリみたいに戻り値で分岐させる方が楽だったなという感が拭えなくて。
28: 05/10(土)13:31 ID:J+Qfv1kZ(1) AAS
バージョン上げるとちょこちょこエラーになる…
29: 07/30(水)13:42 ID:9cD2Qfoh(1) AAS
1か月くらい前に1.0アルファ版が出ていたのね。ちょっと触る時間がないんだけど、結構再設計されている部分があるみたい。
30: 07/30(水)14:00 ID:Meqfu9qd(1) AAS
リアクティブプログラミングスタイルの記述が気になっているけど触っていない
31: 08/03(日)21:32 ID:2B5I/jfB(1) AAS
レイアウト系コントロールのcontrolsプロパティに、たとえばRowとCheckboxとLiptViewを突っ込むと、VSCodeのPylanceから「型"list[Row | Checkbox | ListView]"の引数を、関数"__init__"の型"list[Control]" のパラメーター"controls"に割り当てることはできません」って警告が出て鬱陶しいんだけど正攻法で抑止する方法って何かないかな。
Row, Checkbox, ListViewがControlの下位クラスってことを型チェッカーが把握してないってことだと思うんだけど。
32: 08/04(月)14:31 ID:IfdApRBS(1/2) AAS
RowとCheckboxとListViewをすべてControlにcastすれば警告は抑止できるけど、さすがにそんなこといちいちやっていられないし。
たぶん何か簡単な方法があると思うんだけどなぁ。
33: 08/04(月)17:37 ID:QEghF0O/(1) AAS
昔それなったことあるけど
今単純にColumnのcontrolsにRow, Checkbox, ListViewを突っ込んだだけだとでないな
34: 31-32 08/04(月)18:49 ID:IfdApRBS(2/2) AAS
原因は一応分かったかも。
中のコントロールにflet.Refで参照を張っているんだけどどうやら角括弧による型付きRefで参照を張ると警告が出るっぽい。単にft.Ref() にしたら警告が出なくなった。ただ、動作に問題がないかは要確認かな。何でそうなるのかもまだきちんとは分かってないし。
35: 08/05(火)16:12 ID:d07nDUZU(1) AAS
ジェネリクスの共変とか反変とかの概念が関係あるみたいね、あまりよく分かってないが。基底型がBで派生型がDのとき、list[D]がlist[B]の派生型になるとは限らないとか何とか。本当は型理論とかまじめに勉強すべきなんだろうけど、それはちょっとしんどいなぁ……。
36: 08/14(木)22:21 ID:ZKu9lsh4(1) AAS
@data_viewにちょっと触ってみた。before_updateに色々突っ込まずに済むようになったみたいでそれ自体はいい感じ。
ただ、親コントロール.controls[インデックス] = 新コントロールという感じで更新するとき、インデックス(親コントロールの何番目の子要素か)をハードコーティングしたくないんだけど、あまりうまく行く方法が見つからなくて困り中。Refでやるのが普通かなと思ったんだけど、@data_viewはメモ化しているみたいで、キャッシュからコントロールが返されるときにうまくいかないみたい。
あまり触る時間もないので当面はハードコーティングで済ませて、ドキュメントが公開された後にあらためて検討することになりそう。
37: 08/18(月)15:46 ID:1pvPWxPY(1) AAS
TextFieldを含むカスタムコントロールXと、その状態を保持するXStateクラスとを作ってControlBuilderでリアクティブに処理しようとする場合、とりあえずxにxstateへの参照を持たせて、TextFieldのon_changeの中で x.state.value = e.control.value みたいな感じにしているんだけど、こんな設計でいいのかな。これだと入力のたびにTextField(あるいはそれを含むカスタムコントロール全体?)が再生成されることになるんだけどリアクティブUIってそんなもの?
あまり、他のフレームワークとか触ったことがないので勝手がよくわからない。
38(2): 08/18(月)18:58 ID:HwAf1a14(1) AAS
ControlBuilderで生成されるコントロールが持つメソッド(具体的にはfocus)の呼び出しって、どう書けばいいんだろ?
controlsリストの最初の要素としてfocusを持つコントロールを生成して返すControlBuilderを置いた上で、他の場所でself.controls[0].focus って書いたら、「ControlBuilderはfocusという名前のメソッドを持ってない」と怒られたんだが。
39(1): 08/21(木)20:32 ID:NaAwv2o/(1/4) AAS
dev5066いれてみたけどControlBuilderどこだよ…
40(1): 08/21(木)20:33 ID:NaAwv2o/(2/4) AAS
dev5509だった
41(1): 08/21(木)20:48 ID:NaAwv2o/(3/4) AAS
名前変わったのかよ
42: 08/21(木)21:11 ID:NaAwv2o/(4/4) AAS
>>38
ft.Refで参照したよ
で、TextField.focus()だと非同期になってるからawaitいる
43: 08/22(金)09:05 ID:5NhjtIih(1) AAS
ControlBuilderで返されるオブジェクトのrefプロパティに適宜のref名を設定して参照を張るという方法は、ControlBuilderに渡す状態オブジェクト変数が p → q → p …… というように同じ引数になる場合、同じ引数による2回目以降の呼び出しでは効かなくなるという問題がない? だから、ControlBuilderを使う場合にはrefは事実上、使えなくなったものだと思っていたんだが。
44: 08/29(金)16:32 ID:FvSDmdzS(1) AAS
ControlBuilderをちょっと試してみたが、やっぱり少し重くなることがあるね。自分の書き方が悪いだけなのかもしれないけれど、そうでないとしたら使い所・使い方を選ぶ感じの機能なのかも。全面的にリアクティブUIにしたかったんだけど、これだとちょっと辛いかな。
45(1): 08/30(土)10:06 ID:U/OkkUQy(1) AAS
>>38
妥当な方法か否かは分からないが、ControlBuilderの content属性からControlBuilderが生成したその戻り値オブジェクトにアクセスできるみたいね。
46: 08/30(土)12:26 ID:tdfvlCm8(1) AAS
直接value触ると怒られるな
もうstateから触れってことか
47: 08/31(日)22:30 ID:OfdewdYG(1) AAS
>>45
ControlBuilderのcontent属性にセットされるのは一回updateされた後っぽい。それまではNone
48(2): 09/01(月)15:53 ID:5rr2TLhQ(1) AAS
ControlBuilderの仕様って、こんな感じ?
・ 画面にはControlBuilderの第2引数builderの呼び出しによって生成されたコントロールが表示されるが、コントロールツリーにはControlBuilderオブジェクトそのものが格納される。
・ ControlBuilderの第2引数builderの呼び出しによって生成されたコントロールは、いったん画面に表示された後は(?)、ControlBuilderオブジェクトの属性contentに保持されている(そうなる前のcontent属性の値はNone)。生成されたコントロールの属性にアクセスしたいときは、このcontent属性経由でアクセスすることが考えられる。
・ ControlBuilderの第1引数state(その実引数式)は、ControlBuilderの呼び出し時にただ1度だけ評価され、ControlBuilderは以下その値を参照し続ける。したがって、コントロールの仕様がstate.attrに依存する場合は、第1引数としてはstateを渡し、第2引数builderの式の中でstate.attrを参照する形にするのが基本。第1引数にstate.attrを直接渡す形にしてしまうと(それ自身が値の変更を行うメソッドを持っていたり、そもそも値の変更を行う必要がないような場合はともかく)どこかでstate.attr = new_val としてもControlBuilder から状態変更として認識されない。
・ 描画更新・再描画は、第1引数stateの内容変更(おそらくそのハッシュ値の変更?)があったときに、第2引数builderに第1引数stateを引数として与えて呼び出したその戻り値のコントロールを新しいコントロールとする形で行われる。builderは描画更新・再描画のたびに呼び出されるが、ControlBuilderやその第1引数stateは描画更新・再描画のたびに評価されるわけではない。
・ 第1引数stateの内容変更は描画更新・再描画のトリガーになるので、stateオブジェクトはできるだけコンパクトにするのが良い。
・ ControlBuilderで生成されるコントロールにref属性を設定するのは、第2引数builderに渡される状態引数(=第1引数stateの値)が p → q → p …… というように同じ値になる場合(CheckBoxやRadioGroupでよくある)、同じ値による2回目以降の呼び出しでは効かなくなるという問題があるっぽい(キャッシュが働くため、refを設定するコードがスキップされてしまうのだと思われる)。事実上、Refが使えないのだとすると非常に不便なので何か回避法がありそうではあるが……。
49: 09/07(日)12:43 ID:TqDkjIbM(1/2) AAS
あれ、現時点でインストールするとControlBuilderが見つからないってなるな。>>39-41と同じ状態?
50: 09/07(日)14:09 ID:TqDkjIbM(2/2) AAS
StateViewという名前になったのか。こういう変更ってどこかに書いてあったのかな? アルファ版だから、どこにも書いてなかったとしても文句は言えないが。
51: 09/07(日)23:17 ID:TC5o/1J8(1) AAS
>>48
4点目だけど、描画更新・再描画が行われるのは、第1引数stateの内容変更があったときではなく、第1引数stateの子孫属性に対する代入があったときというのが正確みたいね(元と同じ値を代入したときも描画更新・再描画は行われるみたい)。noteで解説記事を書いている人によると、__set_attr__をフックしているらしい。
52: 09/07(日)23:55 ID:wN29kMQ7(1) AAS
せっかくupdateいらなくなるのに
asyncio.sleepがいるってどうなん……
53: 09/08(月)00:22 ID:i1Wv6LLA(1) AAS
まぁ、ダイアログ等限定の話なら我慢できるかな。
54: 09/08(月)17:54 ID:PGku9TnQ(1) AAS
page.run_taskでstate変更しても反映しないな
55: 09/09(火)22:58 ID:zANAfy0I(1) AAS
タブ周りも結構変わっているのね。Tabsのcontentに(Columnでまとめた)TabBarとTabBarViewを入れるってことでいいの……か?
56: 09/10(水)21:27 ID:Rtl+OmsU(1) AAS
>>48
最後の点だけど、もうRefを使っても問題ないみたい。修正された?
生成後に部分的な状態変更を必要とするようなカスタムコントロールは、StateViewでは使えないことになるのね。基本的にカスタムコントロールで凝ったことをするのは想定してないってことなのか。
57: 09/11(木)10:40 ID:ZLHIwsaj(1) AAS
アルファ版のうちにということだろうけど、ここぞとばかりに色々弄っているな。たしかにこの先破壊的変更は入れづらくなっていくんだろうから、ここでいろいろやっておくのは良いことなんだろうね。
58: 09/18(木)08:09 ID:6zvJPGqA(1) AAS
明示的にupdateを書くことが(基本的には)なくなるということは、is_updateでTrueを返すようにするということは(基本的には)もうないってことでいいのかな。
ft.context.pageでどこからでもPageにアクセスできるのは地味にありがたい。カスタムコントロールの__init__の中でself.page.hogeとやって「Noneにhogeという属性はありません」と怒られるミスはよくやってしまっていたので。
59: 09/18(木)13:05 ID:DPWCUt9/(1) AAS
ごめん、is_updateじゃない、is_isolated だ。
60: 09/18(木)19:18 ID:t2Gbg0/Z(1) AAS
1.0当分かかりそうか
61: 09/20(土)09:50 ID:kxS+pQnh(1) AAS
いまアルファ版(0.7)で、これからベータ版(0.8)→RC版(0.9)を経て1.0 だもんね。noteの解説記事を書いている人によれば、年内くらいじゃないかという見立てのようだけど、どうなんだろうね。
62: 10/06(月)15:14 ID:QPH3iO32(1) AAS
focus_stopみたいな名前のプロパティでも作って、コントロールへの入力完了後に次の(フォーカスを受け取る)コントロールに自動的にフォーカスが移るようにしてくれないかなぁ……。デスクトップアリでこれがないのは流石にちょっと使いにくいので自分で書いてみたけど結構面倒くさいし、これくらいはライブラリ側に期待しても罰は当たらないと思うんだよね。
autofocusがそういうプロパティかと思っていたんだけど、アレ全然役に立たないのな。何のためにあるんだレベル。
63(1): 10/07(火)18:17 ID:nb9VcTS1(1) AAS
コンテキストメニュー(右クリックメニュー)の機能も欲しいかな。ウェブの解説記事を参考にしてGestureDetector と Stack でそれっぽいものを作るところまではできたんだけど、メニュー以外のところをクリックしたときにメニューの表示を消すというのを簡単にする方法がわからなくて断念した。
何かしら方法はあるんだろうけど、コンテキストメニューくらいは簡単にかけるようになっていると嬉しいかな。
64: 10/08(水)11:38 ID:5PMf8mIp(1) AAS
>>63
大きさ0のTextField をStackの奥側に置いておいて、そのon_blurイベントでStack を削除するようにすればそれっぽい感じにできるっぽい。
でもやっぱりもう少しちゃんとした方法が欲しいところだなー。
65: 10/09(木)19:27 ID:V7lTVJBy(1) AAS
StateViewも何か別のコンセプトに置き換わるみたい。アルファ版ということもあってか、思った以上に流動的なんだね。いじったり、勉強したりするのは1.0が出てからにした方がいいのかも。
66: 10/16(木)12:22 ID:S5H+CbkM(1) AAS
触るのやめたよ
67: 10/16(木)13:59 ID:A2DLovH4(1) AAS
まー、本格的に触るのはもう少し仕様が安定してからでもいいかな感はあるかなぁ。正直、StateView(ControlBuilder)はメインコンセプトっぽいからさすがに変更されることはないだろうと甘く見ていたわ。たしかに新しいcomponentベースの宣言型UIの方が柔軟性は高そうではあるけれども。
ちょっとだけ触ってみたところ、状態変更が連鎖するコードだと「Set changed size during iteration」という実行時エラーで怒られるんだけど(__pending_updatesというset内の各コントロールをupdateしている最中に__pending_updates自体に追加等があったということっぽい)、何か対処法あるのかな。
68: 10/17(金)10:48 ID:NJK8gXIe(1) AAS
状態①の変更に伴い呼び出されるコンポーネント①のコードの中に、別の状態②の変更(それにより別のコンポーネント②のコードが呼び出される)があると67後半のエラーになるっぽい。これを許すとコントロールツリーの一貫性に問題が生じる事態が生じうるということなのかもしれない。
状態①の変更に伴い呼び出されるコンポーネント①のコードの中から別の状態②の変更を発生させるコードを一旦取り除いて、コンポーネント①の完了後にその処理を行うようにしたらエラーが出なくなった(常にこのような対応が可能かは別問題だけど)。
componentベースの宣言型UIという方向性は、個人的にはそんなに悪くない感触かな。仕様が安定するまでは触るのは程々にとどめておくけど。
69: 11/12(水)19:13 ID:0pO79JLj(1) AAS
しばらく更新みてなかったけど
Reactみたいになるんか
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.453s*