Флаттер 'Flip Card' случайным образом выбирает другую картинку на каждом флипе - PullRequest
0 голосов
/ 19 апреля 2020

Я создаю приложение Flutter, используя пакет Flip Card. Я хотел бы иметь возможность перевернуть карту и увидеть случайно выбранное изображение. Пример: карты Fla sh, одна сторона - изображение stati c, я переворачиваю его, чтобы увидеть изображение собаки. Затем я снова нажимаю, и он переворачивается, чтобы вернуться к изображению stati c. Я снова нажимаю, и вижу фотографию кота и т. Д. c ...

Я смог все это настроить. Карта переворачивается взад и вперед, но она не выбирает новую карту случайным образом, если я не перезапускаю сборку после каждого переворота. Итак, я где-то пропускаю кусок, который говорит приложению выбрать снова. Ваша помощь будет очень признательна!

Описание флип-карты https://pub.dev/packages/flip_card

фрагмент кода

Ответы [ 2 ]

0 голосов
/ 19 апреля 2020

Я думаю, что проблема в том, что вы вызываете функцию «Случайный выбор» только один раз при инициализации вашей карты. Попробуйте добавить функцию, в которой вы вызываете функцию Random, чтобы изменить свой '_random' и ваш 'element' и вызывать его каждый раз, когда карта переворачивается. Это можно сделать с помощью поля функции 'onFlipDone' на FlipCard.

0 голосов
/ 19 апреля 2020

Как подсказка, так как кажется, что вы новичок в SO - пожалуйста, опубликуйте код в виде текста, чтобы мы могли вставить его в IDE и попытаться запустить его. В качестве изображения гораздо сложнее воспроизвести вашу проблему. Просто совет для продвижения вперед. В противном случае, добро пожаловать в SO!

Так что по вашей проблеме я не уверен точно, почему, так как я не могу увидеть весь контекст внутри этого фрагмента, НО я подозреваю, что это потому, что карта не знает, что ее нужно восстановить, так как ее просто заменяется другим изображением, но оно не знает, что это новое изображение.

Вы можете создать класс Widget, который не имеет состояния и передается по пути. Изменение ключа обеспечит восстановление виджета:

Класс виджета:

class FlipCardDetails extends StatelessWidget {
  final String imagePath;

  const FlipCardDetails({Key key, @required this.imagePath}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      child: Stack(
        children: <Widget>[
          Image.asset(
            this.imagePath,
            key: ValueKey<String>(imagePath), 
          )
        ],
      )
    );
  }
}

Затем в вашем основном коде, где написано: back: Container(child: _cardDetails()),

Вы можете замените это на: back: FlipCardDetails(imagePath: <Provide the image path>);

Вы можете создать ключ на основе самого пути к изображению, например, так: key: ValueKey<String>(imagePath)

Это все будет работать, только если есть функция, которую вы можете запустить, когда человек нажимает на карту, которая перевернет карту. Таким образом, вы можете запустить ваш рандомизатор и указать путь к изображению для виджета.

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

Без большего контекста я не могу быть уверенным, правильно ли это или какое решение работает лучше. Дайте мне знать, и я могу посоветовать больше.

...