Committed by
GitHub
Merge pull request #6 from elias8/master
fix: Handle all cases when a controller should be initialized and disposed
Showing
1 changed file
with
25 additions
and
9 deletions
| @@ -26,9 +26,12 @@ class MobileScanner extends StatefulWidget { | @@ -26,9 +26,12 @@ class MobileScanner extends StatefulWidget { | ||
| 26 | final BoxFit fit; | 26 | final BoxFit fit; |
| 27 | 27 | ||
| 28 | /// Create a [MobileScanner] with a [controller], the [controller] must has been initialized. | 28 | /// Create a [MobileScanner] with a [controller], the [controller] must has been initialized. |
| 29 | - const MobileScanner( | ||
| 30 | - {Key? key, this.onDetect, this.controller, this.fit = BoxFit.cover}) | ||
| 31 | - : assert((controller != null)), | 29 | + const MobileScanner({ |
| 30 | + Key? key, | ||
| 31 | + this.onDetect, | ||
| 32 | + this.controller, | ||
| 33 | + this.fit = BoxFit.cover, | ||
| 34 | + }) : assert((controller != null)), | ||
| 32 | super(key: key); | 35 | super(key: key); |
| 33 | 36 | ||
| 34 | @override | 37 | @override |
| @@ -43,11 +46,7 @@ class _MobileScannerState extends State<MobileScanner> | @@ -43,11 +46,7 @@ class _MobileScannerState extends State<MobileScanner> | ||
| 43 | @override | 46 | @override |
| 44 | void initState() { | 47 | void initState() { |
| 45 | super.initState(); | 48 | super.initState(); |
| 46 | - if (widget.controller == null) { | ||
| 47 | - controller = MobileScannerController(); | ||
| 48 | - } else { | ||
| 49 | - controller = widget.controller!; | ||
| 50 | - } | 49 | + controller = widget.controller ?? MobileScannerController(); |
| 51 | } | 50 | } |
| 52 | 51 | ||
| 53 | @override | 52 | @override |
| @@ -97,8 +96,25 @@ class _MobileScannerState extends State<MobileScanner> | @@ -97,8 +96,25 @@ class _MobileScannerState extends State<MobileScanner> | ||
| 97 | } | 96 | } |
| 98 | 97 | ||
| 99 | @override | 98 | @override |
| 100 | - void dispose() { | 99 | + void didUpdateWidget(covariant MobileScanner oldWidget) { |
| 100 | + super.didUpdateWidget(oldWidget); | ||
| 101 | + if (oldWidget.controller == null) { | ||
| 102 | + if (widget.controller != null) { | ||
| 101 | controller.dispose(); | 103 | controller.dispose(); |
| 104 | + controller = widget.controller!; | ||
| 105 | + } | ||
| 106 | + } else { | ||
| 107 | + if (widget.controller == null) { | ||
| 108 | + controller = MobileScannerController(); | ||
| 109 | + } else if (oldWidget.controller != widget.controller) { | ||
| 110 | + controller = widget.controller!; | ||
| 111 | + } | ||
| 112 | + } | ||
| 113 | + } | ||
| 114 | + | ||
| 115 | + @override | ||
| 116 | + void dispose() { | ||
| 117 | + if (widget.controller == null) controller.dispose(); | ||
| 102 | super.dispose(); | 118 | super.dispose(); |
| 103 | } | 119 | } |
| 104 | } | 120 | } |
-
Please register or login to post a comment