`List<Widget> _dataList = [
DataCard(
start: 0,
end: 6,
),
DataCard(
start: 2,
end: 8,
),
DataCard(
start: 4,
end: 20,
)
];`
dataCard
基本上返回一个GestureDetector
小部件,其中Card
小部件显示开始和结束值。
我想要做的是在屏幕上显示小部件后更改开始/结束的值。如何访问列表中任何dataCard
的属性?
这是DataCard类:
class DataCard extends StatelessWidget {
DataCard({this.start, this.end, this.key});
final int start;
final int end;
final Key key;
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
print(key);
},
child: Card(
key: key,
child: Padding(
padding: const EdgeInsets.all(20.0),
child: Column(
children: <Widget>[
Text(
'Start: $start',
style: TextStyle(
fontSize: 40,
),
),
Text(
'End: $end',
style: TextStyle(
fontSize: 40,
),
),
],
),
),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
),
);
}
}
DataCard
小部件的开始和结束值。有没有办法做到这一点?谢谢!DataCard
,其中开始和结束值也由他们确定。之后,DataCard
的值将在没有用户干预的情况下进行调整。答案 0 :(得分:3)
您的问题与称为应用程序状态管理的大主题有关。
从有状态小部件,继承的小部件,提供程序包和BLoC模式开始了解它。 (从最简单到最困难)
这是由flutter团队制作的有关有状态小部件https://youtu.be/AqCMFXEmf3w的视频。
回到您的问题,使用有状态小部件的简单示例:
class _MyHomePageState extends State<MyHomePage> {
var list = <List<int>>[
[1, 6],
[2, 8],
[4, 20]
];
void _incrementSecondCardStartParametr() {
setState(() {
list[1][0] += 1;
});
}
Function decrementEndParametr(idx) => () => setState((){
list[idx][1] -= 1;
});
@override
Widget build(BuildContext context) {
List<Widget> _widgets = list
.map((data) => DataCard(
start: data[0],
end: data[1],
decrementEndParametr: decrementEndParametr(list.indexOf(data))
))
.toList();
return Scaffold(
appBar: AppBar(
title: Text('List Example'),
),
body: Center(
child: Column(children: _widgets),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementSecondCardStartParametr,
child: Icon(Icons.add),
),
);
}
}
class DataCard extends StatelessWidget {
DataCard({this.start, this.end, this.key, this.decrementEndParametr});
final Function decrementEndParametr;
..
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: decrementEndParametr,
..