実現したいこと
- 前ページからの値を利用してラジオボタンを生成する(実現済み)
- ラジオボタンが正常に動作する
発生している問題・エラーメッセージ
- ラジオボタンを選択しても画面が更新されない(どのボタンも選択されていない表示のまま)
- groupValue の値は変更されている様子(print で出力して確認済み)
- エラーメッセージはなく、ラジオボタンの選択が画面に反映されていない状況
該当のソースコード
Dart
1import 'package:cloud_firestore/cloud_firestore.dart'; 2import 'package:firebase_auth/firebase_auth.dart'; 3import 'package:flutter/material.dart'; 4 5class CreateAnswerPage extends StatefulWidget { 6 const CreateAnswerPage({super.key}); 7 8 _CreateAnswerPageState createState() => _CreateAnswerPageState(); 9} 10 11class _CreateAnswerPageState extends State<CreateAnswerPage> { 12 13 Widget build(BuildContext context) { 14 List<String> argumentsFromCreatePage = 15 ModalRoute.of(context)?.settings.arguments as List<String>; 16 17 int questionNum = int.parse(argumentsFromCreatePage[0]); 18 int choiceNum = int.parse(argumentsFromCreatePage[1]); 19 20 // answerList[i] : i問目の答え 21 List<int> answerList = new List.generate(questionNum, (index) => 0); 22 // answerGroupValue[i] : i問目のgroupValue 23 List<int> answerGroupValue = new List.generate(questionNum, (index) => 0); 24 25 return Scaffold( 26 appBar: AppBar( 27 title: Text("mark sheet"), 28 ), 29 body: Center( 30 child: SingleChildScrollView( 31 child: Column( 32 children: <Widget>[ 33 Container( 34 child: Column( 35 children: <Widget>[ 36 for (int i = 0; i < questionNum; i++) ...{ 37 Container( 38 child: Row( 39 children: <Widget>[ 40 for (int j = 0; j < choiceNum; j++) ...{ 41 Expanded( 42 child: RadioListTile( 43 title: Text((j + 1).toString()), 44 value: j + 1, 45 groupValue: answerGroupValue[i], 46 onChanged: (value) { 47 setState(() { 48 answerGroupValue[i] = j + 1; 49 print(answerGroupValue[i]); 50 print(value); 51 }); 52 }, 53 ), 54 ), 55 } 56 ], 57 ), 58 ), 59 } 60 ], 61 ), 62 ), 63 // 作成完了ボタン 64 Container( 65 margin: EdgeInsets.all(5), 66 child: SizedBox( 67 width: 200, 68 height: 50, 69 child: ElevatedButton( 70 style: ElevatedButton.styleFrom( 71 shape: RoundedRectangleBorder( 72 borderRadius: BorderRadius.circular(12), 73 ), 74 ), 75 child: Text("作成完了"), 76 onPressed: () { 77 Navigator.pushNamed(context, "/home"); 78 }), 79 ), 80 ), 81 ], 82 ), 83 ), 84 ), 85 ); 86 } 87} 88 89
試したこと
- List ではなく int の変数を groupValue に指定する
groupValue の値は変更されているようだが、画面は更新されない
- 外側を for 文ではなく ListView.builder で実装
groupValue の値は変更されているようだが、画面は更新されない
- for 文を使わず ListView.builder で実装
エラーが出てラジオボタンが表示されない(今回のメインの問題とは関係なさそうなのでスルー)
おそらく動的にラジオボタンを生成することで何か問題が起きていると思うのですが、Flutter に疎いので解決方法が分かりません。
手助けお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/10/12 02:27
2022/10/12 03:56