ionic-team / ionic-team/ionic-framework

bug: Angular Ionic Android back button callback is executing twice

Open
#30,115 0 comments 0 reactions 0 assignees View on GitHub
triage
Dominant language
TypeScript
Stars
52.7k
Forks
13.3k
Avg merge
1d 15h
Merged PRs (30d)
51

Description

### Prerequisites

- [X] I have read the [Contributing Guidelines](https://github.com/ionic-team/ionic-framework/blob/main/docs/CONTRIBUTING.md#creating-an-issue).
- [X] I agree to follow the [Code of Conduct](https://ionicframework.com/code-of-conduct).
- [X] I have searched for [existing issues](https://github.com/ionic-team/ionic-framework/issues) that already report this problem, without success.

### Ionic Framework Version

v8.x

### Current Behavior

`app.component.html`:
```html



```

my page (component) TS file:
```ts
import { Component, inject, OnDestroy, OnInit } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule } from '@angular/router';
import { Subscription } from 'rxjs';
import { Platform } from '@ionic/angular/standalone';

@Component({
selector: 'e-test',
standalone: true,
imports: [CommonModule, RouterModule],
templateUrl: './test.component.html',
styleUrls: ['./test.component.scss'],
})
export class TestComponent implements OnInit, OnDestroy {
private readonly _platform = inject(Platform);
private _backSub!: Subscription;

ngOnInit() {
this._backSub = this._platform.backButton.subscribeWithPriority(
101,
() => {
console.log('back button called');
},
);
}

ngOnDestroy(): void {
if (this._backSub) this._backSub.unsubscribe();
}
}
```

As far as I can see, everything is correct! But my callback will be called twice!
Can someone help? Thanks a lot ❤️

### Expected Behavior

The callback should be called only once, because we subscribed to `subscribeWithPriority` only once... And we also unsubscribe from it, whenever the component is destroyed.

### Steps to Reproduce

1. Simply click the Android native back button.
2. Then you will see that 'back button called' console log message shows twice.

### Code Reproduction URL

https://stackblitz.com/edit/wusmwpve?file=src%2Fapp%2Fexample.component.ts

### Ionic Info

Ionic:

Ionic CLI : 7.2.0

Utility:

cordova-res : not installed globally
native-run : not installed globally

System:

NodeJS : v20.11.0
npm : 10.2.4
OS : Windows 10

### Additional Information

_No response_

Contributor guide

Open the contributing guide

Research direction

Start by running the linked StackBlitz reproduction and inspect app.component.html and the example component TypeScript file, especially the back-button subscription and its cleanup. Confirm whether one Android back-button press produces two logs, then trace the relevant framework behavior to identify the cause; done means the callback runs once and the reproduction still works.

Written by the indexing model from the issue text.

Assessment

Tech stack
angular, typescript
Domain
frontend, mobile
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.