Как получить значение выбранного элемента в списке в flutter

#flutter #dart

#flutter #dart

Вопрос:

У меня есть список виджетов (контейнер с другим дочерним элементом Texts), у меня есть карта текстов. Тексты имеют разные возрастные диапазоны.

Я смог изменить цвет выбранного контейнера.

Как я получу значение текста в выбранном контейнере.

Вот список,

 List.generate(
                    ageRange.length,
                      (index) {
                      return AgeSelector(
                        ageRange: ageRange[index],
                        textColor: selectedIndex == index ? Colors.white : Colors.black,
                        containerColor: selectedIndex == index ? kSecondaryColor :  Colors.white,
                        ageChoice: selectedIndex == index ? AgeRange(age: ageRange[index].toString()): Text('none'),
                        press: () {
                          setState(() {
                            selectedIndex = index;
                          });
                        },
                      );
                      }
                  ),
 

вот виджет AgeSelector,

     class AgeSelector extends StatelessWidget {
  const AgeSelector({
    Key key,
    this.ageRange, this.textColor, this.containerColor, this.press, this.ageChoice,
  }) : super(key: key);


  final AgeRange ageRange;
  final Color textColor, containerColor;
  final GestureTapCallback press;
  final String ageChoice;

  @override
  Widget build(BuildContext context) {
    return InkWell(
      onTap: press,
      child: Container(
        height: getProportionateScreenWidth(80),
        width: getProportionateScreenWidth(70),
        decoration: BoxDecoration(
          color: containerColor,
          borderRadius: BorderRadius.circular(15)
        ),
        child: Center(
          child: Text(
            ageRange.age,
            style: TextStyle(
              fontSize: getProportionateScreenWidth(22),
              color: textColor,
              fontWeight: FontWeight.bold
            ),
          ),
        ),
      ),
    );
  }
}
 

И вот карта возрастного диапазона

 class AgeRange {
  final String age;

  AgeRange({
    @required this.age
  });
}

List <AgeRange> ageRange = [age1, age2, age3,age4];

AgeRange age1 = AgeRange(
  age : "10 "
);

AgeRange age2 = AgeRange(
    age : "20 "
);

AgeRange age3 = AgeRange(
    age : "30 "
);

AgeRange age4 = AgeRange(
    age : "40 "
);
 

Вот контейнер

Ответ №1:

Если я вас правильно понял, вам нужно добавить эти строки кода в свой обратный вызов press:

 selectedAge = ageRange[index].age;
 

Комментарии:

1. как я буду отображать выбранный возраст в текстовом виджете?

2. Например: Text(selectedAge) и оберните этот код: selectedAge = ageRange[index].age; с помощью setState()

3. в нем говорится, что selectedAge равно нулю; я определил строку selectedAge и установил selectedAge = AgeRange[index].age; в моем обратном вызове press

4. Спасибо за вашу помощь, я смог ее решить. я определил пустую строку, т.е. Строку selectedAge = ‘ ‘ , selectedAge = AgeRange[index].age; в моем обратном вызове

5. Я просто хотел вам это сказать). Я рад помочь)