Select Git revision
-
Benoît Harrault authoredBenoît Harrault authored
letters.dart 3.14 KiB
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../provider/data.dart';
import '../utils/constants.dart';
import '../widgets/dialog_gameover.dart';
class LetterButtons extends StatelessWidget {
const LetterButtons({super.key});
@override
Widget build(BuildContext context) {
final Orientation orientation = MediaQuery.of(context).orientation;
var size = MediaQuery.of(context).size;
final double paddingTop = MediaQuery.of(context).padding.top;
final double itemHeight = (size.height - paddingTop) / 2;
final double itemWidth = size.width / 2;
final Data myProvider = Provider.of<Data>(context);
final List<String> lettersList = letters.split('');
final List<Widget> keys = [];
for (var key in lettersList) {
keys.add(
Padding(
padding: const EdgeInsets.all(2.0),
child: TextButton(
style: TextButton.styleFrom(
backgroundColor: Colors.grey,
foregroundColor: Colors.white,
shadowColor: const Color(accent),
),
onPressed: myProvider.usedLetters.contains(key)
? null
: () async {
myProvider.updateUsedLetters(key);
if (myProvider.secretWord.contains(key)) {
for (int index = 0; index < myProvider.secretWord.length; index++) {
if (key == myProvider.secretWord[index]) {
myProvider.updateHiddenWord(index, key);
}
}
if (myProvider.hiddenWord == myProvider.secretWord) {
myProvider.addVictory();
showDialog(
context: context,
builder: (context) => const DialogGameOver(victory),
);
}
} else {
myProvider.addError();
if (myProvider.errors == 8) {
await Future.delayed(const Duration(milliseconds: 900)); //????
myProvider.addDefeat();
showDialog(
context: context,
builder: (context) => const DialogGameOver(defeat),
);
}
}
},
child: Text(
key,
textAlign: TextAlign.center,
),
),
),
);
}
return Container(
alignment:
orientation == Orientation.portrait ? Alignment.bottomCenter : Alignment.center,
color: const Color(darkGreen),
padding: const EdgeInsets.all(10.0),
margin: EdgeInsets.only(top: orientation == Orientation.portrait ? 0.0 : paddingTop),
child: GridView.count(
padding: EdgeInsets.zero,
shrinkWrap: true,
crossAxisCount: orientation == Orientation.portrait ? 9 : 3,
childAspectRatio:
orientation == Orientation.portrait ? 1 / 1 : (itemWidth / itemHeight),
children: keys,
),
);
}
}