Как я могу заставить виджет переключателя обновляться только при соблюдении заданных параметров - PullRequest
0 голосов
/ 02 мая 2020

В настоящее время я работаю над простым списком переключателей, но я не хочу, чтобы у них была возможность отключить их все одновременно, возможно ли это достичь, и если как мне это сделать?

1 Ответ

1 голос
/ 03 мая 2020

вы можете отследить, какие переключатели включены, с помощью List<bool> внутри вашего StatefulWidget и принять решение об изменении состояния любого переключателя в соответствии с состоянием других переключателей, которые вы получаете из массива, что-то вроде это:

class Test extends StatefulWidget {
  @override
  _TestState createState() => _TestState();
}

class _TestState extends State<Test> {
  List<bool> switchStates;

  @override
  void initState() {
    switchStates = List<bool>(10)..fillRange(0, 10,false);
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: 10,
      itemBuilder: (ctx, index) => Switch(
        value: switchStates[index],
        onChanged: (newValue){
          if(newValue)//user is trying to set switch state to true, so we don't check value of other switches as this action is always allowed
            {
            switchStates[index] = newValue;//on
            }
          else if(!newValue)//user is trying to set switch to false, so we do a check on all other switches before we turn it off
          {
            bool areAllOff = true;//suppose all are off
            for(final state in switchStates){
              if(state)//if at least one is on, so we can turn current switch off
              switchStates[index]=newValue;//off
              break;
            }
          }

        },
      ),
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...