From e834abe1e0bee0833aded9b775ebf75ddd444423 Mon Sep 17 00:00:00 2001 From: Elias Projahn Date: Mon, 6 Apr 2020 11:29:55 +0200 Subject: [PATCH] Add composers and work texts These replace the work tile widget. --- lib/editors/recording.dart | 10 ++--- lib/selectors/recording.dart | 6 +-- lib/widgets/texts.dart | 83 ++++++++++++++++++++++++++---------- lib/widgets/work_tile.dart | 56 ------------------------ 4 files changed, 68 insertions(+), 87 deletions(-) delete mode 100644 lib/widgets/work_tile.dart diff --git a/lib/editors/recording.dart b/lib/editors/recording.dart index 621a4ee..8ff27cc 100644 --- a/lib/editors/recording.dart +++ b/lib/editors/recording.dart @@ -4,7 +4,7 @@ import '../backend.dart'; import '../database.dart'; import '../selectors/performer.dart'; import '../selectors/work.dart'; -import '../widgets/work_tile.dart'; +import '../widgets/texts.dart'; class RecordingEditor extends StatefulWidget { final Recording recording; @@ -70,10 +70,10 @@ class _RecordingEditorState extends State { body: ListView( children: [ work != null - ? WorkTile( - workId: work.id, - onTap: selectWork, - ) + ? ListTile( + title: WorkText(work.id), + subtitle: ComposersText(work.id), + ) : ListTile( title: Text('Work'), subtitle: Text('Select work'), diff --git a/lib/selectors/recording.dart b/lib/selectors/recording.dart index 6479895..0eb29d2 100644 --- a/lib/selectors/recording.dart +++ b/lib/selectors/recording.dart @@ -5,7 +5,6 @@ import '../database.dart'; import '../editors/recording.dart'; import '../widgets/texts.dart'; import '../widgets/works_by_composer.dart'; -import '../widgets/work_tile.dart'; class PersonList extends StatelessWidget { final void Function(int personId) onSelect; @@ -102,12 +101,13 @@ class RecordingList extends StatelessWidget { children: [ Material( elevation: 2.0, - child: WorkTile( + child: ListTile( leading: IconButton( icon: const Icon(Icons.arrow_back), onPressed: () => Navigator.pop(context), ), - workId: workId, + title: WorkText(workId), + subtitle: ComposersText(workId), ), ), Expanded( diff --git a/lib/widgets/texts.dart b/lib/widgets/texts.dart index 4f0f4fb..a524082 100644 --- a/lib/widgets/texts.dart +++ b/lib/widgets/texts.dart @@ -74,33 +74,36 @@ class _PerformancesTextState extends State { .performancesByRecording(widget.recordingId) .watch() .listen((performances) async { - final List texts = []; + final List texts = []; - for (final performance in performances) { - final buffer = StringBuffer(); + for (final performance in performances) { + final buffer = StringBuffer(); - if (performance.person != null) { - final person = await backend.db.personById(performance.person).getSingle(); - buffer.write('${person.firstName} ${person.lastName}'); - } else if (performance.ensemble != null) { - final ensemble = await backend.db.ensembleById(performance.ensemble).getSingle(); - buffer.write(ensemble.name); - } else { - buffer.write('Unknown'); - } + if (performance.person != null) { + final person = + await backend.db.personById(performance.person).getSingle(); + buffer.write('${person.firstName} ${person.lastName}'); + } else if (performance.ensemble != null) { + final ensemble = + await backend.db.ensembleById(performance.ensemble).getSingle(); + buffer.write(ensemble.name); + } else { + buffer.write('Unknown'); + } - if (performance.role != null) { - final role = await backend.db.instrumentById(performance.role).getSingle(); - buffer.write(' (${role.name})'); - } + if (performance.role != null) { + final role = + await backend.db.instrumentById(performance.role).getSingle(); + buffer.write(' (${role.name})'); + } - texts.add(buffer.toString()); - } + texts.add(buffer.toString()); + } - setState(() { - text = texts.join(', '); - }); - }); + setState(() { + text = texts.join(', '); + }); + }); } @override @@ -113,4 +116,38 @@ class _PerformancesTextState extends State { super.dispose(); performancesSubscription?.cancel(); } -} \ No newline at end of file +} + +class WorkText extends StatelessWidget { + final int workId; + + WorkText(this.workId); + + @override + Widget build(BuildContext context) { + final backend = Backend.of(context); + + return StreamBuilder( + stream: backend.db.workById(workId).watchSingle(), + builder: (context, snapshot) => Text(snapshot.data?.title ?? '...'), + ); + } +} + +class ComposersText extends StatelessWidget { + final int workId; + + ComposersText(this.workId); + + @override + Widget build(BuildContext context) { + final backend = Backend.of(context); + + return StreamBuilder>( + stream: backend.db.composersByWork(workId).watch(), + builder: (context, snapshot) => Text(snapshot.hasData + ? snapshot.data.map((p) => '${p.firstName} ${p.lastName}').join(', ') + : '...'), + ); + } +} diff --git a/lib/widgets/work_tile.dart b/lib/widgets/work_tile.dart deleted file mode 100644 index d5911c7..0000000 --- a/lib/widgets/work_tile.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; - -import '../backend.dart'; -import '../database.dart'; - -class WorkTile extends StatelessWidget { - final Widget leading; - final int workId; - final void Function() onTap; - - WorkTile({ - this.leading, - this.workId, - this.onTap, - }); - - @override - Widget build(BuildContext context) { - final backend = Backend.of(context); - - return StreamBuilder( - stream: backend.db.workById(workId).watchSingle(), - builder: (context, snapshot) { - final titleText = snapshot.data?.title ?? '...'; - - return StreamBuilder>( - stream: backend.db.composersByWork(workId).watch(), - builder: (context, snapshot) { - final subtitleText = snapshot.hasData - ? snapshot.data - .map((p) => '${p.firstName} ${p.lastName}') - .join(', ') - : '...'; - return ListTile( - leading: leading, - title: DefaultTextStyle( - style: Theme.of(context).textTheme.bodyText2, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - subtitleText, - style: TextStyle(fontWeight: FontWeight.bold), - ), - Text(titleText), - ], - ), - ), - onTap: onTap ?? null, - ); - }, - ); - }, - ); - } -}