diff options
| author | Orangerot <purple@orangerot.dev> | 2024-12-20 22:46:19 +0100 | 
|---|---|---|
| committer | Orangerot <purple@orangerot.dev> | 2024-12-20 22:46:19 +0100 | 
| commit | c979904f95c2451fed5bba5d83fe9a7244c39ae3 (patch) | |
| tree | ad8417af03d030e6c6f7e34d7ad5aeb7fde36338 /lib | |
| parent | 08f2adb6397557ac27cf3780aa8f8222cbc51982 (diff) | |
feat: level selection layout
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/level_selection.dart | 38 | ||||
| -rw-r--r-- | lib/main.dart | 107 | 
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. -    ); -  } -}  | 
