mirror of https://github.com/flutter/samples.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.3 KiB
72 lines
2.3 KiB
// Copyright 2022, the Flutter project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:go_router/go_router.dart';
|
|
import 'package:provider/provider.dart';
|
|
|
|
import '../audio/audio_controller.dart';
|
|
import '../audio/sounds.dart';
|
|
import '../player_progress/player_progress.dart';
|
|
import '../style/palette.dart';
|
|
import '../style/responsive_screen.dart';
|
|
import 'levels.dart';
|
|
|
|
class LevelSelectionScreen extends StatelessWidget {
|
|
const LevelSelectionScreen({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final palette = context.watch<Palette>();
|
|
final playerProgress = context.watch<PlayerProgress>();
|
|
|
|
return Scaffold(
|
|
backgroundColor: palette.backgroundLevelSelection,
|
|
body: ResponsiveScreen(
|
|
squarishMainArea: Column(
|
|
children: [
|
|
const Padding(
|
|
padding: EdgeInsets.all(16),
|
|
child: Center(
|
|
child: Text(
|
|
'Select level',
|
|
style:
|
|
TextStyle(fontFamily: 'Permanent Marker', fontSize: 30),
|
|
),
|
|
),
|
|
),
|
|
const SizedBox(height: 50),
|
|
Expanded(
|
|
child: ListView(
|
|
children: [
|
|
for (final level in gameLevels)
|
|
ListTile(
|
|
enabled: playerProgress.highestLevelReached >=
|
|
level.number - 1,
|
|
onTap: () {
|
|
final audioController = context.read<AudioController>();
|
|
audioController.playSfx(SfxType.buttonTap);
|
|
|
|
GoRouter.of(context)
|
|
.go('/play/session/${level.number}');
|
|
},
|
|
leading: Text(level.number.toString()),
|
|
title: Text('Level #${level.number}'),
|
|
)
|
|
],
|
|
),
|
|
),
|
|
],
|
|
),
|
|
rectangularMenuArea: ElevatedButton(
|
|
onPressed: () {
|
|
GoRouter.of(context).go('/');
|
|
},
|
|
child: const Text('Back'),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|