Reputation: 107
I'm currently stuck on the flutter development where I need to retrieve the index from map to other parts of the Scaffold. Is it possible to retrieve the index value from the map below into other parts of Scaffold (Floating Action Button)?
Iterable<int> get positiveIntegers sync* {
int i = articleList.length - 1;
while (true) yield i--;
}
@override
Widget build(BuildContext context) {
int getLength = articleList.length;
var list = positiveIntegers.take(getLength).toList();
return Scaffold(
appBar: AppBar(
title: new Text(
'Popular',
textAlign: TextAlign.center,
),
textTheme: TextTheme(
title: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w700,
color: Colors.black)),
backgroundColor: Colors.white,
centerTitle: true,
elevation: 0.0,
),
body: SwipeStack(
children: list.map((index) {
...
}
),
floatingActionButton: Container(
margin: EdgeInsets.only(top: 25, bottom: 25, left: 20),
alignment: Alignment(0, 1),
child: new Row(
children: <Widget>[
RawMaterialButton(
onPressed: () {
if (isOutOfCards == true) {
setState(() {
isOutOfCards = false;
});
}
},
child: iconBuild(context),
shape: new CircleBorder(),
fillColor: Colors.red[700],
splashColor: Colors.transparent,
highlightColor: Colors.transparent,
padding: const EdgeInsets.all(11),
),
buttonTextBuild(context),
],
),
),
);
}
Widget buttonTextBuild(BuildContext context) {
if (isOutOfCards == false) {
return Container(
child: Text('$cardIndex/${articleList.length}',
textAlign: TextAlign.left,
style: TextStyle(
fontSize: 12.75,
fontWeight: FontWeight.w500,
letterSpacing: 1)));
} else {
return Container(
child: Text('Start Again',
textAlign: TextAlign.left,
style: TextStyle(
fontSize: 12.75,
fontWeight: FontWeight.w500,
letterSpacing: 1)));
}
}
Like the code above I want to retrieve the 'index' from the list.map and pass it to the cardIndex inside buttonTextBuild.
Upvotes: 1
Views: 8331
Reputation: 89926
You can use the enumerate
function from the quiver
package:
children: enumerate(list).map((indexedValue) {
var index = indexedValue.index;
var value = indexedValue.value;
...
}),
Upvotes: 1
Reputation: 3768
You can do this like that:
children: [
for(int index = 0; index < list.length; index++)
Text(list[index])
]
Text widget is just example, you can use whatever widget you need or call function passing list[index] to get item
Upvotes: 2