flutter: рандомизировать количество элементов в представлении списка

#flutter

#трепетание

Вопрос:

я реализовал ListView в flutter, и он показывает количество продуктов = 5, но я хотел, чтобы эти 5 элементов генерировались случайным образом, есть ли способ это сделать? заранее спасибо ps: я пробовал код в зависимости от ответа ниже, но он выдает количество ошибок! = null

 Expanded(
                      child: SizedBox(
                          height: 210.0,
                          child: FutureBuilder(
                            future: httpService.getProducts(),
                            builder:
                                (BuildContext context, AsyncSnapshot snapshot) {
                              if (snapshot.data == null) {
                                return Container(
                                  child: Center(
                                    child: Text('Loading...'),
                                  ),
                                );
                              } else if (snapshot.data.length == 0) {
                                return Container(
                                  child: Center(
                                    child: Center(
                                      child: Text('No offers'),
                                    ),
                                  ),
                                );
                              } else {
                            
                               var rndItems  = snapshot.data.shuffle();
                                         return ListView.separated(
                                    separatorBuilder:
                                        (BuildContext context, int index) {
                                      return SizedBox(height: 3);
                                    },
                                    scrollDirection: Axis.horizontal,
                                    shrinkWrap: true,
                                    itemCount: rndItems ,
                                    itemBuilder: (ctx, i) => (PdtItem(
                                        title: snapshot.data[i].title,
                                        imgUrl: snapshot.data[i].imgUrl,
                                        price: snapshot.data[i].price,
                                        pdt2: snapshot.data[i])),
                                  );  

Комментарии:

1. Вы имеете в виду, что вам нужен снимок. данные должны быть перечислены в случайном порядке?

2. да, точно, я хочу, чтобы itemcount равнялся случайным элементам из snapshot.data

3. Попробуйте itemCount: Random.nextInt(snapshot.data.length)

4. отображается ошибка, член экземпляра ‘nextInt’ не может быть доступен с помощью статического доступа.

Ответ №1:

Если вам нужны элементы из моментального снимка.данные должны быть перечислены в случайном порядке, затем вы можете перетасовать данные следующим образом :

 ....
snapshot.data.shuffle();
....
  

Если вы хотите отображать случайное количество элементов каждый раз, то

 ....
import 'dart:math';
....
var rng = new Random();
var rndItems = rng.nextInt(snapshot.data.length);
....

.....                                    
                    scrollDirectionn: Axis.horizontal,
                    shrinkWrap: true,
                    itemCount: rndItems,                                                          
                    itemBuilderr: (ctx, i) => (PdtItem(
.....
  

Комментарии:

1. спасибо за ответ, я попробовал второй, и он показывает мне ошибку, элемент экземпляра ‘rng’ недоступен в инициализаторе. Попробуйте заменить ссылку на элемент экземпляра другим выражением

2. Вы добавили строку >>> import ‘dart:math’; << в верхней части кода?

3. Я также попробовал ItemCount:snapshot.data.shuffle(), и это не сработало, сообщение об ошибке: ItemCount!= null

4. Если вы добавляете импорт, добавьте строку >>> var rng = new Random(); var rndItems = rng.nextInt(snapshot.data.length); <<< после snapshot.hasdata . Затем обязательно используйте >>> ItemCount: rndItems, <<<

5. я обновил свой вопрос, потому что они тоже не сработали, если вы, пожалуйста, можете помочь