В этом примере я пытаюсь понять, нужно ли мне использовать FutureBuilder, чтобы значение логического «выбранного» было доступно для моего метода onTap.
return Card(
color: Color.fromARGB(255, 233, 30, 99),
elevation: 5.0,
child: InkWell(
splashColor: Colors.blueGrey,
onTap: () {
return setState(
() {
this.selected = !this.selected;
selected == true
? model.disAllowTouchSounds()
: model.allowTouchSounds();
},
);
},
child: Padding(
padding: EdgeInsets.only(left: 10.0, right: 10.0),
child: StreamBuilder<String>(
stream: stream1,
builder: (context, snapshot1) {
return StreamBuilder<String>(
stream: stream2,
builder: (context, snapshot2) {
if (snapshot1.hasData && snapshot2.hasData) {
if (snapshot1.data
.toString()
.contains('TOUCH SOUNDS ALLOWED') ||
snapshot2.data.toString().contains('DND OFF')) {
selected = false;
return TouchOn();
} else if (snapshot2.data
.toString()
.contains('ALARMS ONLY ON') ||
snapshot2.data.toString().contains('DND ON')) {
selected = true;
isDisabled = true;
return TouchOff();
}
}
Поскольку моему Streambuilder, вероятно, требуется немного времени для сборки, мне интересно, может ли this.selected =! This.selected работать должным образом, как есть.
Причина, по которой я спрашиваю, заключается в том, что мне иногда приходится дважды нажимать для вызова метода disAllowTouchSounds (). В идеале я бы хотел избежать этой ситуации.