Flutterやろうよ!!! 2

■ このスレッドは過去ログ倉庫に格納されています
2021/01/30(土) 12:22:39.97ID:4Fw02M/h0
ようこそFlutter野郎どもよ!!!
軽い開発環境でモバイルアプリ開発ができるなんて最高じゃねえか
AndroidもiOSも両方行ける、まさに漢のためのツールだな

https://flutter.dev/

前スレ
Flutterやろうよ!!!
https://mevius.5ch.net/test/read.cgi/tech/1527919660/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2デフォルトの名無しさん (ワッチョイ b501-merL)
垢版 |
2021/01/30(土) 12:27:15.72ID:SLqQC90z0
やらないか?
2021/01/30(土) 12:51:26.51ID:zrh8PmJM0
やろやろ
2021/01/30(土) 19:52:32.59ID:agVwYo8ia
暇人しかこんなんいじれんわ
2021/01/31(日) 12:22:08.37ID:RbdmQEIR0
あいぽんシミュレータがほんと言うこと聞かないわ
MediaQuery.of(context).size
6デフォルトの名無しさん (ワッチョイ 7d01-cVNB)
垢版 |
2021/02/01(月) 01:31:15.91ID:OjiuyGRS0
>>5
え?全く問題ないけど
2021/02/01(月) 17:26:49.29ID:sf34dnVL0
30 Days of Flutter
https://dev.to/danytulumidis/30-days-of-flutter-1b0d
8デフォルトの名無しさん (スフッ Sd0a-o6BT)
垢版 |
2021/02/01(月) 19:00:40.38ID:fVVn4ILfd
>>7
何ぞこれ
9デフォルトの名無しさん (ワッチョイ 7d01-cVNB)
垢版 |
2021/02/01(月) 23:33:09.60ID:OjiuyGRS0
30日じゃ無理だけど、なんとなく作れるようにはなるw
10デフォルトの名無しさん (ワッチョイ 7d01-cVNB)
垢版 |
2021/02/01(月) 23:36:16.35ID:OjiuyGRS0
Swiftより100倍マシw
11デフォルトの名無しさん (ワッチョイ 6a61-M8vF)
垢版 |
2021/02/02(火) 09:15:36.97ID:R8NKZ4Ro0
個人的に、Flutter MobileとWebは馬鹿にしてたけど、Desktopの方は興味がそそられるね。
Electron代替と考えると、ネイティブ対応できる点でかなり優位に立てる、と思う。
2021/02/02(火) 09:25:07.35ID:5V0WMfsF0
こんなところにもFlutterが
Ubuntu Will Get a Brand-New Desktop Installer Using Flutter - 9to5Linux
https://9to5linux.com/ubuntu-will-get-a-brand-new-desktop-installer-using-flutter
2021/02/02(火) 15:23:28.44ID:Uu+RQn9g0
30 Days of Flutter 初日の動画

https://www.youtube.com/watch?v=-feG_q_0j3Y
14デフォルトの名無しさん (ワッチョイ 89e0-merL)
垢版 |
2021/02/03(水) 14:29:07.01ID:FQV+1jnJ0
これ中途半端キャラだろ
ネイティブ経験者が楽するために選択肢でしかなくね
やること難しかったらネイティブ一択だろうし

ネイティブ経験者が要件緩め案件でマルチ→Flutter
Webの人が要件緩めの案件でマルチ→WebView
2021/02/03(水) 17:53:21.15ID:6x3XrIUC0
そりゃフレームワークってのは楽をするためにあるわけで
16デフォルトの名無しさん (ワッチョイ 7d01-cVNB)
垢版 |
2021/02/03(水) 20:52:12.37ID:JkC7MkkM0
>>14
使ってみた?中途半端だと思う?
17デフォルトの名無しさん (ワッチョイ 6a61-M8vF)
垢版 |
2021/02/04(木) 09:20:01.48ID:gdCwlHMB0
モバイルは、どうしてもiOSが〜Androidが〜ってなるからね。
Flutterだけで全部完結できるようなアプリが、どうしも半端になりやすいってのはあるだろう。
18デフォルトの名無しさん (アウアウエー Sa52-2MN+)
垢版 |
2021/02/04(木) 10:31:12.24ID:5YrYKjTfa
>>14
自分で言ってる通り半端かどうかは要件次第だから、
要件に合わない場合使わなければ良いだけでは?
Google Ads
eBay
IKEA
↑でも使われてるようなので、これらを半端というのなら
それで良いと思う笑
19デフォルトの名無しさん (ワッチョイ b501-7mxN)
垢版 |
2021/02/04(木) 10:48:47.88ID:zxbI5nao0
>>17
> Flutterだけで全部完結できるようなアプリ

