简体   繁体   English

颤振中的无线电射弹问题

[英]trouble with radio listtiles in flutter

I'm trying to create a list of a/b choices from an encoded json file. 我正在尝试从编码的json文件创建a / b选择的列表。 So far I've managed to get my radiolisttiles populated correctly but when i select one of the tiles it selects them all simultaneously. 到目前为止,我已经设法正确地填充了我的放射性微粒,但是当我选择其中一个磁贴时,它会同时选择它们。 My question is what am I doing wrong that my radiolisttiles wont operate independently? 我的问题是我的放射性微粒不会独立运行,这是我做错了什么?

edited: what I'm trying to do is get the value of the radio button selection into a list variable(_pick) with : var _pick =data[i].home; 编辑:我想做的是使用var _pick = data [i] .home;将单选按钮选择的值放入列表变量(_pick)中。 print(_pick); 打印(_pick);

here's my code: 这是我的代码:

// radiolisttile radio buttons *** /// return new Column( children: [ // //单选按钮*** ///返回新的Column(子级:[

                        new Text("GAME: ${data[i].game} ${data[i].away.toUpperCase()} at ${data[i].home.toUpperCase()} "),

                        RadioListTile<SingleGame>(
                          subtitle: const Text('record 3- 1'),
                          title: new Text("${data[i].home.toUpperCase()}"),
                          controlAffinity: ListTileControlAffinity.trailing,
                          value: SingleGame.$home,
                          groupValue: data[i].selectedValue,
                          activeColor: Colors.green,
                          onChanged: 
                          (SingleGame value) {
                            setState(() {
                              data[i].selectedValue = SingleGame.$home;
                              var _pick =data[i].home; print(_pick);
                              //var _selectedIndex=_pick;
                              //picksList.add(_pick); 
                            });
                          },

                          selected: data[i].selectedValue == SingleGame.$home,
                        ),
                        ////
                        RadioListTile<SingleGame>(
                          subtitle: const Text('record 3- 1'),
                          title: new Text("${data[i].away.toUpperCase()}"),
                          controlAffinity: ListTileControlAffinity.trailing,
                          value: SingleGame.$away,
                          groupValue: data[i].selectedValue, 
                          activeColor: Colors.green,
                          onChanged: (SingleGame value) {
                            setState(() {
                              data[i].selectedValue = SingleGame.$away;
                              var _pick =data[i].away; print(_pick);
                              // _picksList.add(_pick);
                            });
                          },
                          selected: data[i].selectedValue == SingleGame.$away,

                        ),

I've made some changes in your code, in this you need a list of items in which you can store selected value in model, please check this code, in this ModelVO is added, in which a string is added as selectedValue which will be used to set the proper selected radio. 我对您的代码进行了一些更改,在此您需要一个可以在模型中存储所选值的项目列表,请检查此代码,在此ModelVO中添加,其中将字符串添加为selectedValue ,这将是用于设置正确选择的收音机。

import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:convert';
import 'package:http/http.dart' as http;

class Schedule extends StatefulWidget {
  static const String routeName = "/schedule";

  ScheduleState createState() => new ScheduleState();
}

List<ModelVO> data = new List();

enum SingleGame { $home, $away }

class ScheduleState extends State<Schedule> {
  SingleGame _gamePick = SingleGame.$home;

  Future<String> getJson() async {
    var response = await http.get(
        Uri.encodeFull("https://sheetdb.io/api/v1/red9m0vfm55hy"),
        headers: {"Accept": "application/json"});

    this.setState(() {
      List strList = json.decode(response.body) as List;
      data = strList.map((model) => ModelVO.fromJson(model)).toList();
    });

    print("schedule imported successfully!");
  } //

  @override
  void initState() {
    this.getJson();
  }

  @override
  Widget build(BuildContext context) {
    var scaffold = new Scaffold(
      appBar: new AppBar(
        title: new Text('Schedule'),
        backgroundColor: Colors.green,
      ),
      body: new ListView.separated(
        separatorBuilder: (context, index) => Divider(
              color: Colors.green,
            ),
        itemCount: data == null ? 0 : data.length,
        itemBuilder: (BuildContext context, i) {
          // radiolisttile  ***
          return new Column(
            children: <Widget>[
              RadioListTile<SingleGame>(
                title: new Text("${data[i].home.toUpperCase()}"),
                value: SingleGame.$home,
                groupValue: data[i].selectedValue,
                onChanged: (SingleGame value) {
                  setState(() {
                    data[i].selectedValue = SingleGame.$home;
                  });
                },
                selected: data[i].selectedValue == SingleGame.$home,
              ),
              RadioListTile<SingleGame>(
                title: new Text("${data[i].away.toUpperCase()}"),
                value: SingleGame.$away,
                groupValue: data[i].selectedValue,
                onChanged: (SingleGame value) {
                  setState(() {
                    data[i].selectedValue = SingleGame.$away;
                  });
                },
                selected: data[i].selectedValue == SingleGame.$away,
              ),
            ],
          );
        },
      ),
    );
    return scaffold;
  }
}

class ModelVO {
  String game;
  String home;
  String away;
  String winner;
  String score;
  SingleGame selectedValue;

  ModelVO(
      {this.game,
      this.home,
      this.away,
      this.winner,
      this.score,
      this.selectedValue});

  factory ModelVO.fromJson(Map<String, dynamic> parsedJson) {
    return ModelVO(
        game: parsedJson['game'],
        home: parsedJson['home'],
        away: parsedJson['away'],
        winner: parsedJson['winner'],
        score: parsedJson['score']);
  }

  Map toJson() => {
        "game": game,
        "home": home,
        "away": away,
        "winner": winner,
        "score": score,
        "selectedValue": selectedValue,
      };
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM