import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:badges/badges.dart'; import 'package:overlay_support/overlay_support.dart'; import '../layout/game.dart'; import '../layout/parameters.dart'; import '../provider/data.dart'; import '../utils/game_utils.dart'; class Home extends StatefulWidget { static const String id = 'home'; @override _HomeState createState() => _HomeState(); } class _HomeState extends State<Home> { @override void initState() { super.initState(); Data myProvider = Provider.of<Data>(context, listen: false); myProvider.initParametersValues(); } List getImagesAssets(Data myProvider) { List assets = []; List gameImages = [ 'button_back', 'button_help', 'button_show_conflicts', 'button_start', 'game_win', ]; myProvider.availableDifficultyLevels.forEach( (difficulty) => gameImages.add('difficulty_' + difficulty) ); myProvider.availableSizes.forEach( (size) => gameImages.add('size_' + size) ); gameImages.forEach( (image) => assets.add('assets/icons/' + image + '.png') ); List skinImages = []; for (int value = 1; value <= 16; value++) { skinImages.add(value.toString()); } myProvider.availableSkins.forEach( (skin) => skinImages.forEach( (image) => assets.add('assets/skins/' + skin + '_' + image + '.png') ) ); assets.add('assets/skins/empty.png'); return assets; } @override Widget build(BuildContext context) { Data myProvider = Provider.of<Data>(context); if (!myProvider.assetsPreloaded) { List assets = getImagesAssets(myProvider); assets.forEach( (asset) => precacheImage(AssetImage(asset), context) ); myProvider.updateAssetsPreloaded(true); } List<Widget> menuActions = []; if (myProvider.gameIsRunning) { menuActions = [ FlatButton( child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(4), border: Border.all( color: Colors.blue, width: 4, ), ), margin: EdgeInsets.all(8), child: Image( image: AssetImage('assets/icons/button_back.png'), fit: BoxFit.fill ), ), onPressed: () => toast('Long press to quit game...'), onLongPress: () => GameUtils.resetGame(myProvider), ), Spacer(flex: 6), FlatButton( child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(4), border: Border.all( color: Colors.blue, width: 4, ), ), margin: EdgeInsets.all(8), child: Badge( showBadge: myProvider.givenTipsCount == 0 ? false : true, badgeColor: myProvider.givenTipsCount < 10 ? Colors.green : myProvider.givenTipsCount < 20 ? Colors.orange : Colors.red, badgeContent: Text( myProvider.givenTipsCount == 0 ? '' : myProvider.givenTipsCount.toString(), style: TextStyle( color: Colors.white ) ), child: Image( image: AssetImage('assets/icons/button_help.png'), fit: BoxFit.fill ), ) ), onPressed: () => GameUtils.showTip(myProvider), ), Spacer(), FlatButton( child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(4), border: Border.all( color: myProvider.showConflicts ? Colors.white : Colors.blue, width: 4, ), ), margin: EdgeInsets.all(8), child: Image( image: AssetImage('assets/icons/button_show_conflicts.png'), fit: BoxFit.fill ), ), onPressed: () { myProvider.toggleShowConflicts(); }, ), ]; } return Scaffold( appBar: AppBar( actions: menuActions, ), body: SafeArea( child: Center( child: myProvider.gameIsRunning ? Game.buildGameWidget(myProvider) : Parameters.buildParametersSelector(myProvider) ), ) ); } }