質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

Q&A

解決済

1回答

2035閲覧

【Flutter】ListViewが上手く機能しない

smilax

総合スコア23

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

0グッド

0クリップ

投稿2020/09/22 08:15

要素の数が不特定なListViewを実装しようとしているのですが、

Every child of a RenderCustomMultiChildLayoutBox must have an ID in its parent data.

といったエラーがでてしまいます。
下記のコードは上から順にコンポーネントとして読み込んでいます。

dart

1class TermsScreen extends StatelessWidget { 2 3 Widget build(BuildContext context) { 4 return ChangeNotifierProvider<TermsChangeNotifier>( 5 create: (context) => TermsChangeNotifier(), 6 child: Scaffold( 7 appBar: PlainHeader(text: "利用規約"), 8 body: Consumer<TermsChangeNotifier>(builder: (context, value, child) { 9 return Expanded( 10 child: DocumentFrame( 11 title: "サービス利用規約", 12 titleList: value.titleList, 13 textList: value.bodyList 14 ), 15 ); 16 }), 17 ), 18 ); 19 } 20}

dart

1import 'package:flutter/material.dart'; 2import 'package:flutter/widgets.dart'; 3import 'package:talent/view/screen/terms/component/DocumentItem.dart'; 4// import 'package:talent/view/component/RoundRectButtonBlue.dart'; 5 6class DocumentFrame extends StatelessWidget { 7 final String title; 8 final List<String> titleList; 9 final List<String> textList; 10 11 const DocumentFrame({Key key, this.title, this.titleList, this.textList}) : super(key: key); 12 13 14 Widget build(BuildContext context) { 15 return Center( 16 child: Column(children: <Widget>[ 17 Container( 18 padding: EdgeInsets.only(top: 40.0, bottom: 40.0), 19 width: 303.0, 20 height: 462.0, 21 child: Scrollbar( 22 child: Padding( 23 padding: EdgeInsets.only(right: 5.0), 24 child: SingleChildScrollView( 25 child: Column( 26 crossAxisAlignment: CrossAxisAlignment.start, 27 children: <Widget>[ 28 Center( 29 child: Text(title, 30 style: TextStyle( 31 fontSize: 18.0, 32 )), 33 ), 34 SizedBox(height: 10.0), 35 Text("", style: Theme.of(context).textTheme.headline4), 36 SizedBox(height: 10.0), 37 Row(children: [ 38 Text("こちらをご参照ください:", style: Theme.of(context).textTheme.bodyText2), 39 Text("", style: TextStyle(fontSize: Theme.of(context).textTheme.bodyText2.fontSize, color: Colors.red)) 40 ]), 41 ListView.builder( 42 itemBuilder: (BuildContext context, int index) { 43 return DocumentItem( 44 title: titleList[index], 45 text: textList[index], 46 ); 47 }, 48 itemCount: 5) 49 ], 50 ) 51 ) 52 ), 53 ) 54 ), 55 Container( 56 width: 140.0, 57 height: 40.0, 58 // child: RoundRectButtonBlue(text: "戻る"), 59 ) 60 ]), 61 ); 62 } 63}

dart

1import 'package:flutter/material.dart'; 2import 'package:flutter/widgets.dart'; 3// import 'package:talent/view/component/RoundRectButtonBlue.dart'; 4 5class DocumentItem extends StatelessWidget { 6 final String title; 7 final String text; 8 9 const DocumentItem({Key key, this.title, this.text}) : super(key: key); 10 11 12 Widget build(BuildContext context) { 13 return Column( 14 children: [ 15 Text(title, style: Theme.of(context).textTheme.bodyText2), 16 Text(text, style: Theme.of(context).textTheme.bodyText2), 17 ] 18 ); 19 } 20} 21

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

質問から1日以上経っているので、もしかしたらコードが変わってしまっているかもしれませんが、

もし元のコードのまま残っているのであれば、この辺を試してみてください。


TermsScreen部分

  • ExpandedCenterなどに変える
  • またはExpanded自体を取り除く

diff

1class TermsScreen extends StatelessWidget { 2 @override 3 Widget build(BuildContext context) { 4 return ChangeNotifierProvider<TermsChangeNotifier>( 5 create: (context) => TermsChangeNotifier(), 6 child: Scaffold( 7 appBar: PlainHeader(text: "利用規約"), 8 body: Consumer<TermsChangeNotifier>( 9 builder: (context, value, child) { 10- return Expanded( 11+ return Center( 12 child: DocumentFrame( 13 title: "サービス利用規約", 14 titleList: value.titleList, 15 textList: value.bodyList, 16 ), 17 ); 18 }, 19 ), 20 ), 21 ); 22 } 23}

DocumentFrame内のListView部分

  • itemCounttitleListの長さに一致させる
  • shrinkWraptrueにする

diff

1ListView.builder( 2+ shrinkWrap: true, 3 itemBuilder: (BuildContext context, int index) { 4 return DocumentItem( 5 title: titleList[index], 6 text: textList[index], 7 ); 8 }, 9- itemCount: 5, 10+ itemCount: textList.length, 11), 12

投稿2020/09/23 10:41

nskhei

総合スコア704

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問