summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorOrangerot <purple@orangerot.dev>2024-12-20 22:46:19 +0100
committerOrangerot <purple@orangerot.dev>2024-12-20 22:46:19 +0100
commitc979904f95c2451fed5bba5d83fe9a7244c39ae3 (patch)
treead8417af03d030e6c6f7e34d7ad5aeb7fde36338 /lib
parent08f2adb6397557ac27cf3780aa8f8222cbc51982 (diff)
feat: level selection layout
Diffstat (limited to 'lib')
-rw-r--r--lib/level_selection.dart38
-rw-r--r--lib/main.dart107
2 files changed, 41 insertions, 104 deletions
diff --git a/lib/level_selection.dart b/lib/level_selection.dart
new file mode 100644
index 0000000..c63c8c3
--- /dev/null
+++ b/lib/level_selection.dart
@@ -0,0 +1,38 @@
+import 'package:flutter/material.dart';
+
+class LevelSelection extends StatelessWidget {
+ final List<String> _musicList = [
+ "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3",
+ "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-2.mp3",
+ "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-3.mp3",
+ ];
+
+ final List<String> _coverArtList = [
+ "https://cdn.pixabay.com/photo/2020/05/19/13/48/cartoon-5190942_960_720.jpg",
+ "https://cdn.pixabay.com/photo/2020/05/19/13/35/cartoon-5190860_960_720.jpg",
+ "https://cdn.pixabay.com/photo/2020/10/23/17/52/fox-5679446_960_720.png",
+ ];
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: AppBar(title: const Text('Sense the Rhythm')),
+ body: ListView.separated(
+ itemCount: _musicList.length,
+ separatorBuilder: (BuildContext context, int index) => const Divider(),
+ itemBuilder: (context, index) {
+ return ListTile(
+ leading: Image.network(_coverArtList[index]),
+ trailing: Icon(Icons.play_arrow),
+ title: Text('Track ${index + 1}'),
+ subtitle: Text('3:45'),
+ );
+ },
+ ),
+ floatingActionButton: FloatingActionButton(
+ onPressed: () => {},
+ child: Icon(Icons.add)
+ ),
+ );
+ }
+}
diff --git a/lib/main.dart b/lib/main.dart
index 8e94089..eb01d44 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,5 +1,7 @@
import 'package:flutter/material.dart';
+import 'level_selection.dart';
+
void main() {
runApp(const MyApp());
}
@@ -7,119 +9,16 @@ void main() {
class MyApp extends StatelessWidget {
const MyApp({super.key});
- // This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
- // This is the theme of your application.
- //
- // TRY THIS: Try running your application with "flutter run". You'll see
- // the application has a purple toolbar. Then, without quitting the app,
- // try changing the seedColor in the colorScheme below to Colors.green
- // and then invoke "hot reload" (save your changes or press the "hot
- // reload" button in a Flutter-supported IDE, or press "r" if you used
- // the command line to start the app).
- //
- // Notice that the counter didn't reset back to zero; the application
- // state is not lost during the reload. To reset the state, use hot
- // restart instead.
- //
- // This works for code too, not just values: Most code changes can be
- // tested with just a hot reload.
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
- home: const MyHomePage(title: 'Flutter Demo Home Page'),
+ home: LevelSelection()
);
}
}
-class MyHomePage extends StatefulWidget {
- const MyHomePage({super.key, required this.title});
-
- // This widget is the home page of your application. It is stateful, meaning
- // that it has a State object (defined below) that contains fields that affect
- // how it looks.
-
- // This class is the configuration for the state. It holds the values (in this
- // case the title) provided by the parent (in this case the App widget) and
- // used by the build method of the State. Fields in a Widget subclass are
- // always marked "final".
-
- final String title;
-
- @override
- State<MyHomePage> createState() => _MyHomePageState();
-}
-
-class _MyHomePageState extends State<MyHomePage> {
- int _counter = 0;
-
- void _incrementCounter() {
- setState(() {
- // This call to setState tells the Flutter framework that something has
- // changed in this State, which causes it to rerun the build method below
- // so that the display can reflect the updated values. If we changed
- // _counter without calling setState(), then the build method would not be
- // called again, and so nothing would appear to happen.
- _counter++;
- });
- }
-
- @override
- Widget build(BuildContext context) {
- // This method is rerun every time setState is called, for instance as done
- // by the _incrementCounter method above.
- //
- // The Flutter framework has been optimized to make rerunning build methods
- // fast, so that you can just rebuild anything that needs updating rather
- // than having to individually change instances of widgets.
- return Scaffold(
- appBar: AppBar(
- // TRY THIS: Try changing the color here to a specific color (to
- // Colors.amber, perhaps?) and trigger a hot reload to see the AppBar
- // change color while the other colors stay the same.
- backgroundColor: Theme.of(context).colorScheme.inversePrimary,
- // Here we take the value from the MyHomePage object that was created by
- // the App.build method, and use it to set our appbar title.
- title: Text(widget.title),
- ),
- body: Center(
- // Center is a layout widget. It takes a single child and positions it
- // in the middle of the parent.
- child: Column(
- // Column is also a layout widget. It takes a list of children and
- // arranges them vertically. By default, it sizes itself to fit its
- // children horizontally, and tries to be as tall as its parent.
- //
- // Column has various properties to control how it sizes itself and
- // how it positions its children. Here we use mainAxisAlignment to
- // center the children vertically; the main axis here is the vertical
- // axis because Columns are vertical (the cross axis would be
- // horizontal).
- //
- // TRY THIS: Invoke "debug painting" (choose the "Toggle Debug Paint"
- // action in the IDE, or press "p" in the console), to see the
- // wireframe for each widget.
- mainAxisAlignment: MainAxisAlignment.center,
- children: <Widget>[
- const Text(
- 'You have pushed the button this many times:',
- ),
- Text(
- '$_counter',
- style: Theme.of(context).textTheme.headlineMedium,
- ),
- ],
- ),
- ),
- floatingActionButton: FloatingActionButton(
- onPressed: _incrementCounter,
- tooltip: 'Increment',
- child: const Icon(Icons.add),
- ), // This trailing comma makes auto-formatting nicer for build methods.
- );
- }
-}