import 'package:flutter/material.dart'; import 'package:wordguessing/data/fetch_data_helper.dart'; import 'package:wordguessing/models/word.dart'; import 'package:wordguessing/provider/data.dart'; import 'package:wordguessing/ui/games/abstract_game.dart'; class GamePickImagePage extends GameAbstract { const GamePickImagePage({super.key}); @override pickData(Data myProvider) { Word word; int attempts = 0; do { final List<Word> words = FetchDataHelper().getWords(myProvider.lang, countWords); word = words.take(1).toList()[0]; if ((words.length == countWords) && !myProvider.isRecentlyPicked(word.key)) { myProvider.updateWord(word); final List<Word> images = []; for (var element in words) { images.add(element); } myProvider.updateImages(images); } attempts++; } while (myProvider.word != word && attempts < 10); } Widget buildImageContainer(Data myProvider, Word word) { const double imageSize = 130; String imageAsset = 'assets/placeholder.png'; if ((word.images.isNotEmpty)) { imageAsset = 'assets/images/${word.images[0]}'; } return TextButton( child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(8), border: Border.all( color: Colors.blue.shade200, width: 8, ), ), margin: const EdgeInsets.all(2), child: Image( image: AssetImage(imageAsset), width: imageSize, height: imageSize, fit: BoxFit.fill, ), ), onPressed: () { checkWord(myProvider, word); }, ); } Widget buildImageItemsBlock(Data myProvider) { final List<Word> images = myProvider.images; if (images.length != countWords) { return const SizedBox.shrink(); } images.sort((a, b) => a.key.compareTo(b.key)); return Column( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, children: [ Row( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, children: [ buildImageContainer(myProvider, images[0]), buildImageContainer(myProvider, images[1]), ], ), Row( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, children: [ buildImageContainer(myProvider, images[2]), buildImageContainer(myProvider, images[3]), ], ) ], ); } Widget buildTextItemBlock(Data myProvider) { final Word? word = myProvider.word; if (word == null) { return const SizedBox.shrink(); } return Container( decoration: BoxDecoration( color: Colors.blue.shade800, borderRadius: BorderRadius.circular(6), border: Border.all( color: Colors.white, width: 6, ), ), child: Padding( padding: const EdgeInsets.all(12), child: Text( word.text, style: const TextStyle( fontSize: 30, fontWeight: FontWeight.w600, color: Colors.white, ), ), ), ); } @override List<Widget> buildPageContent(Data myProvider) { return <Widget>[ buildTextItemBlock(myProvider), const SizedBox(height: 2), ((myProvider.word == null) || (myProvider.word?.key == '')) ? buildStartGameBlock(myProvider) : buildScoreContainer(myProvider), const SizedBox(height: 2), buildImageItemsBlock(myProvider), ]; } }