前提
Flutterのサンプルコードを使用してFlutterの勉強をしているFlutter初心者です。
無限リスト作成にて動作がよくわからない箇所があります。
実現したいこと
Flutterの無限リストのサンプルコードを理解したい
発生している問題・エラーメッセージ
描画のタイミングが12個の英単語をリストに登録後に10個の英単語を一気に画面に描画しているようでした。
ListView.builderにてitemCountをしていない場合、12個のデータでリストを作成するという仕様なのでしょうか。
また、itemCountで「5」を指定してみたのですが、画面に描画されたのは3個でした。
画面上に表示されるのがリストの数より2個足らないのですがこの辺の制御がどこで行われているのかわからない状態です。
この辺の挙動についてご教示いただけますと幸いです。
また以下の書き方についても教えてください。
これはreturn _buildRow(_suggestions[index]);
で呼び出されpairに代入。
WordPairはasPascalCaseを使用するために必要という感じでしょうか。
(プログラミング自体あまりやってなく、構文等わからず、調べてもこの辺の記載方法が何を指しているのかなどわからず。。。)
Dart
1Widget _buildRow(WordPair pair)
該当のソースコード
Dart
1import 'package:flutter/material.dart'; 2import 'package:english_words/english_words.dart'; 3 4void main() => runApp(MyApp()); 5 6class MyApp extends StatelessWidget { 7 8 Widget build(BuildContext context) { 9 return MaterialApp( 10 title: 'Startup Name Generator', 11 home: RandomWords() 12 ); 13 } 14} 15 16class RandomWordsState extends State<RandomWords> { 17 final _suggestions = <WordPair>[]; 18 final _biggerFont = const TextStyle(fontSize: 18.0); 19 20 Widget build(BuildContext context) { 21 return Scaffold( 22 appBar: AppBar( 23 title: Text('Startup Name Generator'), 24 ), 25 body: _buildSuggestions(), //Widget _buildSuggestions()で作成したウィジェット 26 ); 27 } 28 Widget _buildSuggestions() { //_buildSuggestionsというウィジェットを作成する 29 return ListView.builder( //itemBuilderプロパティで返すWidgetを複数作成するWidget 30 padding: const EdgeInsets.all(15.0),//余白の設定。all以外はonly(top,right,bottom,left),symmetry(horizontal,vertical) 31 itemBuilder: (context, i) {//contextは画面表示内容を生成するために必要なもの。iは0から始まり、呼び出されるたびに加算。 32 33 if (i.isOdd) return Divider();//iが奇数だった場合に罫線を入れる 34 final index = i ~/ 2; //~を入れることで整数を返す 35 if (index >= _suggestions.length) { 36 _suggestions.addAll(generateWordPairs().take(10)); 37 } 38 return _buildRow(_suggestions[index]); 39 }); 40 } 41 Widget _buildRow(WordPair pair) { 42 return ListTile( 43 title: Text( 44 pair.asPascalCase, 45 style: _biggerFont, 46 ), 47 ); 48 } 49} 50 51class RandomWords extends StatefulWidget { 52 53 RandomWordsState createState() => new RandomWordsState(); 54}
試したこと
ブレイクポイントにてリスト登録事に動作を止めてどのタイミングで画面に描画されるのかを確認しました。
補足情報(FW/ツールのバージョンなど)
OS:Windows11
IDE:Android Studio
Flutter 3.0.4
english_words-4.0.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/07/31 05:46