#list #flutter #dart #count #items
Вопрос:
Я хочу отобразить номер каждого элемента, который находится в списке, на карточке, я нашел пример, в котором они сказали, что вы должны сделать это с помощью цикла for (), и я сделал именно это, но число вообще не увеличивается, может кто-нибудь показать мне, что я делаю неправильно?
Мой код:
child: ScrollablePositionedList.builder( itemScrollController: itemController, itemCount: selectedChallenge.contestantsList.length, shrinkWrap: true, itemBuilder: (context, index) { final sortedList = selectedChallenge.contestantsList ..sort((itemOne, itemTwo) =gt; itemTwo.points.compareTo(itemOne.points)); final data = sortedList[index]; // My for loop for (var i = 0; i lt; selectedChallenge.contestantsList.length; i ,) { return Card( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ Row( children: [ Padding( padding: const EdgeInsets.all(10.0), child: Text('${i}'), ), SizedBox( height: 35, width: 35, child: CachedNetworkImage( imageUrl: data.avatar, ), ), SizedBox( width: 12, ), Text( data.firstName ' ' data.lastName, ), ], ), Text(data.points.toString()), ], ), ); } }, ),
Что у меня есть:
What I want:
Ответ №1:
Используйте индекс вашего конструктора и удалите цикл for
ScrollablePositionedList.builder( itemScrollController: itemController, itemCount: selectedChallenge.contestantsList.length, shrinkWrap: true, itemBuilder: (context, index) { final sortedList = selectedChallenge.contestantsList ..sort((itemOne, itemTwo) =gt; itemTwo.points.compareTo(itemOne.points)); final data = sortedList[index]; return Card( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ Row( children: [ Padding( padding: const EdgeInsets.all(10.0), child: Text('${index 1}'), ), // rest of the code
Еще одно предложение-сначала отсортировать список, прежде чем создавать его.
// sort the list first in a method or something final sortedList = selectedChallenge.contestantsList ..sort((itemOne, itemTwo) =gt; itemTwo.points.compareTo(itemOne.points)); // build it ScrollablePositionedList.builder( itemScrollController: itemController, itemCount: sortedList.length,
Ответ №2:
Попробуйте приведенный ниже код, надеюсь, он вам поможет.
объявите одну переменную int
int index = 1;
Ваш Виджет.
Text( (index 1).toString(), ),
Весь Виджет.
SingleChildScrollView( child: Column( children: lt;Widgetgt;[ Row( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, children: [ Padding( padding: const EdgeInsetsDirectional.only( top: 18, bottom: 18), child: Text("Powered By:", style: new TextStyle(fontSize: 18.0)), ) ], ), ListView.builder( padding: EdgeInsets.zero, shrinkWrap: true, physics: NeverScrollableScrollPhysics(), itemCount: 10, itemBuilder: (BuildContext context, int index) { return Card( margin: EdgeInsets.zero, elevation: 0.4, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(0), ), child: Container( child: ListTile( leading: Expanded( child: Text( (index 1).toString(), ), ), title: Text( "Coconut Oil", style: TextStyle( color: Colors.black87, fontWeight: FontWeight.bold), ), subtitle: Row( children: lt;Widgetgt;[ Icon(Icons.linear_scale, color: Colors.greenAccent), Text("Go Green!", style: TextStyle( color: Colors.black87)) ], ), ))); }) ], ), ),