'Flutter uni_links duplicate the app every time a link is clicked

I am implementing a password recovery function based on the url sent to the email. Opening the app based on that url was successful. But instead of directly opening the required page in the app that is in the background, it duplicates the app. Although it still leads me to the password recovery page, now there will be 2 same apps running side by side

Procedure

  1. Enter your email to send the password reset link
  2. Click submit
  3. Open the email containing the recovery link
  4. Duplicate the app and open a recovery password page

Things what happen

Splash screen, first page open in the app, I am trying to do as instructed from uni_links package but still no success. Currently the function getInitialLink has the effect of opening the app based on the recovery link

class SplashController extends GetxController {
  final SharedPreferencesHelper _helper = Get.find<SharedPreferencesHelper>();
  late StreamSubscription sub;

  @override
  void onReady() async {
    super.onReady();
    await checkToken();
  }

  Future<void> checkToken() async {
    await Future.delayed(Duration(seconds: 3));
    var token = _helper.getToken();
    if (token == null) {
      Get.offNamed(Routes.LOGIN);
    } else {
      Get.offNamed(Routes.MAIN);
    }
  }


  @override
  void onInit() {
    super.onInit();
    initUniLinks();
  }

  Future<Null> initUniLinks() async {
    // Platform messages may fail, so we use a try/catch PlatformException.
    try {
      String? initialLink = await getInitialLink();
      if (initialLink != null) {
        print("okay man");
        Get.toNamed(Routes.RECOVERY);
      }

      sub = getLinksStream().listen((link) {
      }, onError: (err) {
      });
    } on PlatformException {
      // Handle exception by warning the user their action did not succeed
      // return?
    }
  }
}


Solution 1:[1]

I found the solution, actually this answer is already on Stackoverflow, and it's really simple.

In the AndroidManifest.xml file of the app. Find "android:launchMode" and change its old value to singleTask. And here is the result

android:launchMode="singleTask"

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Manishyadav