mirror of
				https://github.com/johrpan/musicus_mobile.git
				synced 2025-10-26 18:57:25 +01:00 
			
		
		
		
	Work editor: Initialize from WorkInfo
This commit is contained in:
		
							parent
							
								
									97c4359ad9
								
							
						
					
					
						commit
						ea0f7f86aa
					
				
					 3 changed files with 36 additions and 77 deletions
				
			
		|  | @ -157,10 +157,13 @@ class _PartTileState extends State<PartTile> { | ||||||
| /// If the user is finished editing, the result will be returned as a [WorkInfo] | /// If the user is finished editing, the result will be returned as a [WorkInfo] | ||||||
| /// object. | /// object. | ||||||
| class WorkEditor extends StatefulWidget { | class WorkEditor extends StatefulWidget { | ||||||
|   final Work work; |   /// The work to edit. | ||||||
|  |   /// | ||||||
|  |   /// If this is null, a new work will be created. | ||||||
|  |   final WorkInfo workInfo; | ||||||
| 
 | 
 | ||||||
|   WorkEditor({ |   WorkEditor({ | ||||||
|     this.work, |     this.workInfo, | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   @override |   @override | ||||||
|  | @ -170,9 +173,6 @@ class WorkEditor extends StatefulWidget { | ||||||
| class _WorkEditorState extends State<WorkEditor> { | class _WorkEditorState extends State<WorkEditor> { | ||||||
|   final titleController = TextEditingController(); |   final titleController = TextEditingController(); | ||||||
| 
 | 
 | ||||||
|   BackendState backend; |  | ||||||
| 
 |  | ||||||
|   String title = ''; |  | ||||||
|   Person composer; |   Person composer; | ||||||
|   List<Instrument> instruments = []; |   List<Instrument> instruments = []; | ||||||
|   List<PartData> parts = []; |   List<PartData> parts = []; | ||||||
|  | @ -181,71 +181,26 @@ class _WorkEditorState extends State<WorkEditor> { | ||||||
|   void initState() { |   void initState() { | ||||||
|     super.initState(); |     super.initState(); | ||||||
| 
 | 
 | ||||||
|     if (widget.work != null) { |     if (widget.workInfo != null) { | ||||||
|       titleController.text = widget.work.title; |       titleController.text = widget.workInfo.work.title; | ||||||
|     } |       // TODO: Theoretically this includes the composers of all parts. | ||||||
|   } |       composer = widget.workInfo.composers.first; | ||||||
|  |       instruments = List.from(widget.workInfo.instruments); | ||||||
| 
 | 
 | ||||||
|   @override |       for (final partInfo in widget.workInfo.parts) { | ||||||
|   void didChangeDependencies() { |         parts.add(PartData( | ||||||
|     super.didChangeDependencies(); |           title: partInfo.work.title, | ||||||
| 
 |           composer: partInfo.composer, | ||||||
|     backend = Backend.of(context); |           instruments: List.from(partInfo.instruments), | ||||||
| 
 |         )); | ||||||
|     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) { |  | ||||||
|             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(() { |  | ||||||
|             instruments = selection; |  | ||||||
|           }); |  | ||||||
|         } |  | ||||||
|       }(); |  | ||||||
| 
 |  | ||||||
|       () async { |  | ||||||
|         final dbParts = await backend.db.workParts(widget.work.id).get(); |  | ||||||
|         for (final dbPart in dbParts) { |  | ||||||
|           final partInstruments = |  | ||||||
|               await backend.db.instrumentsByWork(dbPart.id).get(); |  | ||||||
| 
 |  | ||||||
|           Person partComposer; |  | ||||||
| 
 |  | ||||||
|           if (dbPart.composer != null) { |  | ||||||
|             partComposer = |  | ||||||
|                 await backend.db.personById(dbPart.composer).getSingle(); |  | ||||||
|           } |  | ||||||
| 
 |  | ||||||
|           setState(() { |  | ||||||
|             parts.add(PartData( |  | ||||||
|               title: dbPart.title, |  | ||||||
|               composer: partComposer, |  | ||||||
|               instruments: partInstruments, |  | ||||||
|             )); |  | ||||||
|           }); |  | ||||||
|         } |  | ||||||
|       }(); |  | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   @override |   @override | ||||||
|   Widget build(BuildContext context) { |   Widget build(BuildContext context) { | ||||||
|  |     final backend = Backend.of(context); | ||||||
|  | 
 | ||||||
|     final List<Widget> partTiles = []; |     final List<Widget> partTiles = []; | ||||||
|     for (var i = 0; i < parts.length; i++) { |     for (var i = 0; i < parts.length; i++) { | ||||||
|       final part = parts[i]; |       final part = parts[i]; | ||||||
|  | @ -297,7 +252,7 @@ class _WorkEditorState extends State<WorkEditor> { | ||||||
|           FlatButton( |           FlatButton( | ||||||
|             child: Text('DONE'), |             child: Text('DONE'), | ||||||
|             onPressed: () async { |             onPressed: () async { | ||||||
|               final workId = widget.work?.id ?? generateId(); |               final workId = widget?.workInfo?.work?.id ?? generateId(); | ||||||
| 
 | 
 | ||||||
|               List<PartInfo> partInfos = []; |               List<PartInfo> partInfos = []; | ||||||
|               for (var i = 0; i < parts.length; i++) { |               for (var i = 0; i < parts.length; i++) { | ||||||
|  |  | ||||||
|  | @ -47,14 +47,18 @@ class PersonScreen extends StatelessWidget { | ||||||
|                 final work = snapshot.data[index]; |                 final work = snapshot.data[index]; | ||||||
|                 return ListTile( |                 return ListTile( | ||||||
|                   title: Text(work.title), |                   title: Text(work.title), | ||||||
|                   onTap: () => Navigator.push( |                   onTap: () async { | ||||||
|                     context, |                     final workInfo = await backend.db.getWorkInfo(work); | ||||||
|                     MaterialPageRoute( | 
 | ||||||
|                       builder: (context) => WorkScreen( |                     Navigator.push( | ||||||
|                         work: work, |                       context, | ||||||
|  |                       MaterialPageRoute( | ||||||
|  |                         builder: (context) => WorkScreen( | ||||||
|  |                           workInfo: workInfo, | ||||||
|  |                         ), | ||||||
|                       ), |                       ), | ||||||
|                     ), |                     ); | ||||||
|                   ), |                   }, | ||||||
|                 ); |                 ); | ||||||
|               }, |               }, | ||||||
|             ); |             ); | ||||||
|  |  | ||||||
|  | @ -6,10 +6,10 @@ import '../editors/work.dart'; | ||||||
| import '../widgets/texts.dart'; | import '../widgets/texts.dart'; | ||||||
| 
 | 
 | ||||||
| class WorkScreen extends StatelessWidget { | class WorkScreen extends StatelessWidget { | ||||||
|   final Work work; |   final WorkInfo workInfo; | ||||||
| 
 | 
 | ||||||
|   WorkScreen({ |   WorkScreen({ | ||||||
|     this.work, |     this.workInfo, | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   @override |   @override | ||||||
|  | @ -18,7 +18,7 @@ class WorkScreen extends StatelessWidget { | ||||||
| 
 | 
 | ||||||
|     return Scaffold( |     return Scaffold( | ||||||
|       appBar: AppBar( |       appBar: AppBar( | ||||||
|         title: Text(work.title), |         title: Text(workInfo.work.title), | ||||||
|         actions: <Widget>[ |         actions: <Widget>[ | ||||||
|           IconButton( |           IconButton( | ||||||
|             icon: const Icon(Icons.edit), |             icon: const Icon(Icons.edit), | ||||||
|  | @ -27,7 +27,7 @@ class WorkScreen extends StatelessWidget { | ||||||
|                 context, |                 context, | ||||||
|                 MaterialPageRoute( |                 MaterialPageRoute( | ||||||
|                   builder: (context) => WorkEditor( |                   builder: (context) => WorkEditor( | ||||||
|                     work: work, |                     workInfo: workInfo, | ||||||
|                   ), |                   ), | ||||||
|                   fullscreenDialog: true, |                   fullscreenDialog: true, | ||||||
|                 ), |                 ), | ||||||
|  | @ -37,7 +37,7 @@ class WorkScreen extends StatelessWidget { | ||||||
|         ], |         ], | ||||||
|       ), |       ), | ||||||
|       body: StreamBuilder<List<Recording>>( |       body: StreamBuilder<List<Recording>>( | ||||||
|         stream: backend.db.recordingsByWork(work.id).watch(), |         stream: backend.db.recordingsByWork(workInfo.work.id).watch(), | ||||||
|         builder: (context, snapshot) { |         builder: (context, snapshot) { | ||||||
|           if (snapshot.hasData) { |           if (snapshot.hasData) { | ||||||
|             return ListView.builder( |             return ListView.builder( | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Elias Projahn
						Elias Projahn