game_scaffold 0.1.4 game_scaffold: ^0.1.4 copied to clipboard
A new Flutter package project.
import 'package:flutter/material.dart';
import 'package:game_scaffold/game_scaffold.dart';
import 'package:hooks_riverpod/all.dart';
void main() {
runApp(ProviderScope(child: TicTacToeApp()));
}
class TicTacToeApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: TicTacToe(),
);
}
}
class TicTacToe extends StatelessWidget {
const TicTacToe();
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Row(children: [
ProviderScope(
overrides: [playerIDProvider.overrideAs((watch) => P1)],
child: Player(),
),
ProviderScope(
overrides: [playerIDProvider.overrideAs((watch) => P2)],
child: Player(),
),
]),
));
}
}
class Player extends GameHookWidget {
@override
Widget buildWithGame(BuildContext context, GameProvider gameProvider) {
final gameStatus = gameProvider.useGameStatus;
switch (gameStatus) {
case GameStatus.NotConnected:
case GameStatus.NotJoined:
return CreateOrJoinWidget();
case GameStatus.NotStarted:
// TODO: Handle this case.
break;
case GameStatus.Started:
// TODO: Handle this case.
break;
case GameStatus.Finished:
// TODO: Handle this case.
break;
case GameStatus.BetweenRounds:
// TODO: Handle this case.
break;
}
throw UnimplementedError('$gameStatus status in Player widget not handled');
}
}
class CreateOrJoinWidget extends GameHookWidget {
@override
Widget buildWithGame(BuildContext context, GameProvider gameProvider) {
return Column(
children: [
Text('Player $playerID'),
if (playerID == P1)
FlatButton(
child: Text('Start Game'),
onPressed: () {},
)
],
);
}
}