Extract work tile from recording editor

This commit is contained in:
Elias Projahn 2020-04-05 20:11:11 +02:00
parent 0438296bcc
commit db9f6a0eb4
2 changed files with 51 additions and 19 deletions

View file

@ -4,6 +4,7 @@ import '../backend.dart';
import '../database.dart'; import '../database.dart';
import '../selectors/performer.dart'; import '../selectors/performer.dart';
import '../selectors/work.dart'; import '../selectors/work.dart';
import '../widgets/work_tile.dart';
class RecordingEditor extends StatefulWidget { class RecordingEditor extends StatefulWidget {
final Recording recording; final Recording recording;
@ -69,25 +70,9 @@ class _RecordingEditorState extends State<RecordingEditor> {
body: ListView( body: ListView(
children: <Widget>[ children: <Widget>[
work != null work != null
? StreamBuilder<List<Person>>( ? WorkTile(
stream: backend.db.composersByWork(work.id).watch(), workId: work.id,
builder: (context, snapshot) {
if (snapshot.hasData) {
return ListTile(
title: Text(work.title),
subtitle: Text(snapshot.data
.map((p) => '${p.firstName} ${p.lastName}')
.join(', ')),
onTap: selectWork, onTap: selectWork,
);
} else {
return ListTile(
title: Text(work.title),
subtitle: Text(''),
onTap: selectWork,
);
}
},
) )
: ListTile( : ListTile(
title: Text('Work'), title: Text('Work'),

View file

@ -0,0 +1,47 @@
import 'package:flutter/material.dart';
import '../backend.dart';
import '../database.dart';
class WorkTile extends StatelessWidget {
final int workId;
final void Function() onTap;
WorkTile({
this.workId,
this.onTap,
});
@override
Widget build(BuildContext context) {
final backend = Backend.of(context);
return StreamBuilder<Work>(
stream: backend.db.workById(workId).watchSingle(),
builder: (context, snapshot) {
final titleText = snapshot.data?.title ?? '...';
return StreamBuilder<List<Person>>(
stream: backend.db.composersByWork(workId).watch(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return ListTile(
title: Text(titleText),
subtitle: Text(snapshot.data
.map((p) => '${p.firstName} ${p.lastName}')
.join(', ')),
onTap: onTap ?? null,
);
} else {
return ListTile(
title: Text(titleText),
subtitle: Text('...'),
onTap: onTap ?? null,
);
}
},
);
},
);
}
}