ОШИБКА:flutter/lib/ui/ui_dart_state.cc(199) Необработанное исключение: не удалось выполнить вызов lanch в flutter

#flutter #flutter-layout #flutter-dependencies

Вопрос:

это может быть вызов значка мака с помощью INKWILL

  _Call() async {
const _url = 'tel:01140654053' ;
if (await canLaunch(_url)) {
  await launch(_url);
} else {
  throw 'could not lanch ';
}
 

}

и эта ошибка

 E/flutter ( 8522): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: could not lanch 
E/flutter ( 8522): #0      _MyHomePageState._Call (package:oonco_helpp/main.dart:105:7)
E/flutter ( 8522): <asynchronous suspension>
E/flutter ( 8522):
 

Ответ №1:

В Android 11 была введена более строгая защита при взаимодействии с другими приложениями, концепция видимости пакетов. Это причина canLaunch , по которой всегда возвращает false на Android 11 (API 30) и launchUrl завершается ошибкой при использовании пакета url_launcher.


Из этого блога они представили решение для этого:

Это можно исправить, настроив ваше приложение для создания других приложений, в которых android.intent.action.VIEW используется <queries> элемент фильтра намерений AndroidManifest.xml .

Чтобы <queries> элемент работал, рекомендуется обновить плагин Android Gradle (AGP) до версии 4.1. В файле gradle уровня проекта android/build.gradle выполните следующие действия, как показано ниже:

 buildscript {

    repositories {
        google()
        jcenter()
    }

    dependencies {
        // Using gradle plugin version 4.1.1
        classpath 'com.android.tools.build:gradle:4.1.1'
    }
}
 

Существуют другие версии dot для более ранних версий Android
Плагины Gradle. Узнайте больше
здесь
.

После обновления плагина gradle и создания приложения добавьте этот блок элементов в свой AndroidManifest.xml :

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.sample">

    <uses-permission android:name="android.permission.INTERNET"/>

    <!-- Add the block below to your manifest file to configure apps with action.VIEW intent filters as visible to your app -->
    <!-- START HERE -->
    <queries>
        <intent>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="https" />
        </intent>
    </queries>
    <!-- END HERE -->

    <application>
        ...
    </application>
</manifest>
 

После этого перестройте приложение и canLaunch вернитесь true
, а launchUrl также откройте URL-адрес на Android 11 (API 30).