diff --git a/lib/main.dart b/lib/main.dart index 0c4f951..cbd5478 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -80,45 +80,50 @@ class _MyHomePageState extends State { ), body: RefreshIndicator( onRefresh: _refreshGames, - child: SingleChildScrollView( - padding: const EdgeInsets.all(8), - child: Wrap( - spacing: 4, - runSpacing: 4, - children: [ - ...games.values.map( - (game) => SizedBox( - width: 400, - child: GameCard( - game: game, - onGameUpdated: (game) async { - game = await GameRepository.upsert(game); - setState(() { - games[game.name] = game; - }); - }, - onDelete: () async { - await GameRepository.delete(game); - setState(() { - games.remove(game.name); - }); - }, + child: LayoutBuilder( + builder: (context, constraints) { + final cardWidth = constraints.maxWidth / 4; + return SingleChildScrollView( + padding: const EdgeInsets.all(8), + child: Wrap( + spacing: 8, + runSpacing: 8, + children: [ + ...games.values.map( + (game) => SizedBox( + width: cardWidth - 10, // Subtract spacing to fit 4 cards + child: GameCard( + game: game, + onGameUpdated: (game) async { + game = await GameRepository.upsert(game); + setState(() { + games[game.name] = game; + }); + }, + onDelete: () async { + await GameRepository.delete(game); + setState(() { + games.remove(game.name); + }); + }, + ), + ), ), - ), + SizedBox( + width: cardWidth - 10, // Subtract spacing to fit 4 cards + child: NewGameCard( + onGameCreated: (game) async { + game = await GameRepository.upsert(game); + setState(() { + games[game.name] = game; + }); + }, + ), + ), + ], ), - SizedBox( - width: 400, - child: NewGameCard( - onGameCreated: (game) async { - game = await GameRepository.upsert(game); - setState(() { - games[game.name] = game; - }); - }, - ), - ), - ], - ), + ); + }, ), ), );