Flutter: url_launcher异常

5

我正在使用url_launcher依赖项,在我的图标上拥有一个拨号功能;然而,这在Android上有效,但不在iOS上有效?

调用launcher方法应该是:

   _launchcaller()  async
  {
    const url = '719-282-2224';

    if (await canLaunch(url))
    {
      await launch(url);
    }

    else{
      throw 'Could not launch $url';
    }

  }

然后,我在onTap监听器上调用该方法,代码如下:
new GestureDetector(

             onTap: _launchcaller,

      child: new Icon(Icons.phone, color: Colors.blue, size: 50.0,),

    ),

异常输出:

[VERBOSE-2:dart_error.cc(16)] Unhandled exception:
Could not launch tel:719-282-2224
#0      angryScreenState._launchcaller (file:///Users/ielbouyahyaouy/AndroidStudioProjects/app_firebase/flutter_app_books/lib/angryScreen.dart:103:7)
<asynchronous suspension>
#1      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
#2      TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:161:9)
#3      TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:94:7)
#4      PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:315:9)
#5      PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:73:12)
#6      PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:11)
#7      _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:143:19)
#8      _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (packag<…>

你能找到任何解决方案吗?我需要那个。谢谢。 - Alok
你可能正在使用iOS模拟器,请尝试使用实体设备。这是url_launcher在模拟器上已知的问题。 - MJ Montes
3个回答

1
你可以尝试这个:

try {
       var cellphone = '719-282-2224';
       await launch('tel:$cellphone');
    }catch (e){
       throw 'Could not launch $e';
 }

1

从API30(Android 11)开始,如果您想在Flutter应用程序中打开URL(拨号号码),则应进行以下url_launcher配置:

1- 对于Android:

<manifest>

    <queries>

        <intent>
            <action android:name="android.intent.action.DIAL" />
            <data android:scheme="tel" />
        </intent>

    </queries>

    <application>
        ...
    </application>

</manifest>

2- 对于iOS:将以下内容添加到您的info.plist文件中

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>https</string>
    <string>http</string>
    <string>tel</string>
    <string>mailto</string>
</array> 

1

若要使 iOS 设备将 URL 视为电话号码,则需要去掉破折号。您可以这样做。它还应该以 tel:// 为前缀。

url = 'tel://719-282-2224';
url = url.replaceAll(new RegExp(r'-'), ''); // remove dashes

1
无论您提供的任何建议,如tel:1234455tel://123455,都无法正常工作,抛出相同的错误。 - Alok

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接