具体的に「Flutterだけで全部完結」って、例えばどんな場合? Flutterパッケージ
だけ使ってても、中身はNativeコードだぞ?

設定の保存と復元とかに使う「shared_preferences」ってパッケージなんだが、
Android版のReleaseで動かなくて、調べたら不具合あるみたいなんだが?

SharedPreferences not instantiating in release build
ttps://stackoverflow.com/questions/63033700/sharedpreferences-not-instantiating-in-release-build

こういう不具合情報って、どっかに纏まってないのかね? 意識高い系アーリー
アダプターが作った、素人向けの入門サイトや、プラグインの使い方の解説なんて、
他所から拾い集めた情報の劣化コピーで役に立たん。
20デフォルトの名無しさん (ワッチョイ a59b-qCTK)
垢版 |
2021/02/04(木) 11:05:37.12ID:ZzRKCYY/0
COCOAでAndroidだけメール届いてなかったって問題
こういうFlutterみたいなツール使ってれば起きなかったと言える?
21デフォルトの名無しさん (アウアウエー Sa52-2MN+)
垢版 |
2021/02/04(木) 11:28:29.16ID:5YrYKjTfa
>>19
>>意識高い系アーリー
アダプターが作った、素人向けの入門サイトや、プラグインの使い方の解説なんて、
他所から拾い集めた情報の劣化コピーで役に立たん。

素人向け入門サイトに無い情報を
素人向け入門サイトで探しているからでしょ。
22デフォルトの名無しさん (ワッチョイ b501-7mxN)
垢版 |
2021/02/04(木) 11:45:06.25ID:zxbI5nao0
>>20
> Flutterみたいなツール使ってれば起きなかったと言える?

