Как подсказка, так как кажется, что вы новичок в 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 измените изображение дорожка. Это должно сработать.
Без большего контекста я не могу быть уверенным, правильно ли это или какое решение работает лучше. Дайте мне знать, и я могу посоветовать больше.