当我按下按钮时,所有按钮的颜色都会改变。我将变量初始化为true。当我单击时,此值将采用此值并更改颜色。
为什么所有值都改变?我认为我将按下的变量放在了不好的地方。
编辑:
class PollPage extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _Poll();
}
}
class _Poll extends State<PollPage> {
List<String> choix = [];
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: Text("Blackblox"),
leading: Image.asset(
'assets/img/logo_ineat.png',
fit: BoxFit.contain,
height: 32,
),
),
body: new Center(
child: new Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
new Flexible(
child: new Container(
child: new FutureBuilder<List<PollQuestionsDto>>(
future: Poll().getPollQuestions(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasData) {
if (snapshot.data != null) {
return new Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
new Expanded(
child: new ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, index) {
return PollListViewItem(
entitled: snapshot.data[index].entitled,
answers: snapshot.data[index].answers,
);
},
),
),
],
);
}
} else {
new Text("Loading...");
return new CircularProgressIndicator();
}
}),
),
),
new _AnimatedLiquidLinearProgressIndicator(),
new Container(
margin: EdgeInsets.only(right: 10.0),
child: new RaisedButton.icon(
onPressed: () {
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (context) => PollPage()));
//TechnologyPage(listThemes: themes)));
},
label: Text('Suivant'),
icon: Icon(Icons.navigate_next),
),
alignment: Alignment.bottomRight,
),
],
),
),
);
}
}
class PollListViewItem extends StatefulWidget {
final String entitled;
final int id;
final int difficulty;
final List<Answer> answers;
const PollListViewItem(
{Key key, this.id, this.entitled, this.difficulty, this.answers})
: super(key: key);
@override
_PollListViewItemState createState() => _PollListViewItemState();
}
class _PollListViewItemState extends State<PollListViewItem> {
var pressed = true;
@override
Widget build(BuildContext context) {
return Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
new Container(
margin: EdgeInsets.only(top: 10.0, bottom: 10.0, left: 10),
child: new Text(widget.entitled,
style:
new TextStyle(fontSize: 24, fontWeight: FontWeight.bold)),
alignment: Alignment.topCenter),
new Flexible(
child: new Container(
child: new Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
for (var answer in widget.answers)
new Container(
margin: EdgeInsets.only(top: 10.0, bottom: 10.0),
child : new ButtonTheme(
minWidth: 200.0,
height: 100.0,
child: new RaisedButton(
color: pressed ? Colors.pink[100] : Colors.pink,
hoverColor: Colors.pinkAccent,
focusColor: Colors.pinkAccent,
child: new Text(answer.entitled),
onPressed: () => setState(() {
pressed = !pressed;
}),
),
),
),
],
),
),
),
],
);
}
}
当我单击列表中的一个元素时,所有元素都会更改颜色。
我认为这可能有效:
将按钮列表放入ListView.builder中,以便您可以传递索引。详细信息在这里:https://api.flutter.dev/flutter/widgets/ListView-class.html#widgets.ListView.2
myRaisedButton(index) {
RaisedButton(
color: pressed ? Colors.pink[100] : Colors.pink,
hoverColor: Colors.pinkAccent,
focusColor: Colors.pinkAccent,
child: new Text(answer.entitled),
onPressed: () => setState(() {
pressed = !pressed;
}),
);
}
然后:
var pressed = true;
@override
Widget build(BuildContext context) {
return Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
new Container(
margin: EdgeInsets.only(top: 10.0, bottom: 10.0, left: 10),
child: new Text(widget.entitled,
style:
new TextStyle(fontSize: 24, fontWeight: FontWeight.bold)),
alignment: Alignment.topCenter),
new Flexible(
child: new Container(
child: new Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
for (var answer in widget.answers)
new Container(
margin: EdgeInsets.only(top: 10.0, bottom: 10.0),
child : ListView.builder(
padding: const EdgeInsets.all(8),
itemCount: entries.length,
itemBuilder: (BuildContext context, int index) {
return myRaisedButton(index); <--- Here