summaryrefslogtreecommitdiff
path: root/lib/level.dart
blob: e35325a35a42143cba183479bf271f1113be347c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:audioplayers/audioplayers.dart';

class Level extends StatefulWidget {
  const Level({super.key, required this.stepmaniaFolderPath});
  final String stepmaniaFolderPath;

  @override
  State<Level> createState() => _LevelState();
}

class _LevelState extends State<Level> {
  final _player = AudioPlayer();
  bool _isPlaying = true;

  @override
  Widget build(BuildContext context) {
    String audioPath = Directory(widget.stepmaniaFolderPath)
        .listSync()
        .firstWhere((entity) => entity.path.endsWith('.ogg'),
            orElse: () => File(''))
        .path;
    _player.play(DeviceFileSource(audioPath));
    return Scaffold(
        appBar: AppBar(
          leading: IconButton(
            icon: Icon(_isPlaying ? Icons.pause : Icons.play_arrow),
            onPressed: () => {
              if (_isPlaying)
                {
                  _player.pause(),
                  setState(() {
                    _isPlaying = false;
                  })
                }
              else
                {
                  _player.resume(),
                  setState(() {
                    _isPlaying = true;
                  })
                },
            },
          ),
          title: Text('Level 1'),
          actions: [
            IconButton(
                icon: Icon(Icons.close),
                onPressed: () => Navigator.pop(context))
          ],
        ),
        body: Stack(children: [
          Arrow(
            position: -100.0,
          ),
          Arrow(
            position: 00.0,
          ),
          Arrow(
            position: 100.0,
          ),
          Arrow(
            position: 200.0,
          ),
          Positioned(
            top: 50,
            width: MediaQuery.of(context).size.width,
            left: 0,
            child: Text(
              "Great!",
              textScaler: TextScaler.linear(4),
              textAlign: TextAlign.center,
            ),
          ),
          Positioned(
            left: MediaQuery.of(context).size.width / 2 - 50,
            bottom: 50,
            child: Container(
              width: 100,
              height: 100,
              decoration: BoxDecoration(
                  shape: BoxShape.circle,
                  // color: Colors.blue,
                  border: Border.all(color: Colors.black, width: 10)),
            ),
          ),
        ]));
  }

  @override
  void dispose() {
    _player.dispose();
    super.dispose();
  }
}

class Arrow extends StatelessWidget {
  final double position;

  const Arrow({super.key, required this.position});

  @override
  Widget build(BuildContext context) {
    return Positioned(
      left: MediaQuery.of(context).size.width / 2 - 25, // Center the arrow
      top: position,
      child: Icon(size: 100, Icons.arrow_forward),
    );
  }
}