| 
									
										
										
										
											2022-09-22 13:08:48 +08:00
										 |  |  | import 'package:app_flowy/startup/plugin/plugin.dart'; | 
					
						
							|  |  |  | import 'package:app_flowy/workspace/application/view/view_listener.dart'; | 
					
						
							| 
									
										
										
										
											2022-09-26 16:59:58 +08:00
										 |  |  | import 'package:dartz/dartz.dart'; | 
					
						
							| 
									
										
										
										
											2022-09-22 13:08:48 +08:00
										 |  |  | import 'package:flowy_sdk/log.dart'; | 
					
						
							|  |  |  | import 'package:flowy_sdk/protobuf/flowy-folder/view.pb.dart'; | 
					
						
							|  |  |  | import 'package:flutter/material.dart'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-26 16:59:58 +08:00
										 |  |  | class ViewPluginNotifier extends PluginNotifier<Option<DeletedViewPB>> { | 
					
						
							| 
									
										
										
										
											2022-09-22 13:08:48 +08:00
										 |  |  |   final ViewListener? _viewListener; | 
					
						
							|  |  |  |   ViewPB view; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							| 
									
										
										
										
											2022-09-26 16:59:58 +08:00
										 |  |  |   final ValueNotifier<Option<DeletedViewPB>> isDeleted = ValueNotifier(none()); | 
					
						
							| 
									
										
										
										
											2022-09-22 13:08:48 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   final ValueNotifier<int> isDisplayChanged = ValueNotifier(0); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   ViewPluginNotifier({ | 
					
						
							|  |  |  |     required this.view, | 
					
						
							|  |  |  |   }) : _viewListener = ViewListener(view: view) { | 
					
						
							|  |  |  |     _viewListener?.start(onViewUpdated: (result) { | 
					
						
							|  |  |  |       result.fold( | 
					
						
							|  |  |  |         (updatedView) { | 
					
						
							|  |  |  |           view = updatedView; | 
					
						
							|  |  |  |           isDisplayChanged.value = updatedView.hashCode; | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         (err) => Log.error(err), | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |     }, onViewMoveToTrash: (result) { | 
					
						
							|  |  |  |       result.fold( | 
					
						
							| 
									
										
										
										
											2022-09-26 16:59:58 +08:00
										 |  |  |         (deletedView) => isDeleted.value = some(deletedView), | 
					
						
							| 
									
										
										
										
											2022-09-22 13:08:48 +08:00
										 |  |  |         (err) => Log.error(err), | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   void dispose() { | 
					
						
							|  |  |  |     isDeleted.dispose(); | 
					
						
							|  |  |  |     isDisplayChanged.dispose(); | 
					
						
							|  |  |  |     _viewListener?.stop(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |