@@ -9,25 +9,45 @@ import {
99 IonTitle ,
1010 IonToolbar ,
1111 useIonViewDidEnter ,
12+ useIonViewDidLeave ,
1213} from '@ionic/react' ;
1314import React , { useState } from 'react' ;
14- import { Capacitor } from '@capacitor/core' ;
15- import { StatusBar , Style } from '@capacitor/status-bar' ;
15+ import { Capacitor , PluginListenerHandle } from '@capacitor/core' ;
16+ import { StatusBar , StatusBarInfo , Style } from '@capacitor/status-bar' ;
1617
1718const StatusBarPage : React . FC = ( ) => {
1819 const [ statusbarInfoJson , setStatusbarInfoJson ] = useState ( '' ) ;
1920 const [ showButtons , setShowButtons ] = useState ( true ) ;
21+ let visibilityChangedHandler : PluginListenerHandle ;
22+ let overlayChangedHandler : PluginListenerHandle ;
2023
2124 useIonViewDidEnter ( ( ) => {
2225 if ( Capacitor . isPluginAvailable ( 'StatusBar' ) ) {
2326 window . addEventListener ( 'statusTap' , function ( ) {
2427 console . log ( 'statusbar tapped' ) ;
2528 } ) ;
29+ setListeners ( ) ;
2630 } else {
2731 setShowButtons ( false ) ;
2832 }
2933 } ) ;
3034
35+ const setListeners = async ( ) => {
36+ visibilityChangedHandler = await StatusBar . addListener (
37+ 'statusBarVisibilityChanged' ,
38+ ( info : StatusBarInfo ) => {
39+ console . log ( 'status bar visibility changed' , info ) ;
40+ } ,
41+ ) ;
42+
43+ overlayChangedHandler = await StatusBar . addListener (
44+ 'statusBarOverlayChanged' ,
45+ ( info : StatusBarInfo ) => {
46+ console . log ( 'status bar overlay changed' , info ) ;
47+ } ,
48+ ) ;
49+ } ;
50+
3151 const changeStatusBar = async ( ) => {
3252 StatusBar . setStyle ( {
3353 style : Style . Default ,
@@ -83,6 +103,11 @@ const StatusBarPage: React.FC = () => {
83103 setStatusbarInfoJson ( JSON . stringify ( info , null , 2 ) ) ;
84104 } ;
85105
106+ useIonViewDidLeave ( ( ) => {
107+ visibilityChangedHandler . remove ( ) ;
108+ overlayChangedHandler . remove ( ) ;
109+ } ) ;
110+
86111 return (
87112 < IonPage >
88113 < IonHeader >
0 commit comments