NativeScript / mlkit

Apache License 2.0
24 stars 9 forks source link

Black screen on second scan #35

Open Noppey opened 1 year ago

Noppey commented 1 year ago

Tested on Android (multiple devices such as Samsung S10e)

Everything runs great when scanning. After I've processed other stuff and navigate back to the component that holds the scanner. Everything is initialized again (tested with console.log):

onLoaded(args) {
    this.camera = args.object;
    this.requestPermission();
  }

  requestPermission() {
    this.camera.requestCameraPermission();
  }

However the MLKitView is black and doesn't do anything. When pressing back (phone button) and navigating again to the scanner, everything starts working fine again.

<ActionBar [title]="'QRSCANNERTITLE' | L">
    <NavigationButton [text]="'BACK'| L"></NavigationButton>
</ActionBar>

<GridLayout rows="*, auto" height="100%">
    <MLKitView height="100%" [torchOn]="torchOn" cameraPosition="back" detectionType="all" (detection)="onDetection($event)" (loaded)="onLoaded($event)">

    </MLKitView>
    <Button row="1" height="40" [text]="torchOn ? ('TURNOFFTORCH' | L) : ('TURNONTORCH' | L)" (tap)="toggleTorch($event)"></Button>
</GridLayout>
Noppey commented 1 year ago

Setting an *ngIf="initialized" works when setting this to false after scanning and true onInit. So there is an easy workaround. But this shouldn't be necessary.

triniwiz commented 1 year ago

@Noppey can you try with the latest version 1.0.7 and lmk if this is still an issue.

boutier commented 1 year ago

I have a similar issue in 2.0.0. Using some ngIf may fix the problem, but it was not that easy to find the good timing: having this in the ngInit was not sufficient, so what I currently do is something like:

<GridLayout (loaded)="switch2 = true">
  <MLKitView *ngIf="switch2" [...] ></MLKitView>
</GridLayout>

edit:

nhuurnink commented 3 months ago

After upgrading to 8.8.0-alpha the initialize ngIf workaround does not work anymore for me. What I did now is removed the *ngIf and just run this.myMLKitView.disposeNativeView(); when leaving the scanner. This works well so far when testing.