前にリポジトリを見たけど、COCOA は、Xamarin ( C# + .Net Framework )を
使ってるんじゃないかな? バグを出すヤツは、どんな環境でもナナメ上行く
コード書くから関係ないと思う。 あんなバグがずっと放置されてるってことは、
COCOA は、まともにテストやってないんじゃないかな?

>>21
別に入門サイトや素人ブログを漁ってるわけじゃなくて、検索しても引っ掛かる
のは、そういうサイトばかりってことね。
2021/02/04(木) 12:12:51.42ID:gjWC+ihb0
>>19
プラグイン導入する時に変な不具合が放置されてないかGitHub行ってissueを見るけどなぁ。
自分が見つけられるような不具合は誰か見つけてる可能性が高い。
2021/02/04(木) 12:17:32.16ID:gjWC+ihb0
>>20
今回のCOCOAバグはBLEの近距離判断パラメータをiOSで調整したらそのパラメータがAndroidでは不適切で濃厚接触と判断されなかったって事のようなので、別々にそれぞれのネイティブ環境で開発してれば防げたかもね。
25デフォルトの名無しさん (ワッチョイ b501-7mxN)
垢版 |
2021/02/04(木) 12:40:11.56ID:zxbI5nao0
>>24
当初、文科省は、9月リリースで解消したと発表してたみたいだけど、報道では
9月リリース以降に発生と言っていたり、どれが正しい情報なんかねぇ?

濃厚接触者との接触があったかどうかの判断はサーバー側で行って、ユーザーに
通知してくるんだよね? もし、BLEの近接判断検出レベルの問題なら、そもそも
接触(接近)自体が検出されなくて、サーバーにも通知(記録)されていないのでは?
26デフォルトの名無しさん (ワッチョイ b501-7mxN)
垢版 |
2021/02/04(木) 12:44:15.49ID:zxbI5nao0
>>23
そんなに幾つもプラグインを試したわけじゃないけど、どれもなんかしら不具合がある
印象。 あと、更新されてなくて最終リリース後の新しいOSで動かないとか大杉。

結局、公開されているプラグインは「釣り餌」で、ローカルにフォークして、独自に
メンテナンスするしかないのかなって気がする。
2021/02/04(木) 13:48:42.81ID:gjWC+ihb0
>>25
不具合の原因を聞く限り多分クラウド側まで接触通知が上がってなかったんじゃないかな?
一般メディアでは通知がされないって分かりやすい結果だけが報道されてるけど。

どの端末とどの端末がいつ近接してたかってのはコロナ確定前にも情報収集する必要があるはずなので、Androidだけ極端にデータが少ないってすぐに気付きそうなもんだがねぇ。何やってるんだか。
28デフォルトの名無しさん (ワッチョイ 7d01-cVNB)
垢版 |
2021/02/04(木) 15:17:37.66ID:ooZBaTlj0
>>26
ほとんどのプラグインをそのまま使って8アプリリリースしたよ。
規模的には中規模組込みアプリから中規模ECアプリまで。
2021/02/04(木) 19:29:04.26ID:RAyD64IW0
>>25
サーバーで濃厚接触判定なんかしないだろ。
プライバシー情報を極力取得しないんだから陽性判定された人が自分でCOCOAに陽性登録するとスマホ内で生成されたユニークIDがサーバーに保存されるだけ。
陽性判定者のユニークIDをCOCOA利用者全員に配布してクライアントの中で判定すればいいんだし。
2021/02/04(木) 19:38:53.67ID:v9fdGQAX0
Flutterと関係ないからどうでもいいよ
31デフォルトの名無しさん (ワッチョイ b501-7mxN)
垢版 |
2021/02/04(木) 20:07:08.96ID:zxbI5nao0
>>29
陽性判定者のユニークIDをCOCOA利用者全員に配布って、COCOAって本気で
そんな糞実装してるのか?

各自の端末内に、過去に3分以上だっけ? 近接した端末のユニークIDを全部記録
してるの? 最大何件か知らんけど、過去2週間以内分の?

COCOA利用者全員に感染者のユニークIDを配布って時点で、ユニークIDは感染者
個人を特定可能な情報じゃないの? それに、SMSなんか使ってたらユニークIDと
端末の電話番号が判らないと送れないと思うのだが? それとも、端末のアプリ
から定期的にGETしにいくの?
32デフォルトの名無しさん (ワッチョイ b501-7mxN)
垢版 |
2021/02/04(木) 20:17:28.27ID:zxbI5nao0
>>28
どんなプラグイン使ったか判らんと何とも。 JSONいじくるとか、そもそもH/W
寄りのパッケージでなければ、OSの仕様変更の影響を受ける可能性は少ないし、
規模感に至っては、人それぞれだし。

今はDart言語自体にもNull Safetyへの仕様変更が入ってて、ビルド時に次の
リリースで廃止予定ってな警告メッセージが結構出る。 あと、Debugビルドで
問題なく動いていても、Releaseビルドでは動かないパッケージが多い。

Releaseビルドは、単に右上の「DEBUG」を消すんじゃなくて「--release」オプ
ションを付けてビルドするって意味ね。(デフォルトは--debugで省略可)

バイナリサイズが全く違って起動も早くなるのだが、動かないのでは話にならん。
2021/02/04(木) 20:24:42.42ID:gjWC+ihb0
>>29
さすがにそれはないんじゃないかな?
一定時間以上の近接IDがお互いに紐付いてサーバにストアされ、後で陽性登録されたIDに紐付いたIDのスマホに通知されるって事じゃない?
それほど難しい話ではない。不具合は近接したかどうかの判定。
BTのビーコン使うので近接判定はADV_NONCONN_INDのRSSIベースだろうけどそのへんがiOSとAndroidで扱いが違ったんだろうね。
2021/02/04(木) 23:44:56.47ID:RAyD64IW0
Flutterと関係ないね。失礼しました
35デフォルトの名無しさん (ワッチョイ 9701-95wZ)
垢版 |
2021/02/05(金) 10:58:13.21ID:qqlnXlup0
そういえば、Flutterのデスクトップ対応だけど、Windows版もアルファ版のまま
だけど、MacOSや、Linux のデスクトップ対応版の話って聞かないね。

master channelの最新版で「flutter help build」ってやっても、MacOS、Linux用
のビルドオプションすら出てこないし。 dev channelだとあるの?
36デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/05(金) 12:17:38.02ID:sQbQrry70
>>32
警告とか全く出ないんだがw
debugで動いてreleaseで動かないものなんか無いよ
例えば何?
37デフォルトの名無しさん (ワッチョイ 9701-95wZ)
垢版 |
2021/02/05(金) 14:50:12.19ID:qqlnXlup0
>>36
クレクレ君かな? デバッグのやり方を知らないだけでは?

例えば、pingのパッケージは幾つかあるけど「easyping: ^1.0.1」が、Debug
ビルドでは動くが、Releaseビルドでは動かない。 これは特にビルド時の警告
メッセージ出ない。

過去に出ている「Issue」はClosedだけど、関係あるかどうかわからん。

Flutter, ping packets are not sent in release version #13
ttps://github.com/rikulo/socket.io-client-dart/issues/13

ちなみに、flutterをmaster channelに切り替えて、「flutter upgrade」で最新に
更新すると、○○は非推奨で次のリリースで廃止予定ってな警告メッセージが沢山
出るようになる。
38デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/05(金) 15:03:29.18ID:sQbQrry70
>>37
stableでしかビルドしてないからなぁ・・Null安全にそれほどメリット感じてないし・・
Null安全がstableに来るの3/3あたりだっけ?
2021/02/05(金) 19:28:24.19ID:FeqoYHE1F
null safety言語使ったことないだけだろ
40デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/05(金) 20:19:16.88ID:sQbQrry70
swift1からやってるけど・・
2021/02/06(土) 01:33:12.54ID:PZ9Rc0Bf0
みんなflutterのためだけにdart覚えたの?
42デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/06(土) 05:10:52.28ID:pJAT2BWO0
そうだよ。ってかJSとか知ってればdartなんか覚えるの簡単
2021/02/06(土) 06:11:47.13ID:0l8rGy4F0
別にDartつっても特別変な構文があるわけでもないし言語習得にはほとんど苦労しなかったな。
その代わりWidgetの癖の強さは未だに苦労する。
44デフォルトの名無しさん (ワッチョイ 9701-95wZ)
垢版 |
2021/02/06(土) 15:25:59.94ID:F0c/bXFP0
>>42-43
Dart言語で、ListView.builder()の、itemBuilderに渡す関数を、_HogeHogeState
クラスのメンバ変数(例:int _listMode)の値で切り替えたいんだけど、Dartで一番
スマートに記述するには、どう書けばいいの?

できれば、関数ポインタの配列を定義して、_listModeをインデックスとして、
アクセスしたいんだが?

C/C++で普通にできることができなくて、なんかイラつく。
45デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/06(土) 15:39:25.07ID:pJAT2BWO0
return widgets[index];
46デフォルトの名無しさん (ワッチョイ 9701-95wZ)
垢版 |
2021/02/06(土) 15:41:08.20ID:F0c/bXFP0
ちなみに抜粋して書くと、今は、

Widget _getlistview() {
switch(_listMode)
{
case 0:
return ListView.builder(
itemBuilder: _buildSimpleListItem,
// 中略
break;
case 1:
return ListView.builder(
itemBuilder: _buildIconListItem,
// 中略
break;
}
}

Widget build(BuildContext context){
log("*** _DemoPage3State::build() ***");
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: _getlistview(),
);
}

って書いてる。 itemBuilder部分に、switch文の条件分岐を入れようとしたら、
エラーになった。
47デフォルトの名無しさん (ワッチョイ 9701-95wZ)
垢版 |
2021/02/06(土) 15:42:59.81ID:F0c/bXFP0
>>45
アクセス部分はそうだけど、知りたいのは、widgets[]の初期化部分なんだが?
48デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/06(土) 15:50:37.78ID:pJAT2BWO0
>>47
ItemBuilderは1つでいい。例えば、
widgets[0] = Column→list
widgets[1] = Column→icon
49デフォルトの名無しさん (ワッチョイ 9701-95wZ)
垢版 |
2021/02/06(土) 15:53:57.98ID:F0c/bXFP0
>>48
そんなん、中身固定の初心者向けのサンプルレベルやん。
やりたいのは、ListViewの見せ方を動的に変えたいってことだよ。

final var widgets[] = {
_buildSimpleListItem,
_buildIconListItem,
// 以下略
};

Widget _buildSimpleListItem(int indexItem) {
return Text(_listItems[indexItem]);
};

Widget _buildIconListItem(int indexItem) {
return ListTile{
leading: icon,
title:Text(_listItems[indexItem]);
);
};

てな書き方でいけるんだっけ?
50デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/06(土) 15:59:48.39ID:pJAT2BWO0
ItemBuilder1つでそのListViewのインスタンスをプロパティで持つなりしてsetStateすればいくらでも見た目変えられるだろ、頭使え
51デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/06(土) 16:01:15.50ID:pJAT2BWO0
ListViewに渡すパラメータをプロパティで持つ だった
52デフォルトの名無しさん (ワッチョイ 9701-95wZ)
垢版 |
2021/02/06(土) 16:11:36.00ID:F0c/bXFP0
>>50-51
全く理解してないことが良く判った。

リストに表示する中身を、_listItems (例: List<String>) で保持して、_listMode
は、同じPage内に配置した DropdownButton 等と紐付いていて、選択を切り替え
た時点でsetState()してページ内のListViewの見せ方を変えたいの。

一応、やりたいこと自体は、糞な書き方でできることは確認してる。 説明の
都合上、ScaffoldのbodyはListViewだけにしてるけど、実際はもっと複雑。
53デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/06(土) 16:16:14.01ID:pJAT2BWO0
>>52
だから、ListViewは1つでreturnする中身を変えりゃいいじゃん
54デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/06(土) 16:23:30.72ID:pJAT2BWO0
return widgets[_listMode][index]; で簡単に出来るだろw
55デフォルトの名無しさん (ワッチョイ 9701-95wZ)
垢版 |
2021/02/06(土) 16:41:21.24ID:F0c/bXFP0
>>53

例えば、ListView.builderを1つにして、

body: ListView.builder(
itemBuilder: _getlistItem,
// 略
);

Widget _getlistItem(int indexItem) {
switch(_listMode)
{
case 0:
return Text(_listItems[indexItem]);
// 中略
break;
case 1:
return ListTile{
leading: icon,
title:Text(_listItems[indexItem]));
break;
}

と、itemBuilderに渡す関数も共通化して、その関数内でswitch〜caseで分岐して、
返すWidgetを変えてもいいんだが、本当にやりたいのは、switch〜caseを書く
のではなく、Widgetを返す関数配列にしたいってこと。
56デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/06(土) 16:44:34.07ID:pJAT2BWO0
>>55
ならsetStateする前にListViewしたいwidget全要素作れば?
57デフォルトの名無しさん (ワッチョイ 9701-95wZ)
垢版 |
2021/02/06(土) 16:47:35.00ID:F0c/bXFP0
>>54
だから、widgets[][]を、どこで初期化するの?
中身はファイル名の一覧とか可変が前提だよ。

それと、使うWidgetは、表示スタイルによってどれか1つで済むのに、二重のfor
ループを廻して、毎回全部を作りなおすのか? 間違いではないが、糞プログラマ
認定だな。
58デフォルトの名無しさん (ワッチョイ 9701-95wZ)
垢版 |
2021/02/06(土) 16:49:29.40ID:F0c/bXFP0
>>56
なぜ、ListView.builderを使うのか、理解していないことが良く判った。
59デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/06(土) 17:03:39.75ID:pJAT2BWO0
>>57
いや、 ListViewだって可変なら毎回作るんだよ。
でも2重全部は作らない。どちらか。
どっちがクソプロだよ。もう教えてやんねーよクズ
60デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/06(土) 17:12:16.78ID:pJAT2BWO0
> だから、widgets[][]を、どこで初期化するの?
setStateする前だって言ってんだろ。

var list = []; って知ってる?全部作らなくていいの分かる?
その態度で、ど素人かよ・・向いてないから辞めな
2021/02/06(土) 17:22:25.88ID:MVtJKBn70
>>49
別にこれでよくね?
IndexedWidgetBuilder関数自体をswitchで返すようにしてListView.Builderの記述を一つにするとか細かいのはあるが

つか、widgets[]何かいらんだろ?
2021/02/06(土) 17:25:30.28ID:MVtJKBn70
今回はListView同士だが、表示モードでリスト表示やグリッド表示切り替えたりする機能じ実装したいんだろ?
2021/02/06(土) 17:28:26.46ID:MVtJKBn70
ごめん>>55とか見てなかった
64デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/06(土) 17:31:01.68ID:pJAT2BWO0
そもそもitemBuilderに渡せるクロージャの型は決まってるのに、そこでやりたがろうとするのか間違い。
returnする中身を_listModeで変えりゃいいだけ。
2021/02/06(土) 17:36:00.31ID:MVtJKBn70
とりあえず、>>55はdartで十分スマートだから問題ないといっておく

Widgetを返す関数配列とか余計なことすると一人よがりのプログラムになりそうとだけ言っておく

仮にそこまでやって何の利点があるのか知らんが
66デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/06(土) 17:43:49.14ID:pJAT2BWO0
もしもlistの件数が多いなら、flutterはreusableCellみたいな機構/考え方がないから、ScrollControllerでスクロールを監視して、止まったら実widgetを生成するとかの施策を作る方がよっぽどメリットある。
さらにそんな感じのListViewが複数あるならリビルト抑制のためにInheritedModel化しなければならない。
67デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/06(土) 19:10:30.57ID:pJAT2BWO0
糞プログラマwのオレが余計なアドバイスしちゃったかなw
まぁ3年くらいは諦めずに続けてみる事だwww
2021/02/06(土) 19:29:48.12ID:0l8rGy4F0
>>55
dartのwidgetはプロパティ変更のためにはwidgetのnewが必ず伴わないといけないので、widget配列にインスタンスを先に定義してその参照を返すだけではrebuildされず画面更新されない。
コンストラクタのメンバーにFuture渡すとかすればよろし。
69デフォルトの名無しさん (ワッチョイ 9701-95wZ)
垢版 |
2021/02/06(土) 22:06:19.05ID:F0c/bXFP0
>>68
とりあえず、>>49のwidgets[]は、型は便宜上varとしているが、Widgetを返す
関数を保持されることを意図したつもり。

Widget _buildSimpleListItem(int indexItem)や、Widget _buildIconListItem
(int indexItem)は、Widgetを返す関数の実装。

配列要素である関数自体は変わらないが定数ではないからconstではなく、final を
付けてみたが、final付けるとエラーになるかも。

ListView.builder()は、itemBuilderに渡す関数を.builder内部で繰り返し呼び出して、
Widgetを作るので、わざわざwidgets[][]なんて持つ必要がないという理解。

当然、ListView.builder()はHogeHogePageのbuild内で呼び出しているので、
_listModeと紐付いたDropdownButtonのonChanged: で、

(value) => setState(() { _listMode = menu.indexOf(value); } ),

てな感じで更新を掛ける。
70デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/06(土) 22:16:32.47ID:pJAT2BWO0
>Widgetを返す関数
これが無駄
71デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/06(土) 23:04:48.80ID:pJAT2BWO0
ListView.builder() はListView内のセル1つのコンテンツを作るわけじゃなくて、ListViewという仕組みを作るものだということを理解しよう。
そのコンテンツはreturnするwidgetによって切り替えよう。
72デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/07(日) 00:02:01.56ID:AkpxQPsh0
どうしてもitemBuilderを切り替えたいなら、
var _itemBuilders = <Widget Function(BuildContext, int)>[];
・・
itemBuilder: _itemBuilders[_listMode]
・・
ただ、itemCount:の明示が分かりにくくなり(がち)でバグの元になるので普通はこう書かないだろう。。
73デフォルトの名無しさん (ワッチョイ 9701-95wZ)
垢版 |
2021/02/07(日) 01:02:21.41ID:5iRjnGor0
>>70-72
何も理解しとらんな。ListView.builder()自体は、ListViewを返すが、itemBuilder
が、ListView内に表示する個々のアイテム(Widget)を作るための関数だよ。 

内部実装まで追いかけてはいないが、実際は、ListView表示に必要なスクロール範囲
内に見える部分のindex〜index+nの分だけアイテムを作って描画しているのでは
ないかと思う。 これはWindowsの仮想リストビューと同じような実装で、珍しく
もない。

だからListView.builder()の引数、itemCount: null, で無制限スクロールできる。
74デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/07(日) 01:14:57.97ID:AkpxQPsh0
ItemBuilderは1コンテンツのコンテナを提供してるだけだアホ
75デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/07(日) 01:22:23.18ID:AkpxQPsh0
>内部実装まで追いかけてはいないが、実際は、ListView表示に必要なスクロール範囲内に見える部分のindex〜index+nの分だけアイテムを作って描画しているのでは
ないかと思う。

スクロールした分全部作ってる。見えてる分じゃない。
76デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/07(日) 01:24:19.39ID:AkpxQPsh0
>>73
何も理解してないのはオマエw
77デフォルトの名無しさん (ワッチョイ 9701-95wZ)
垢版 |
2021/02/07(日) 01:38:30.26ID:5iRjnGor0
>>74-76
return widget[][];なんて書く低能は、いい加減消えてくれないかな?

スクロールした分を全部作り直してたら、アイテム数が増えればリソース食うし、
等比級数的に遅くなるから、必要な部分だけデータを要求して再描画するのは
ごく普通の実装なのだが?
78デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/07(日) 01:44:43.73ID:AkpxQPsh0
>>77
オマエが消えろカス
79デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/07(日) 01:46:24.73ID:AkpxQPsh0
>>77
あとお前ITセンス無いよ
2021/02/07(日) 17:16:20.79ID:NoxA0gm+0
休日って感じでええな
2021/02/07(日) 17:37:11.35ID:VQW6QCV3M
Dart「私のために争わないで!」
2021/02/08(月) 21:04:17.25ID:fXU526Wm0
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);


この
const MyApp({Key? key}) : super(key: key);
っていろんなサンプルコードにおまじないのように存在しますが
何の意味があるコードでしょうか?
2021/02/08(月) 22:16:34.05ID:U8Md53kEM
それがコンストラクタであることはわかる?
2021/02/08(月) 22:23:55.78ID:fXU526Wm0
わかりません><
2021/02/08(月) 22:50:39.51ID:Vrbohkxj0
>>84
ほかの言語の基礎知識なしに
Dart/Flutterから始めるからそうなるんじゃないかね
2021/02/09(火) 00:49:39.26ID:bUho71ueM
いつみてもnamedの書き方がキモいな
💩dartは
2021/02/09(火) 05:41:27.49ID:4s6aj3EG0
>>82
継承元のコンストラクタにkeyを渡してるだけ。
2021/02/09(火) 08:27:56.90ID:GPf+a2VOd
そもそもkeyて何に使うの?
89デフォルトの名無しさん (スフッ Sdbf-smwP)
垢版 |
2021/02/09(火) 11:09:42.19ID:QUiKVEcEd
>>85
それは何でも同じやん。
2021/02/09(火) 11:25:03.68ID:nKesl+r+0
>>89
同じではないぞ
Dart使ってる人はほかの言語をマスターしてる人がほとんどだろう
Dartは入門のサイトや書籍も少ない
Dartは初心者が最初にやるべき言語ではない
2021/02/09(火) 11:50:18.06ID:4s6aj3EG0
>>88
俺はこの動画見て理解した
https://api.flutter.dev/flutter/foundation/Key-class.html
2021/02/09(火) 12:49:34.02ID:anEuZ52ed
>>91
横からだけどありがとう
93デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/09(火) 15:11:33.26ID:ANc0E1ay0
flutterはともかくdartは分かりやすい。初学者向け。
94デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/09(火) 15:19:45.18ID:ANc0E1ay0
ただ仕組みを理解してないと結構勘違いする。
例えばプラグインを作る時のevent subscriptionはbroadcastStreamなのでcontroller.closeが出来ない。
nullが返ってきたら終わりみたいな処理を待つには自分でStreamControllerを作ってそのStreamをFuture.waitするとか。
95デフォルトの名無しさん (ワッチョイ 9701-95wZ)
垢版 |
2021/02/09(火) 18:11:24.23ID:KQnFnSaF0
>>93-94
シッタカ坊や、まだいたのかぃ?

>>74-76
> スクロールした分全部作ってる。見えてる分じゃない。
> 何も理解してないのはオマエw

とりあえず、>>49 のサンプルを改造して、ListView.builder()のitemBuilder
に指定したコールバック関数が、いつのタイミングで、何回呼び出されているか
確認できるよう、

Widget _buildSimpleListItem(BuildContext context, int index)
{
print("_buildSimpleListItem(${index})");
return Text(_listItems[index]);
}

として、ListView.builder()のitemCount: に、画面に絶対収まり切らない数
(適当に500)を指定した、デバッグ実行してみた。
96デフォルトの名無しさん (ワッチョイ 9701-95wZ)
垢版 |
2021/02/09(火) 18:11:38.83ID:KQnFnSaF0
案の定、自分の想像通り全てのアイテムは作成していなかった。 ただ、なぜか
判らないが、リスト表示範囲にピッタリ収まる数より少し余分に呼ばれていた。

どうやら、ListViewの実際の表示サイズではなく、AppBar等を含めたディス
プレイの表示ピクセル数に収まるアイテム数のWidgetを作成しているっぽい。

また、スクロール操作した際も、上/下方向とも移動した行数の分だけ呼ばれ、
スクロール前後で範囲から外れない分はおそらく保持されたままで呼ばれなかった。

「ITセンス無い」なんて言っちゃう時点で、いつもの意識高い系だと思ったが、
これで(ワッチョイ d701-kh8G) が、フカシFlutter野郎であると証明できた。

さぁ、キミも手元のFlutter環境で、今すぐ確認してみよう!

プライドだけ高いお馬鹿センセイの弟子にならないよう、くれぐれもチューイせよ!
97デフォルトの名無しさん (ワッチョイ 9701-6qHG)
垢版 |
2021/02/09(火) 18:26:56.12ID:qUmf+U4D0
仮想リスト・テクノロジー™では?
2021/02/09(火) 19:08:59.58ID:qBw0aS8i0
そりゃすぐにスクロール初めてもフレーム落ちしないように余剰に前後キャッシュするだろうよ
AndroidのListViewもキャッシュするよ
2021/02/09(火) 19:26:05.29ID:4s6aj3EG0
>>55
そういや俺も初心者の頃、スキン切り替え実装するために同じようにwidget配列作って失敗したなと思い出して見直したら、あなたと同じようにbuild内で普通にswitch分岐してたわ。
今作るならインスタンス配列じゃなくてtype配列を作ってその型を生成するように実装するかな?もちろん配列のそれぞれのclassは同じclassから継承しておいて。
dartもtypeからインスタンス生成できるとは思うんだけどやったことはないので具体的なやり方は知らん。
2021/02/09(火) 19:35:55.01ID:4s6aj3EG0
>>99
あ、widgetを返す関数はStatefulWidgetとかに追い出すこと前提な。
101デフォルトの名無しさん (ワッチョイ d701-kh8G)
垢版 |
2021/02/09(火) 21:47:45.51ID:ANc0E1ay0
>>96
モノホンのバカだったのか・・
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況