Обновите только Цвет текста Выбранной Позиции В построителе Представлений списка на Flutter

#flutter #flutter-listview

Вопрос:

Привет Я хочу обновить цвет текста внутри конструктора представлений списка только для выбранного элемента. Как мы можем это сделать.??

Я просто хочу обновить выбранный цвет текста, и предыдущий цвет элемента будет черным.

это мой код :

мой первый виджет-StatefulWidget

  Expanded(
            flex: 6,
            child: ListView.builder(
              itemCount: languageValue.length,
              shrinkWrap: true,
              scrollDirection: Axis.vertical,
              physics: const BouncingScrollPhysics(),
              itemBuilder: (ctx, index) {
                LanguageCode lang = languageValue[index];
                return _LanguageItemSelection(
                  languageName: lang.value,
                  isSelected: index,
                  onLanguageSelect: () {
                    setState(() {
                      _langValue = lang.value!;
                    });
                    debugPrint('Language Value => ${lang.code}');
                  },
                );
              },
            ),
          ),
 

Мой второй язык выбран :

 class _LanguageItemSelection extends StatelessWidget {
  _LanguageItemSelection({
    Key? key,
    this.languageName,
    this.onLanguageSelect,
    this.isSelected,
  }) : super(key: key);

  String? languageName;
  VoidCallback? onLanguageSelect;
  int? isSelected;
  int _selectedIndex = 0;

  @override
  Widget build(BuildContext context) {
    debugPrint('index => ${isSelected}');
    return Column(
      children: [
        const SizedBox(
          height: 5,
        ),
        InkWell(
          onTap: onLanguageSelect,
          child: Text(
            languageName!,
            textAlign: TextAlign.center,
            style: TextStyle(
              fontSize: 20,
              color: isSelected == _selectedIndex ? Colors.blue : Colors.black,
            ),
          ),
        ),
        const SizedBox(
          height: 5,
        ),
        const Divider(
          color: Colors.grey,
          thickness: 0.8,
        ),
      ],
    );
  }
}
 

Ответ №1:

Я нашел решение у afgprogrammer

У меня есть функция создания внутри statefulwidget и ее работа

 _LanguageItemSelection(String name, int index) {
    return InkWell(
      onTap: () {
        setState(() {
          selectedLanguage = index;
          _langValue = name;
        });
      },
      child: Column(
        children: [
          const SizedBox(
            height: 5,
          ),
          Text(
            name,
            textAlign: TextAlign.center,
            style: TextStyle(
              fontSize: 20,
              color: selectedLanguage == index ? Colors.blue : Colors.black,
            ),
          ),
          const SizedBox(
            height: 5,
          ),
          const Divider(
            color: Colors.grey,
            thickness: 0.8,
          ),
        ],
      ),
    );
  }
}