style: refactored into folder structure
This commit is contained in:
		
							parent
							
								
									f98162b6d8
								
							
						
					
					
						commit
						cd061eceeb
					
				| 
						 | 
					@ -1,57 +0,0 @@
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
enum ArrowDirection {
 | 
					 | 
				
			||||||
  left(Icons.arrow_back),
 | 
					 | 
				
			||||||
  down(Icons.arrow_downward),
 | 
					 | 
				
			||||||
  up(Icons.arrow_upward),
 | 
					 | 
				
			||||||
  right(Icons.arrow_forward);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const ArrowDirection(this.icon);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  final IconData icon;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class Note {
 | 
					 | 
				
			||||||
  final double time;
 | 
					 | 
				
			||||||
  final ArrowDirection direction;
 | 
					 | 
				
			||||||
  double position = 0;
 | 
					 | 
				
			||||||
  bool? wasHit;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  Note({required this.time, required this.direction});
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class Arrows extends StatelessWidget {
 | 
					 | 
				
			||||||
  final List<Note> notes;
 | 
					 | 
				
			||||||
  final double position;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const Arrows({super.key, required this.notes, required this.position});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  @override
 | 
					 | 
				
			||||||
  Widget build(BuildContext context) {
 | 
					 | 
				
			||||||
    return Stack(
 | 
					 | 
				
			||||||
        children: notes.map((note) {
 | 
					 | 
				
			||||||
      double position = note.position * 10000; //  * 20 * MediaQuery.of(context).size.height;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      return Arrow(
 | 
					 | 
				
			||||||
        position: position,
 | 
					 | 
				
			||||||
        direction: note.direction,
 | 
					 | 
				
			||||||
      );
 | 
					 | 
				
			||||||
    }).toList());
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class Arrow extends StatelessWidget {
 | 
					 | 
				
			||||||
  final double position;
 | 
					 | 
				
			||||||
  final ArrowDirection direction;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const Arrow({super.key, required this.position, required this.direction});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  @override
 | 
					 | 
				
			||||||
  Widget build(BuildContext context) {
 | 
					 | 
				
			||||||
    return Positioned(
 | 
					 | 
				
			||||||
      left: MediaQuery.of(context).size.width / 2 - 50, // Center the arrow
 | 
					 | 
				
			||||||
      bottom: position + 50,
 | 
					 | 
				
			||||||
      child: Icon(size: 100, color: Colors.redAccent.shade400, direction.icon),
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import 'level_selection.dart';
 | 
					import 'package:sense_the_rhythm/screens/level_selection.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void main() {
 | 
					void main() {
 | 
				
			||||||
  runApp(const MyApp());
 | 
					  runApp(const MyApp());
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										12
									
								
								lib/models/arrow_direction.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								lib/models/arrow_direction.dart
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,12 @@
 | 
				
			||||||
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum ArrowDirection {
 | 
				
			||||||
 | 
					  left(Icons.arrow_back),
 | 
				
			||||||
 | 
					  down(Icons.arrow_downward),
 | 
				
			||||||
 | 
					  up(Icons.arrow_upward),
 | 
				
			||||||
 | 
					  right(Icons.arrow_forward);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const ArrowDirection(this.icon);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  final IconData icon;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										13
									
								
								lib/models/input_direction.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								lib/models/input_direction.dart
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,13 @@
 | 
				
			||||||
 | 
					class InputDirection {
 | 
				
			||||||
 | 
					  bool up = false;
 | 
				
			||||||
 | 
					  bool down = false;
 | 
				
			||||||
 | 
					  bool left = false;
 | 
				
			||||||
 | 
					  bool right = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void reset() {
 | 
				
			||||||
 | 
					    up = false;
 | 
				
			||||||
 | 
					    down = false;
 | 
				
			||||||
 | 
					    left = false;
 | 
				
			||||||
 | 
					    right = false;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										10
									
								
								lib/models/note.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								lib/models/note.dart
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,10 @@
 | 
				
			||||||
 | 
					import 'package:sense_the_rhythm/models/arrow_direction.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Note {
 | 
				
			||||||
 | 
					  final double time;
 | 
				
			||||||
 | 
					  final ArrowDirection direction;
 | 
				
			||||||
 | 
					  double position = 0;
 | 
				
			||||||
 | 
					  bool? wasHit;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Note({required this.time, required this.direction});
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
import 'package:sense_the_rhythm/arrows.dart';
 | 
					import 'package:sense_the_rhythm/models/note.dart';
 | 
				
			||||||
import 'package:sense_the_rhythm/level.dart';
 | 
					import 'package:sense_the_rhythm/utils/simfile.dart';
 | 
				
			||||||
import 'package:sense_the_rhythm/simfile.dart';
 | 
					import 'package:sense_the_rhythm/screens/level.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class GameOverStats extends StatelessWidget {
 | 
					class GameOverStats extends StatelessWidget {
 | 
				
			||||||
  const GameOverStats({super.key, required this.simfile, required this.notes});
 | 
					  const GameOverStats({super.key, required this.simfile, required this.notes});
 | 
				
			||||||
| 
						 | 
					@ -3,10 +3,13 @@ import 'dart:async';
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
import 'package:audioplayers/audioplayers.dart';
 | 
					import 'package:audioplayers/audioplayers.dart';
 | 
				
			||||||
import 'package:flutter/services.dart';
 | 
					import 'package:flutter/services.dart';
 | 
				
			||||||
import 'package:sense_the_rhythm/arrows.dart';
 | 
					import 'package:sense_the_rhythm/models/arrow_direction.dart';
 | 
				
			||||||
import 'package:sense_the_rhythm/esense_input.dart';
 | 
					import 'package:sense_the_rhythm/models/input_direction.dart';
 | 
				
			||||||
import 'package:sense_the_rhythm/game_over_stats.dart';
 | 
					import 'package:sense_the_rhythm/models/note.dart';
 | 
				
			||||||
import 'package:sense_the_rhythm/simfile.dart';
 | 
					import 'package:sense_the_rhythm/utils/esense_input.dart';
 | 
				
			||||||
 | 
					import 'package:sense_the_rhythm/utils/simfile.dart';
 | 
				
			||||||
 | 
					import 'package:sense_the_rhythm/widgets/arrows.dart';
 | 
				
			||||||
 | 
					import 'package:sense_the_rhythm/screens/game_over.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Level extends StatefulWidget {
 | 
					class Level extends StatefulWidget {
 | 
				
			||||||
  const Level(this.simfile, {super.key});
 | 
					  const Level(this.simfile, {super.key});
 | 
				
			||||||
| 
						 | 
					@ -16,20 +19,6 @@ class Level extends StatefulWidget {
 | 
				
			||||||
  State<Level> createState() => _LevelState();
 | 
					  State<Level> createState() => _LevelState();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class InputDirection {
 | 
					 | 
				
			||||||
  bool up = false;
 | 
					 | 
				
			||||||
  bool down = false;
 | 
					 | 
				
			||||||
  bool left = false;
 | 
					 | 
				
			||||||
  bool right = false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  void reset() {
 | 
					 | 
				
			||||||
    up = false;
 | 
					 | 
				
			||||||
    down = false;
 | 
					 | 
				
			||||||
    left = false;
 | 
					 | 
				
			||||||
    right = false;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class _LevelState extends State<Level> with SingleTickerProviderStateMixin {
 | 
					class _LevelState extends State<Level> with SingleTickerProviderStateMixin {
 | 
				
			||||||
  final player = AudioPlayer();
 | 
					  final player = AudioPlayer();
 | 
				
			||||||
  bool _isPlaying = true;
 | 
					  bool _isPlaying = true;
 | 
				
			||||||
| 
						 | 
					@ -87,21 +76,23 @@ class _LevelState extends State<Level> with SingleTickerProviderStateMixin {
 | 
				
			||||||
      setState(() => _duration = duration);
 | 
					      setState(() => _duration = duration);
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    _buttonSubscription = ESenseInput.instance.buttonEvents().listen((event) {
 | 
					    if (ESenseInput.instance.connected) {
 | 
				
			||||||
      if (!event.pressed) {
 | 
					      _buttonSubscription = ESenseInput.instance.buttonEvents().listen((event) {
 | 
				
			||||||
        if (_isPlaying) {
 | 
					        if (!event.pressed) {
 | 
				
			||||||
          player.pause();
 | 
					          if (_isPlaying) {
 | 
				
			||||||
          setState(() {
 | 
					            player.pause();
 | 
				
			||||||
            _isPlaying = false;
 | 
					            setState(() {
 | 
				
			||||||
          });
 | 
					              _isPlaying = false;
 | 
				
			||||||
        } else {
 | 
					            });
 | 
				
			||||||
          player.resume();
 | 
					          } else {
 | 
				
			||||||
          setState(() {
 | 
					            player.resume();
 | 
				
			||||||
            _isPlaying = true;
 | 
					            setState(() {
 | 
				
			||||||
          });
 | 
					              _isPlaying = true;
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      });
 | 
				
			||||||
    });
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    _positionSubscription = player.onPositionChanged.listen(
 | 
					    _positionSubscription = player.onPositionChanged.listen(
 | 
				
			||||||
      (p) => setState(() => _position = p),
 | 
					      (p) => setState(() => _position = p),
 | 
				
			||||||
| 
						 | 
					@ -3,12 +3,11 @@ import 'dart:io';
 | 
				
			||||||
import 'package:file_picker/file_picker.dart';
 | 
					import 'package:file_picker/file_picker.dart';
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
import 'package:permission_handler/permission_handler.dart';
 | 
					import 'package:permission_handler/permission_handler.dart';
 | 
				
			||||||
import 'package:sense_the_rhythm/esense_connect_dialog.dart';
 | 
					 | 
				
			||||||
import 'package:sense_the_rhythm/esense_input.dart';
 | 
					 | 
				
			||||||
import 'package:sense_the_rhythm/simfile.dart';
 | 
					 | 
				
			||||||
import 'package:shared_preferences/shared_preferences.dart';
 | 
					import 'package:shared_preferences/shared_preferences.dart';
 | 
				
			||||||
 | 
					import 'package:sense_the_rhythm/utils/esense_input.dart';
 | 
				
			||||||
import 'level.dart';
 | 
					import 'package:sense_the_rhythm/utils/simfile.dart';
 | 
				
			||||||
 | 
					import 'package:sense_the_rhythm/widgets/esense_connect_dialog.dart';
 | 
				
			||||||
 | 
					import 'package:sense_the_rhythm/screens/level.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class LevelSelection extends StatefulWidget {
 | 
					class LevelSelection extends StatefulWidget {
 | 
				
			||||||
  const LevelSelection({super.key});
 | 
					  const LevelSelection({super.key});
 | 
				
			||||||
| 
						 | 
					@ -4,8 +4,8 @@ import 'dart:io';
 | 
				
			||||||
import 'package:esense_flutter/esense.dart';
 | 
					import 'package:esense_flutter/esense.dart';
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
import 'package:permission_handler/permission_handler.dart';
 | 
					import 'package:permission_handler/permission_handler.dart';
 | 
				
			||||||
import 'package:sense_the_rhythm/arrows.dart';
 | 
					import 'package:sense_the_rhythm/models/arrow_direction.dart';
 | 
				
			||||||
import 'package:sense_the_rhythm/level.dart';
 | 
					import 'package:sense_the_rhythm/models/input_direction.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ESenseInput {
 | 
					class ESenseInput {
 | 
				
			||||||
  static final instance = ESenseInput._();
 | 
					  static final instance = ESenseInput._();
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,3 @@
 | 
				
			||||||
import 'dart:ffi';
 | 
					 | 
				
			||||||
import 'dart:io';
 | 
					import 'dart:io';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum Difficulty { Beginner, Easy, Medium, Hard, Challenge, Edit }
 | 
					enum Difficulty { Beginner, Easy, Medium, Hard, Challenge, Edit }
 | 
				
			||||||
							
								
								
									
										18
									
								
								lib/widgets/arrow.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								lib/widgets/arrow.dart
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,18 @@
 | 
				
			||||||
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
 | 
					import 'package:sense_the_rhythm/models/arrow_direction.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Arrow extends StatelessWidget {
 | 
				
			||||||
 | 
					  final double position;
 | 
				
			||||||
 | 
					  final ArrowDirection direction;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const Arrow({super.key, required this.position, required this.direction});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
 | 
					    return Positioned(
 | 
				
			||||||
 | 
					      left: MediaQuery.of(context).size.width / 2 - 50, // Center the arrow
 | 
				
			||||||
 | 
					      bottom: position + 50,
 | 
				
			||||||
 | 
					      child: Icon(size: 100, color: Colors.redAccent.shade400, direction.icon),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										24
									
								
								lib/widgets/arrows.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								lib/widgets/arrows.dart
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,24 @@
 | 
				
			||||||
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
 | 
					import 'package:sense_the_rhythm/models/note.dart';
 | 
				
			||||||
 | 
					import 'package:sense_the_rhythm/widgets/arrow.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Arrows extends StatelessWidget {
 | 
				
			||||||
 | 
					  final List<Note> notes;
 | 
				
			||||||
 | 
					  final double position;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const Arrows({super.key, required this.notes, required this.position});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
 | 
					    return Stack(
 | 
				
			||||||
 | 
					        children: notes.map((note) {
 | 
				
			||||||
 | 
					      double position =
 | 
				
			||||||
 | 
					          note.position * 10000; //  * 20 * MediaQuery.of(context).size.height;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      return Arrow(
 | 
				
			||||||
 | 
					        position: position,
 | 
				
			||||||
 | 
					        direction: note.direction,
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    }).toList());
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in a new issue