Webにフラッターを使い始めたところです。現在、リアルタイムデータベースのデータを表示しようとしています。これは、データをフェッチして表示するコードです。
class Company extends StatelessWidget {
@override
Widget build(BuildContext context) {
DatabaseReference refe = database().ref('Company');
return Scaffold(
appBar: AppBar(),
body: StreamBuilder(
stream: database().ref('Company').onValue,
builder: (context, snap) {
if (snap.hasData) {
List key1 = [];
List item1 = [];
int len;
refe.once("value").then(
(data) {
len = data.snapshot.numChildren();
var a = data.snapshot.toJson();
a.forEach(
(key, values) {
key1.add(key);
item1.add(values);
},
);
},
);
return ListView.builder(
itemCount: len,
itemBuilder: (context, index) {
return Row(
children: [
Expanded(
child: Card(child: Text(item1[index]['compName'])),
),
Expanded(
child: Card(child: Text(item1[index]['companyID'])),
),
//Text('Company Name'),
],
);
},
);
} else
return CircularProgressIndicator();
},
),
);
}
}
コード自体は正常に実行されますが、表示した結果のすぐ下にエラーが発生しました。
次のIndexErrorがスローされました:RangeError(index):インデックスが範囲外です:インデックスは25未満である必要があります:25
誰かがエラーの理由を知っていますか?
StackOverflowへようこそ。これは実際には単純な問題です。@ClaudioCastroが言ったように、範囲外のアイテムにアクセスしようとしています。配列(リスト)があり、その中で使用できないアイテムにアクセスしようとすると発生します。例えば:
List list = [1, 2, 3] // index 0, 1, 2
存在しない要素にアクセスしようとした場合:
print(list[3]) // RangeError (index): Index out of range
@ClaudioCastroも言ったように、これはListViewビルダーからのものであり、おそらく必要以上に大きな数値を与えていitemCount
ます。
len
との値を出力してみてitem1.length
、同じ結果が得られるかどうかを確認します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加