diff --git a/lib/editors/tracks.dart b/lib/editors/tracks.dart new file mode 100644 index 0000000..b8263d7 --- /dev/null +++ b/lib/editors/tracks.dart @@ -0,0 +1,106 @@ +import 'package:flutter/material.dart'; + +import '../backend.dart'; +import '../database.dart'; +import '../selectors/files.dart'; +import '../selectors/recording.dart'; +import '../widgets/recording_tile.dart'; + +class TrackModel { + String path; + + TrackModel(this.path); +} + +class TracksEditor extends StatefulWidget { + @override + _TracksEditorState createState() => _TracksEditorState(); +} + +class _TracksEditorState extends State { + int recordingId; + List tracks = []; + + @override + Widget build(BuildContext context) { + final backend = Backend.of(context); + + return Scaffold( + appBar: AppBar( + title: Text('Tracks'), + actions: [ + FlatButton( + child: Text('DONE'), + onPressed: () async { + // TODO: Save tracks. + }, + ), + ], + ), + body: ListView( + children: [ + recordingId != null + ? RecordingTile( + recordingId: recordingId, + onTap: selectRecording, + ) + : ListTile( + title: Text('Select recording'), + onTap: selectRecording, + ), + ListTile( + title: Text('Files'), + trailing: IconButton( + icon: const Icon(Icons.add), + onPressed: () async { + final Set paths = await Navigator.push( + context, + MaterialPageRoute( + builder: (context) => FilesSelector( + baseDirectory: backend.musicLibraryPath, + ), + ), + ); + + if (paths != null) { + setState(() { + for (final path in paths) { + tracks.add(TrackModel(path)); + } + }); + } + }, + ), + ), + for (final track in tracks) + ListTile( + title: Text(track.path), + trailing: IconButton( + icon: const Icon(Icons.delete), + onPressed: () { + setState(() { + tracks.remove(track); + }); + }, + ), + ), + ], + ), + ); + } + + void selectRecording() async { + final Recording recording = await Navigator.push( + context, + MaterialPageRoute( + builder: (context) => RecordingsSelector(), + ), + ); + + if (recording != null) { + setState(() { + recordingId = recording.id; + }); + } + } +} diff --git a/lib/screens/home.dart b/lib/screens/home.dart index d7cb9b1..ecf5a23 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import '../backend.dart'; import '../database.dart'; -import '../selectors/recording.dart'; +import '../editors/tracks.dart'; import 'person.dart'; import 'settings.dart'; @@ -25,7 +25,7 @@ class HomeScreen extends StatelessWidget { ), PopupMenuItem( value: 1, - child: Text('Select recording'), + child: Text('Add tracks'), ), PopupMenuItem( value: 2, @@ -39,7 +39,8 @@ class HomeScreen extends StatelessWidget { Navigator.push( context, MaterialPageRoute( - builder: (context) => RecordingsSelector(), + builder: (context) => TracksEditor(), + fullscreenDialog: true, ), ); } else if (selected == 2) {