在 Flutter 上仅更新列表视图构建器上的选定位置文本颜色

Update only Selected Position text Color On List View builder on Flutter

您好,我只想更新所选项目的列表视图生成器中的文本颜色。我们怎样才能做到这一点??

我只想更新选定的文本颜色,之前的项目颜色将为黑色。

这是我的代码:

我的第一个小部件是 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}');
                  },
                );
              },
            ),
          ),

我的第二语言SelectedItem :

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,
        ),
      ],
    );
  }
}

我从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,
          ),
        ],
      ),
    );
  }
}