!extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512
ようこそFlutter野郎どもよ!!!
軽い開発環境でモバイルアプリ開発ができるなんて最高じゃねえか
AndroidもiOSも両方行ける、まさに漢のためのツールだな
https://flutter.dev/
前スレ
Flutterやろうよ!!! 3
https://mevius.5ch.net/test/read.cgi/tech/1628421492/
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
Flutterやろうよ!!! 4
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (アウアウクー MMe3-IDr3)
2022/03/28(月) 09:25:37.90ID:+qBipumoM235デフォルトの名無しさん (ワッチョイ 2390-xeOV)
2022/07/09(土) 02:05:48.77ID:TNWK2vc80236デフォルトの名無しさん (アウアウエー Sa13-Z8ZC)
2022/07/09(土) 02:06:22.72ID:+iEZX8QHa237デフォルトの名無しさん (アウアウエー Sa13-Z8ZC)
2022/07/09(土) 02:10:27.29ID:+iEZX8QHa 知ってるふり→知らないふり。
当たり前の話が冷やかし?
ちょっと何言ってるのかわかんない笑
当たり前の話が冷やかし?
ちょっと何言ってるのかわかんない笑
238デフォルトの名無しさん (アウアウエー Sa13-Z8ZC)
2022/07/09(土) 02:17:18.79ID:+iEZX8QHa >>235
いや、実際おまえがflutter使うかどうかなんて義務でも何でもないのに加えて、自分でAndroidが神viewと言ってたんだろ?
「神view使えば良いのでは?」のどこが冷やかしなの?何なんだこいつは。
いや、実際おまえがflutter使うかどうかなんて義務でも何でもないのに加えて、自分でAndroidが神viewと言ってたんだろ?
「神view使えば良いのでは?」のどこが冷やかしなの?何なんだこいつは。
239デフォルトの名無しさん (ワッチョイ 2390-xeOV)
2022/07/09(土) 02:17:25.39ID:TNWK2vc80 じゃあ、答えるけど
答えはもう先に書いたけど君が理解できないだけなんだよ
理解できないってより本人なんだから知らないふりかww
>当たり前の話して冷やかしてるんだよ
じゃあ、お前誰かに「フレームワークのーーがバグってるんだよねー」とか言われて、
即答で「自分で治すか、他の使えば」って当たり前の極論を
リアルで言ってみろよwwwwww
普通はなんだこいつって思われるからwww
答えはもう先に書いたけど君が理解できないだけなんだよ
理解できないってより本人なんだから知らないふりかww
>当たり前の話して冷やかしてるんだよ
じゃあ、お前誰かに「フレームワークのーーがバグってるんだよねー」とか言われて、
即答で「自分で治すか、他の使えば」って当たり前の極論を
リアルで言ってみろよwwwwww
普通はなんだこいつって思われるからwww
240デフォルトの名無しさん (アウアウエー Sa13-Z8ZC)
2022/07/09(土) 02:25:51.80ID:+iEZX8QHa >>239
実際バグってるなら同感するけど、悪いけどおまえが示した範囲に明確なバグなんか無いから笑
おまえの不勉強なんか知ったこっちゃないし、気に入らないなら他のもの使う以外何があんだよ?
リアルでおまえみたいレベルと絡みたくないわ笑
実際バグってるなら同感するけど、悪いけどおまえが示した範囲に明確なバグなんか無いから笑
おまえの不勉強なんか知ったこっちゃないし、気に入らないなら他のもの使う以外何があんだよ?
リアルでおまえみたいレベルと絡みたくないわ笑
241デフォルトの名無しさん (ワッチョイ 2390-xeOV)
2022/07/09(土) 02:26:44.98ID:TNWK2vc80 これが普通と思ってるのかよ
お前くそウケるわwwwww
リアルで言ってみろよwwwwwwwwww
お前くそウケるわwwwww
リアルで言ってみろよwwwwwwwwww
242デフォルトの名無しさん (スププ Sd43-Z8ZC)
2022/07/09(土) 02:39:17.11ID:cDalp+idd243デフォルトの名無しさん (ワッチョイ 2390-xeOV)
2022/07/09(土) 02:46:38.80ID:TNWK2vc80244デフォルトの名無しさん (スププ Sd43-Z8ZC)
2022/07/09(土) 02:51:43.96ID:cDalp+idd245デフォルトの名無しさん (ワッチョイ 2390-xeOV)
2022/07/09(土) 02:54:55.84ID:TNWK2vc80246デフォルトの名無しさん (アウアウエー Sa13-Z8ZC)
2022/07/09(土) 03:01:04.70ID:+iEZX8QHa >>245
あなたが幸せそうで私も幸せです。
あなたが幸せそうで私も幸せです。
247デフォルトの名無しさん (ワッチョイ 2390-xeOV)
2022/07/09(土) 03:02:19.90ID:TNWK2vc80248デフォルトの名無しさん (アウアウエー Sa13-Z8ZC)
2022/07/09(土) 03:04:37.28ID:+iEZX8QHa >>247
おめでとうございます。
おめでとうございます。
249デフォルトの名無しさん (ワッチョイ 2390-xeOV)
2022/07/09(土) 03:05:33.92ID:TNWK2vc80250デフォルトの名無しさん (アウアウエー Sa13-Z8ZC)
2022/07/09(土) 03:07:01.92ID:+iEZX8QHa >>249
おめでとうございます。
おめでとうございます。
251デフォルトの名無しさん (ワッチョイ 2390-xeOV)
2022/07/09(土) 03:07:57.39ID:TNWK2vc80252デフォルトの名無しさん (アウアウエー Sa13-Z8ZC)
2022/07/09(土) 03:13:02.64ID:+iEZX8QHa253デフォルトの名無しさん (ワッチョイ 2390-xeOV)
2022/07/09(土) 03:15:20.17ID:TNWK2vc80254デフォルトの名無しさん (アウアウエー Sa13-Z8ZC)
2022/07/09(土) 03:19:16.41ID:+iEZX8QHa255デフォルトの名無しさん (ワッチョイ 2390-xeOV)
2022/07/09(土) 03:21:18.13ID:TNWK2vc80256デフォルトの名無しさん (アウアウエー Sa13-Z8ZC)
2022/07/09(土) 03:23:21.27ID:+iEZX8QHa 暇人さんコピペよりAndroid頑張ろうね笑
イキって冷やかしよばわり要らないから、さようなら。
イキって冷やかしよばわり要らないから、さようなら。
257デフォルトの名無しさん (ワッチョイ 2390-xeOV)
2022/07/09(土) 03:27:35.77ID:TNWK2vc80258デフォルトの名無しさん (アウアウエー Sa13-Z8ZC)
2022/07/09(土) 03:33:51.61ID:+iEZX8QHa >>257
まあflutterのあの程度を普通じゃないって言ってるんだから、Android使ったところで便利なスクロールくらいしか実装できないのは目に見えてるけどな。
まあflutterのあの程度を普通じゃないって言ってるんだから、Android使ったところで便利なスクロールくらいしか実装できないのは目に見えてるけどな。
259デフォルトの名無しさん (ワッチョイ 2390-xeOV)
2022/07/09(土) 03:36:58.12ID:TNWK2vc80260デフォルトの名無しさん (アウアウエー Sa13-Z8ZC)
2022/07/09(土) 03:42:31.73ID:+iEZX8QHa261デフォルトの名無しさん (アウアウエー Sa13-Z8ZC)
2022/07/09(土) 03:43:22.55ID:+iEZX8QHa262デフォルトの名無しさん (ワッチョイ 2390-xeOV)
2022/07/09(土) 03:43:48.32ID:TNWK2vc80263デフォルトの名無しさん (ワッチョイ 2390-xeOV)
2022/07/09(土) 03:44:59.51ID:TNWK2vc80264デフォルトの名無しさん (アウアウエー Sa13-Z8ZC)
2022/07/09(土) 03:47:02.98ID:+iEZX8QHa265デフォルトの名無しさん (ワッチョイ 2390-xeOV)
2022/07/09(土) 03:47:46.79ID:TNWK2vc80266デフォルトの名無しさん (アウアウエー Sa13-Z8ZC)
2022/07/09(土) 03:49:23.35ID:+iEZX8QHa267デフォルトの名無しさん (ワッチョイ 2390-xeOV)
2022/07/09(土) 03:50:27.19ID:TNWK2vc80268デフォルトの名無しさん (アウアウエー Sa13-Z8ZC)
2022/07/09(土) 03:52:25.42ID:+iEZX8QHa269デフォルトの名無しさん (ワッチョイ 2390-xeOV)
2022/07/09(土) 03:53:27.98ID:TNWK2vc80270デフォルトの名無しさん (アウアウエー Sa13-Z8ZC)
2022/07/09(土) 03:55:45.64ID:+iEZX8QHa271デフォルトの名無しさん (ワッチョイ 2390-xeOV)
2022/07/09(土) 03:57:04.92ID:TNWK2vc80272デフォルトの名無しさん (アウアウエー Sa13-Z8ZC)
2022/07/09(土) 04:15:07.54ID:+iEZX8QHa 結局キレられる理由も完全に意味不明で途中から話にならなかった笑
273デフォルトの名無しさん (ワッチョイ 2390-xeOV)
2022/07/09(土) 04:17:08.44ID:TNWK2vc80274デフォルトの名無しさん (アウアウエー Sa13-Z8ZC)
2022/07/09(土) 04:26:56.15ID:+iEZX8QHa275デフォルトの名無しさん (ワッチョイ 2390-xeOV)
2022/07/09(土) 04:29:06.81ID:TNWK2vc80276デフォルトの名無しさん (アウアウウー Sa09-DGD5)
2022/07/09(土) 05:59:43.48ID:phfbURN3a こいつら何してんの…
277デフォルトの名無しさん (ワッチョイ a57d-jMZS)
2022/07/09(土) 08:09:17.64ID:fLTYygoN0 保守だろ
278デフォルトの名無しさん (ワッチョイ 8d2c-Nev3)
2022/07/09(土) 08:45:31.39ID:FO2FM1010 ホンモノ来てんじゃん草
279デフォルトの名無しさん (スププ Sd43-Z8ZC)
2022/07/09(土) 10:54:36.32ID:cDalp+idd スクロールとはスライバーのこと?
だとしてもそこまで致命的なことか?
スクロールがあれだから他のフレームワークの方が良いですね、というのは聞いたことない。
os依存の機能で結局ネイティブコード書かないといけないから、みたいなのはあるけど。
だとしてもそこまで致命的なことか?
スクロールがあれだから他のフレームワークの方が良いですね、というのは聞いたことない。
os依存の機能で結局ネイティブコード書かないといけないから、みたいなのはあるけど。
280デフォルトの名無しさん (ワッチョイ 232f-UQ1h)
2022/07/09(土) 13:09:48.07ID:SMAdLLkz0 スライバーって・・・・
スリバーな
スリバーな
281デフォルトの名無しさん (スププ Sd43-Z8ZC)
2022/07/09(土) 13:19:06.57ID:cDalp+idd 発音の指摘痛み入ります。
282デフォルトの名無しさん (ワッチョイ 2342-lTRq)
2022/07/09(土) 20:54:08.51ID:TsAgVdQO0 なんだ
スライバーじゃないのか
スライバーじゃないのか
283デフォルトの名無しさん (ササクッテロラ Spa1-KG4v)
2022/07/09(土) 21:06:17.63ID:BwqUQNjHp どっちも使われてるよ
JISはスライバーだからこっちのほうが主流かな
JISはスライバーだからこっちのほうが主流かな
284デフォルトの名無しさん (アウアウエー Sa13-Z8ZC)
2022/07/10(日) 09:45:22.91ID:5dNamPela 当たり前のこと言われて逆ギレてマジ意味わからない
情報集めって言いながら結局コピペ連投
目障りだわーww
情報集めって言いながら結局コピペ連投
目障りだわーww
285デフォルトの名無しさん (ワッチョイ 2390-/tfT)
2022/07/10(日) 11:54:26.21ID:Ut0Ymv090 これが普通と思ってるのかよ
お前くそウケるわwwwww
リアルで言ってみろよwwwwwwwwww
お前くそウケるわwwwww
リアルで言ってみろよwwwwwwwwww
286デフォルトの名無しさん (スフッ Sd43-Z8ZC)
2022/07/10(日) 17:24:11.29ID:a4ePALazd flutterスレに自動投稿ロボットを誕生させてしまい誠に申し訳ございませんでした。
287デフォルトの名無しさん (ブーイモ MM99-6d7N)
2022/07/10(日) 17:32:35.01ID:1hLKG9fCM 良かった。病気の子供はいないんだ。
288デフォルトの名無しさん (ワッチョイ 2390-/tfT)
2022/07/10(日) 18:21:36.81ID:Ut0Ymv090 これが普通と思ってるのかよ
お前くそウケるわwwwww
リアルで言ってみろよwwwwwwwwww
お前くそウケるわwwwww
リアルで言ってみろよwwwwwwwwww
289デフォルトの名無しさん (ワッチョイ 03bd-2HoA)
2022/07/10(日) 19:40:28.11ID:FmV9wIuC0 providerを使ったMVVM開発に挑戦しています。
画面が複数ある場合、簡単に作るとStatelessWidgetのviewとChangeNotifierのviewModelが画面数だけ出来る事になるかと思います。
その場合、どのviewのbuildメソッドにもChangeNotifierProvider()がある事になってしまうのですが、それはそういう物ですか?
個人的にbuildの中はなるべく階層を浅くしたほうがよいと思っていて
そこにChangeNotifierProvider()というメソッドを1階層入れる事に抵抗があるのですが
それは気にし過ぎだったりしますでしょうか
画面が複数ある場合、簡単に作るとStatelessWidgetのviewとChangeNotifierのviewModelが画面数だけ出来る事になるかと思います。
その場合、どのviewのbuildメソッドにもChangeNotifierProvider()がある事になってしまうのですが、それはそういう物ですか?
個人的にbuildの中はなるべく階層を浅くしたほうがよいと思っていて
そこにChangeNotifierProvider()というメソッドを1階層入れる事に抵抗があるのですが
それは気にし過ぎだったりしますでしょうか
290デフォルトの名無しさん (ワッチョイ 0501-uJ+V)
2022/07/10(日) 19:55:11.35ID:UkuUwsAl0 >>289
はい、何も間違っていません。flutterのStatefulは基本的に階層が深くなることを許容する必要があります。
rebuild範囲を局所化することはその都度1階層深くなることとほぼ同義と理解してもらって構いません。
もちろん同じコンテキストでrebuildされる同じWidgetは共通化するという前提です。
はい、何も間違っていません。flutterのStatefulは基本的に階層が深くなることを許容する必要があります。
rebuild範囲を局所化することはその都度1階層深くなることとほぼ同義と理解してもらって構いません。
もちろん同じコンテキストでrebuildされる同じWidgetは共通化するという前提です。
291デフォルトの名無しさん (ワッチョイ 03bd-2HoA)
2022/07/10(日) 21:18:49.10ID:FmV9wIuC0292デフォルトの名無しさん (ワッチョイ 232f-UQ1h)
2022/07/11(月) 05:41:09.79ID:mP4iOavH0 > ChangeNotifierProvider()というメソッド
???
???
293デフォルトの名無しさん (テテンテンテン MMcb-KLfl)
2022/07/11(月) 08:30:27.70ID:CgnuFyDWM パソコンゲーが趣味で理系の山上徹也がflutterやってればなー
294デフォルトの名無しさん (アウアウウー Sa09-2HoA)
2022/07/11(月) 10:33:31.81ID:1W23UOpta だれよ
295デフォルトの名無しさん (ワッチョイ 2342-lTRq)
2022/07/11(月) 12:38:02.80ID:O8zc2C880 今一番話題の人
296デフォルトの名無しさん (ワッチョイ d501-CX/0)
2022/07/11(月) 16:16:25.65ID:auBqUmtR0 そうなんか
297デフォルトの名無しさん (ワッチョイ 695f-Ecv2)
2022/07/26(火) 17:12:23.66ID:dYGJPrNW0 ほ
298デフォルトの名無しさん (ワッチョイ 695f-OMQZ)
2022/07/26(火) 22:42:06.13ID:dYGJPrNW0 おいおい
画像貼り付けようとしたら何か新しいタブで色々メッセージ書いてあって分からん。
ちゃんと存在してるURLやし。誰か助けて
画像貼り付けようとしたら何か新しいタブで色々メッセージ書いてあって分からん。
ちゃんと存在してるURLやし。誰か助けて
299初心者です (ワッチョイ 695f-awC1)
2022/07/26(火) 23:00:45.36ID:0QnELkry0 超初心者ですすみません、、知恵袋のようなアプリを作りたいのですが、アドバイスいただけますでしょうか?各質問がホームに並んでいて、質問をクリックすると回答を書けるもしくは見れるようにしたいです。下記リンクにしたがい質問を並べた階層(ホームに該当)がつくれるかとおもいますが、質問の一つをクリックすると更にもう1段階、画面遷移して質問に対する回答が並ぶような階層を作る場合、どういった処理をすればよいでしょうか?方針や参考になる検索キーワードなどありましたら、ご教示いただけますと幸いです。
https://rightcode.co.jp/blog/information-technology/flutter-firebase-bulletin-board-app-make
https://rightcode.co.jp/blog/information-technology/flutter-firebase-bulletin-board-app-make
300デフォルトの名無しさん (テテンテンテン MMeb-NnXs)
2022/07/26(火) 23:06:37.46ID:rlMnEWBsM flutter大学入れ
301デフォルトの名無しさん (ワッチョイ 1390-lyDi)
2022/07/26(火) 23:12:27.63ID:aNuqzwoa0 もうちょっとピンポイントで質問してくれないとな..
302デフォルトの名無しさん (スフッ Sd33-r2Jd)
2022/07/27(水) 01:01:46.72ID:SqTl9Tcbd 階層て何すか?
stackみたいなこと?
ナビゲーションstack、みたいな?
そういうオレオレ用語はちょっと、、、
ねー。
stackみたいなこと?
ナビゲーションstack、みたいな?
そういうオレオレ用語はちょっと、、、
ねー。
303デフォルトの名無しさん (アウアウウー Sa5d-R4TS)
2022/07/27(水) 11:16:46.42ID:elZrgoJKa オレオレ用語で仕様描くのは良くないぬ
304デフォルトの名無しさん (ワッチョイ b92f-a243)
2022/07/28(木) 01:26:46.49ID:kZAcDvsr0 なんもわかってないまま質問してるね
そんなんじゃ回答もらってもわかんないでしょ
ほとんど作ってもらってコピペしようとしてる?
超初心者の自覚があるなら超初心者向けの情報みて勉強しなよ
Flutterはそういうの公式で充実してるからさ
そんなんじゃ回答もらってもわかんないでしょ
ほとんど作ってもらってコピペしようとしてる?
超初心者の自覚があるなら超初心者向けの情報みて勉強しなよ
Flutterはそういうの公式で充実してるからさ
305デフォルトの名無しさん (ワッチョイ 8110-cs1/)
2022/07/28(木) 02:40:25.79ID:ZuspXXEK0 彼は答えが欲しいのではない
アプリが欲しいのさ
アプリが欲しいのさ
306デフォルトの名無しさん (テテンテンテン MMeb-NnXs)
2022/07/28(木) 08:43:02.32ID:dd+GJcbrM ググレカス
307デフォルトの名無しさん (ワッチョイ 1301-U7jV)
2022/07/28(木) 18:45:25.40ID:2Rw/B+fk0 質問
XamarinでDJアプリ作ろうとしたんだけどレコードを動かしたときの動作でタップしている位置を取得することで角度によって再生逆再生みたいにしたいんだけどFlutterなら楽勝なの?
ザマリンだと結局レンダラーって言ってiOSとAndroid個別にプログラム書かないといけないみたい
https://i.imgur.com/BM04VVW.png
XamarinでDJアプリ作ろうとしたんだけどレコードを動かしたときの動作でタップしている位置を取得することで角度によって再生逆再生みたいにしたいんだけどFlutterなら楽勝なの?
ザマリンだと結局レンダラーって言ってiOSとAndroid個別にプログラム書かないといけないみたい
https://i.imgur.com/BM04VVW.png
308デフォルトの名無しさん (ワッチョイ d901-37+K)
2022/07/28(木) 19:06:26.95ID:AOM66IHO0309デフォルトの名無しさん (オッペケ Sr85-U7jV)
2022/07/28(木) 19:07:41.33ID:Ee0GPQHDr310デフォルトの名無しさん (ワッチョイ a959-1HOL)
2022/07/28(木) 19:52:29.61ID:G5sGRUf40311デフォルトの名無しさん (ワッチョイ a9ad-Y/M3)
2022/07/28(木) 21:35:33.51ID:Pq2AIR8P0 >>310
グロ
グロ
312デフォルトの名無しさん (ワッチョイ 4abd-G1eK)
2022/08/02(火) 10:06:04.35ID:HdRf0/qx0 buildメソッド内で、子要素の高さをpx単位で知る方法ってありませんか。
例えば、child要素が100px以上なら折りたたみのアコーディオンを出して、未満ならそのまま表示する。みたいな事をしたいです
「ボタンを押した時に高さを取得する」なら、対象のwidgetにGlobalKeyを設定してcontextからどうにでも取れるのですが
画面表示時の最初のbuildメソッドの中で取得する事がしたいです。
WidgetsBinding.instance.addPostFrameCallback を使ってbuildの1フレーム後に高さを取得する事を試したのですが
それでもbuildメソッドの後なので一瞬見えてしまいます
特に高さが変わるとカクつきが発生するから目立ってしまう・・・
例えば、child要素が100px以上なら折りたたみのアコーディオンを出して、未満ならそのまま表示する。みたいな事をしたいです
「ボタンを押した時に高さを取得する」なら、対象のwidgetにGlobalKeyを設定してcontextからどうにでも取れるのですが
画面表示時の最初のbuildメソッドの中で取得する事がしたいです。
WidgetsBinding.instance.addPostFrameCallback を使ってbuildの1フレーム後に高さを取得する事を試したのですが
それでもbuildメソッドの後なので一瞬見えてしまいます
特に高さが変わるとカクつきが発生するから目立ってしまう・・・
313デフォルトの名無しさん (ワッチョイ 6501-JYI4)
2022/08/02(火) 10:24:04.80ID:8jAs6gjU0 >>312
それは子要素がbuildされる前にその子要素自体の高さを予め知りたいってこと?
それは子要素がbuildされる前にその子要素自体の高さを予め知りたいってこと?
314デフォルトの名無しさん (ワッチョイ 4abd-G1eK)
2022/08/02(火) 13:43:38.32ID:HdRf0/qx0315デフォルトの名無しさん (ワッチョイ b190-Wndz)
2022/08/02(火) 14:23:10.77ID:TouO0DTh0 俺も同じことしてるけど、ただ、一瞬見えないように何かのWidgetでくるんで高さ求めてる
まぁカクつくのは別の問題だが
まぁカクつくのは別の問題だが
316デフォルトの名無しさん (ワッチョイ b190-Wndz)
2022/08/02(火) 14:34:26.77ID:TouO0DTh0 Visiblity,Opacity,Offstageとかそこら辺のWidgetだっけ?
317デフォルトの名無しさん (アウアウウー Sa09-JYI4)
2022/08/02(火) 14:53:26.36ID:mx7A804Ta318デフォルトの名無しさん (ワッチョイ d52f-Og+R)
2022/08/03(水) 10:55:34.70ID:tx6+aymb0 RenderBoxを作りなさい
319デフォルトの名無しさん (スッップ Sd33-N/Xj)
2022/08/08(月) 00:34:12.55ID:sRQZ4vBgd Providerを使ったMVVMモデルの勉強をしているのですが、メソッドを実行するにはどうしたら良いでしょうか。
説明用のコードを作成しました。flutter 3.x 、provider 6.0.3 で動作確認をしています
1ファイルに詰め込みましたので、コピペで動きます。
https://pastebin.com/iLLWegxz
ボタン1を押すと画面上部の「VMから受信した値 x」の数字部分がインクリメントします。
ボタン2と3は押すとリストが上下にスクロールします。
https://i.imgur.com/5t03yFI.png
ボタン1を押した時はViewmodelの中身を書き換えてnotifyListeners()し、表示する側はConsumerで囲って中身を表示する
というもので、ここは問題ありません。
ボタン2と3は押した後S2A.scrollRequest メソッドを呼んでほしいのですが、それをMVVM的に正しくやる方法を教えて頂けますでしょうか。
現状はViewModelの中にvoid Function() anyFunction;の関数を定義して
使う側でanyFunction=(){xxx;} と関数をセットしているのですが、色々な記事を見てもこんな事している例が無く間違っている気がしてなりません。
https://i.imgur.com/vGZFuYy.png
https://i.imgur.com/4YghOu3.png
アプリのグローバル変数の領域にGlobalKeyを設置すれば、Globalkey経由でcontextを取得出来るのですが、
グローバル変数に値を設置するのはアンチパターンだと思いますし、MVVMの勉強なので今回は避けたいです。
説明用のコードを作成しました。flutter 3.x 、provider 6.0.3 で動作確認をしています
1ファイルに詰め込みましたので、コピペで動きます。
https://pastebin.com/iLLWegxz
ボタン1を押すと画面上部の「VMから受信した値 x」の数字部分がインクリメントします。
ボタン2と3は押すとリストが上下にスクロールします。
https://i.imgur.com/5t03yFI.png
ボタン1を押した時はViewmodelの中身を書き換えてnotifyListeners()し、表示する側はConsumerで囲って中身を表示する
というもので、ここは問題ありません。
ボタン2と3は押した後S2A.scrollRequest メソッドを呼んでほしいのですが、それをMVVM的に正しくやる方法を教えて頂けますでしょうか。
現状はViewModelの中にvoid Function() anyFunction;の関数を定義して
使う側でanyFunction=(){xxx;} と関数をセットしているのですが、色々な記事を見てもこんな事している例が無く間違っている気がしてなりません。
https://i.imgur.com/vGZFuYy.png
https://i.imgur.com/4YghOu3.png
アプリのグローバル変数の領域にGlobalKeyを設置すれば、Globalkey経由でcontextを取得出来るのですが、
グローバル変数に値を設置するのはアンチパターンだと思いますし、MVVMの勉強なので今回は避けたいです。
320デフォルトの名無しさん (アウアウエー Sa23-3/wg)
2022/08/08(月) 23:03:15.94ID:7uJO41n7a これでとりあえず動きました。それっぽいですかね?
ただMVVM的に正しくやる方法かどうかは、正しい方法のはっきりした定義が無いと何とも言いようがないような気がします。
そちらのコードでも別におかしいとも思わないですし、結局実験的なコードなので、それなら本人が良いと思えば何でも良いような。
結局仕様・方針がはっきり決まって初めて、「それに対してより効率的で無駄が無いアーキテクチャかどうか」という話がスタートするような気がします。
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
Future<void> main() async {
runApp(const AppMain());
}
class AppMain extends StatelessWidget {
const AppMain({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: S1(),
);
}
}
ただMVVM的に正しくやる方法かどうかは、正しい方法のはっきりした定義が無いと何とも言いようがないような気がします。
そちらのコードでも別におかしいとも思わないですし、結局実験的なコードなので、それなら本人が良いと思えば何でも良いような。
結局仕様・方針がはっきり決まって初めて、「それに対してより効率的で無駄が無いアーキテクチャかどうか」という話がスタートするような気がします。
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
Future<void> main() async {
runApp(const AppMain());
}
class AppMain extends StatelessWidget {
const AppMain({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: S1(),
);
}
}
321デフォルトの名無しさん (アウアウエー Sa23-3/wg)
2022/08/08(月) 23:04:42.12ID:7uJO41n7a class S1 extends StatelessWidget {
S1({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: ChangeNotifierProvider(
create: (context) => ViewModelTest(),
builder: (context, vm) => Column(
children: [
Expanded(child: S2A()),
S2B(),
],
),
),
);
}
}
S1({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: ChangeNotifierProvider(
create: (context) => ViewModelTest(),
builder: (context, vm) => Column(
children: [
Expanded(child: S2A()),
S2B(),
],
),
),
);
}
}
322デフォルトの名無しさん (アウアウエー Sa23-3/wg)
2022/08/08(月) 23:06:31.02ID:7uJO41n7a class S2A extends StatelessWidget {
S2A({Key? key,}) : super(key: key);
@override
Widget build(BuildContext context) {
/// ここでメソッドをviewModelに入れている事に強い違和感がある。
final ViewModelTest vm = context.read();
final keyList = vm.keyList;
return Column(
children: [
Consumer<ViewModelTest>(
builder: (context, vm, child) {
return Container(
padding: const EdgeInsets.all(10),
decoration: BoxDecoration(
border: Border.all(color: Colors.grey, width: 1),
),
child: Text("VMから受信した値=${vm.counter}"),
);
},
),
S2A({Key? key,}) : super(key: key);
@override
Widget build(BuildContext context) {
/// ここでメソッドをviewModelに入れている事に強い違和感がある。
final ViewModelTest vm = context.read();
final keyList = vm.keyList;
return Column(
children: [
Consumer<ViewModelTest>(
builder: (context, vm, child) {
return Container(
padding: const EdgeInsets.all(10),
decoration: BoxDecoration(
border: Border.all(color: Colors.grey, width: 1),
),
child: Text("VMから受信した値=${vm.counter}"),
);
},
),
323デフォルトの名無しさん (アウアウエー Sa23-3/wg)
2022/08/08(月) 23:07:04.38ID:7uJO41n7a Expanded(
child: SingleChildScrollView(
child: Column(
children: List.generate(100, (index) {
return Container(
key: keyList[index],
width: double.infinity,
padding: const EdgeInsets.all(10),
decoration: BoxDecoration(
border: Border.all(color: Colors.grey, width: 1),
),
child: Text("index ${index + 100}"),
);
}),
),
),
),
],
);
}
}
child: SingleChildScrollView(
child: Column(
children: List.generate(100, (index) {
return Container(
key: keyList[index],
width: double.infinity,
padding: const EdgeInsets.all(10),
decoration: BoxDecoration(
border: Border.all(color: Colors.grey, width: 1),
),
child: Text("index ${index + 100}"),
);
}),
),
),
),
],
);
}
}
324デフォルトの名無しさん (アウアウエー Sa23-3/wg)
2022/08/08(月) 23:07:50.16ID:7uJO41n7a class S2B extends StatelessWidget {
S2B({Key? key,}) : super(key: key);
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () {
_button1(context);
},
child: const Text("1:VMに値+1")),
ElevatedButton(
onPressed: () {
_button2(context);
},
child: const Text("2:100に移動")),
ElevatedButton(
onPressed: () {
_button3(context);
},
child: const Text("3:199に移動")),
],
);
}
S2B({Key? key,}) : super(key: key);
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () {
_button1(context);
},
child: const Text("1:VMに値+1")),
ElevatedButton(
onPressed: () {
_button2(context);
},
child: const Text("2:100に移動")),
ElevatedButton(
onPressed: () {
_button3(context);
},
child: const Text("3:199に移動")),
],
);
}
325デフォルトの名無しさん (アウアウエー Sa23-3/wg)
2022/08/08(月) 23:08:08.10ID:7uJO41n7a void _button1(BuildContext context) {
final ViewModelTest vm = context.read();
vm.counter += 1;
}
void _button2(BuildContext context) {
final ViewModelTest vm = context.read();
vm.scrollRequest(100,);
}
void _button3(BuildContext context) {
final ViewModelTest vm = context.read();
vm.scrollRequest(199,);
}
}
final ViewModelTest vm = context.read();
vm.counter += 1;
}
void _button2(BuildContext context) {
final ViewModelTest vm = context.read();
vm.scrollRequest(100,);
}
void _button3(BuildContext context) {
final ViewModelTest vm = context.read();
vm.scrollRequest(199,);
}
}
326デフォルトの名無しさん (アウアウエー Sa23-3/wg)
2022/08/08(月) 23:08:35.92ID:7uJO41n7a class ViewModelTest extends ChangeNotifier {
int get counter => _counter;
int _counter = 0;
final List<GlobalKey> _keyList = List.generate(100, (index) => GlobalKey()).toList();
List<GlobalKey> get keyList => _keyList;
set counter(int value) {
_counter = value;
notifyListeners();
}
scrollRequest(int scrollIndex) {
//this.scrollRequestCallback(scrollIndex);
Scrollable.ensureVisible(keyList[scrollIndex - 100].currentContext!,
duration: const Duration(milliseconds: 300),
curve: Curves.easeOut,
alignment: 0.5,
alignmentPolicy: ScrollPositionAlignmentPolicy.explicit);
}
}
int get counter => _counter;
int _counter = 0;
final List<GlobalKey> _keyList = List.generate(100, (index) => GlobalKey()).toList();
List<GlobalKey> get keyList => _keyList;
set counter(int value) {
_counter = value;
notifyListeners();
}
scrollRequest(int scrollIndex) {
//this.scrollRequestCallback(scrollIndex);
Scrollable.ensureVisible(keyList[scrollIndex - 100].currentContext!,
duration: const Duration(milliseconds: 300),
curve: Curves.easeOut,
alignment: 0.5,
alignmentPolicy: ScrollPositionAlignmentPolicy.explicit);
}
}
327デフォルトの名無しさん (ワッチョイ b190-HX2K)
2022/08/08(月) 23:25:24.19ID:1TtsycsU0 MVVM的にはViewModelはView依存しちゃだめだから、そこら辺はViewModelから追い出さないと
Scrollable.ensureVisibleっておもいっきりViewのメソッドじゃないのか?
Scrollable.ensureVisibleっておもいっきりViewのメソッドじゃないのか?
328デフォルトの名無しさん (ワッチョイ ebbb-VYY0)
2022/08/08(月) 23:34:54.06ID:kXG/j3j10 どっちのイベントもnotifyで通知すればいいじゃない
329デフォルトの名無しさん (ワッチョイ b190-HX2K)
2022/08/08(月) 23:40:23.05ID:1TtsycsU0 ViewModelにcounterと同じようにスクロール位置を表す変数を用意して、それを変更してnotifyListenersする
View側ではその変数の変更を監視して、変わったらスクロールするメソッドを呼ぶ。initStateだか、初期化するときにViewModelを監視してスクロールさせるコードを仕込む(ここはProvider使ったことないからなようわからんので自分で)
View側ではその変数の変更を監視して、変わったらスクロールするメソッドを呼ぶ。initStateだか、初期化するときにViewModelを監視してスクロールさせるコードを仕込む(ここはProvider使ったことないからなようわからんので自分で)
330デフォルトの名無しさん (ワッチョイ b190-HX2K)
2022/08/08(月) 23:57:08.05ID:1TtsycsU0331デフォルトの名無しさん (ワッチョイ 597d-Xua2)
2022/08/09(火) 06:13:57.04ID:wrWGer3C0 ちゃんとしたMVVMになってなくても、コードがきちんと整理されていれば何も問題ないな
332デフォルトの名無しさん (ワッチョイ 597d-Xua2)
2022/08/09(火) 06:19:20.79ID:wrWGer3C0 >>329
自分もパッと思いつくのはこの設計
自分もパッと思いつくのはこの設計
333デフォルトの名無しさん (ワッチョイ 597d-Xua2)
2022/08/09(火) 06:20:31.25ID:wrWGer3C0 あー、でも再描画の時に質問者の想定通りの動作をするかはちょっと分かんないなあ
334デフォルトの名無しさん (ワッチョイ 312f-rSKY)
2022/08/09(火) 08:57:08.88ID:aSkVZgU00 1 controllerで操作できるウィジェットを作る(StatefulWidget)
Scrollable.ensureVisibleはそこに内包
2 ボタンを押した時にcontroller.scrollToItem(100)とか呼ぶ
Scrollable.ensureVisibleはそこに内包
2 ボタンを押した時にcontroller.scrollToItem(100)とか呼ぶ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 経団連会長、日中は建設的対話を 経済3団体が高市首相と初会談も日中関係は話題に登らず… [BFU★]
- 東京株式市場 インバウンド関連株が下落 中国政府の渡航自粛要請で [バイト歴50年★]
- 中国で「クレしん」公開延期 対日報復、エンタメに波及 [蚤の市★]
- 【高市早苗】習近平激怒か [115996789]
- 中国「高市が頭を下げて謝罪しない限り、絶対に許さない」 [329329848]
- 🏡
- 一人で行かないほうがいい板
- 有識者「高市総理が発言を撤回したり、辞職するしかないと言っている人は、それで日中関係が今まで通りになると思ってる?」 [834922174]
- 減税は低所得者差別
