From 4855cafdf30ca13bb6ee9757764cd4e8ef037953 Mon Sep 17 00:00:00 2001 From: Elias Projahn Date: Wed, 11 Dec 2019 13:17:23 +0100 Subject: [PATCH] Add instrument selector to work editor --- lib/editors/work.dart | 50 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/lib/editors/work.dart b/lib/editors/work.dart index 0a0aaf7..909faef 100644 --- a/lib/editors/work.dart +++ b/lib/editors/work.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import '../backend.dart'; import '../database.dart'; +import '../selectors/instruments.dart'; import '../selectors/person.dart'; class WorkEditor extends StatefulWidget { @@ -20,6 +21,7 @@ class _WorkEditorState extends State { Backend backend; Person composer; + List instruments = []; @override void initState() { @@ -36,15 +38,29 @@ class _WorkEditorState extends State { backend = Backend.of(context); - if (widget.work != null && widget.work.composer != null) { - () async { - final person = - await backend.db.personById(widget.work.composer).getSingle(); + if (widget.work != null) { + if (widget.work.composer != null) { + () async { + final person = + await backend.db.personById(widget.work.composer).getSingle(); - // We don't want to override a newly selected composer. - if (composer != null) { + // We don't want to override a newly selected composer. + if (composer != null) { + setState(() { + composer = person; + }); + } + }(); + } + + () async { + final selection = + await backend.db.instrumentsByWork(widget.work.id).get(); + + // We don't want to override already selected instruments. + if (instruments.isEmpty) { setState(() { - composer = person; + instruments = selection; }); } }(); @@ -94,6 +110,26 @@ class _WorkEditorState extends State { } }, ), + ListTile( + title: Text('Instruments'), + subtitle: Text(instruments.isNotEmpty + ? instruments.map((i) => i.name).join(', ') + : 'Select instruments'), + onTap: () async { + final List selection = await Navigator.push( + context, + MaterialPageRoute( + builder: (context) => InstrumentsSelector(), + fullscreenDialog: true, + )); + + if (selection != null) { + setState(() { + instruments = selection; + }); + } + }, + ), ], ), );