Flutter OnSelected - как получить доступ к «этому» - PullRequest
0 голосов
/ 16 февраля 2020

Мне нужно знать, как получить доступ к «this» при использовании функции onSelected в моей кнопке.

Используя последний флаттер, у меня есть следующий код:

                        FilterChip(
                          backgroundColor: _colorNavFilter,
                          padding: EdgeInsets.only(
                              top: 8, right: 4, bottom: 8, left: 12),
                          elevation: 2,
                          avatar: CircleAvatar(
                            backgroundColor: Colors.transparent,
                            child: _filter[index]['icon'],
                          ),
                          label: Text(
                            _filter[index]['title'],
                            style: TextStyle(color: _colorNav),
                          ),
                          onSelected: (bool value) {
                            setState(() {
                              if (postCategory == 'false') {
                                postCategory = _filter[index]['title'];
                                _colorNav = Colors.black; // This will end up coloring all buttons in the list - but I want only this specific one 
                                _colorNavFilter = Colors.black;
                              } else {
                                postCategory = 'false';
                                _colorNav = _colorBlue;
                                _colorNavFilter = Colors.white;
                              }
                            });
                          },
                        );

Проблема в том, что все кнопки, имеющие эту переменную, будут окрашены в черный цвет. Я знаю, что могу определить отдельную переменную для каждой кнопки, а затем изменить ее с помощью индекса, но это выглядит довольно уродливо. Разве я не могу сделать что-то вроде «this.color = Colors.black»?

1 Ответ

1 голос
/ 16 февраля 2020

onSelected правильно, но вы должны использовать его в сочетании с selected. Попробуйте это:

bool selectedValue = false;

FilterChip(
  backgroundColor: selectedValue? Colors.black : Colors.white,
  selected: selectedValue, // This is important
  padding: EdgeInsets.only(
  top: 8, right: 4, bottom: 8, left: 12),
  elevation: 2,
  avatar: CircleAvatar(
    backgroundColor: Colors.transparent,
    child: _filter[index]['icon'],
    ),
  label: Text(
    _filter[index]['title'],
    style: TextStyle(color: selectedValue? Colors.black : _colorBlue),
  ),
  onSelected: (bool value) {
    setState(() {
      if (postCategory == 'false') {
        postCategory = _filter[index]['title'];
        selectedValue = true;
      } else {
        postCategory = 'false';
        selectedValue = false;
      }
    });
  },
);
...