如何从Flutter拨打电话?

Set*_*add 9 flutter

我正在构建一个Flutter应用程序,我想拨打一个电话号码以响应按钮.最好的方法是什么?

谢谢!

Raj*_*Jr. 14

这打开了拨号器

_launchCaller() async {
    const url = "tel:1234567";   
    if (await canLaunch(url)) {
       await launch(url);
    } else {
      throw 'Could not launch $url';
    }   
}
Run Code Online (Sandbox Code Playgroud)

使用onPressed调用_launcher:_launchcaller,

编辑:如果有人遇到错误:添加url_launcher:pubspec.yaml并运行flutter getflutter get

  • 这应该是正确且可接受的答案。这工作得很好。在以下位置找到了相同的参考:https://pub.dartlang.org/packages/url_launcher (2认同)

小智 9

您可以使用 url_launcher 小部件 ( https://pub.dev/packages/url_launcher )

  1. 将其添加到包的 pubspec.yaml 文件中:dependencies: url_launcher: ^5.7.10

  2. 安装它:$ flutter pub get

  3. 导入它import 'package:url_launcher/url_launcher.dart';

  4. 在您的类中,定义此方法,以便您可以从代码中的任何操作进行调用:

     Future<void> _makePhoneCall(String url) async {
     if (await canLaunch(url)) {
       await launch(url);
     } else {
       throw 'Could not launch $url';
     }
    
    Run Code Online (Sandbox Code Playgroud)

    }

  5. 在构建小部件内:

     IconButton(icon: new Icon(Icons.phone),
        onPressed: () 
        {
           setState(() {
              _makePhoneCall('tel:0597924917');
           });
        },
      ),
    
    Run Code Online (Sandbox Code Playgroud)

注1:电话号码应以“tel”为前缀:“tel:0123456789”

注2:有时需要关闭手机中的应用程序并重新打开它才能正常工作,因此flutter可以成功注入新widget的代码。


Buz*_*zzy 8

通常,要与底层平台交互,您必须编写特定于平台的代码并使用平台通道与相同的代码进行通信.但是,Flutter提供了与平台开箱即用的一些集成点.例如,要拨打电话,您可以使用带有该方案的UrlLauncher.launch API tel来拨打电话.

类似的东西UrlLauncher.launch("tel://<phone_number>");应该适用于所有平台.

请注意,这在模拟器中不起作用.因此,请确保使用实际设备进行测试.

  • 链接到 `UrlLauncher` 不再有效,该功能似乎已移至新包:https://pub.dartlang.org/packages/url_launcher (3认同)
  • “请注意,这在模拟器中不起作用。” - 非常感谢您! (3认同)

Chi*_*hah 7

使用url_launcher

import 'package:url_launcher/url_launcher.dart';
    
openDialPad(String phoneNumber) async {
    Uri url = Uri(scheme: "tel", path: phoneNumber);
    if (await canLaunchUrl(url)) {
      await launchUrl(url);
    } else {
       print("Can't open dial pad.");
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:不要忘记按照文档进行info.plist更新AndroidManifest.xml


Swa*_*nty 6

请按照以下步骤操作:

  1. url_launcher: Latest version在 pubspec.yaml 中添加依赖项

  2. \android\app\src\main\AndroidManifest.xml

  3. 在<application之前添加查询行,如下所示:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         package="com.example.flutter">
         <queries>
             <intent>
                 <action android:name="android.intent.action.DIAL" />
                 <data android:scheme="tel" />
             </intent>
         </queries>
        <application ...
    
    Run Code Online (Sandbox Code Playgroud)

更多疑问请关注此更多疑问

4.添加拨号功能,并设置url final url ="tel:$phoneNumber";像这样:

  Future<void> dialNumber(
      {required String phoneNumber, required BuildContext context}) async {
    final url = "tel:$phoneNumber";
    if (await canLaunch(url)) {
      await launch(url);
    } else {
      ShowSnackBar.showSnackBar(context, "Unable to call $phoneNumber");
    }

    return;
  }
Run Code Online (Sandbox Code Playgroud)
  1. 完毕


Dir*_*aph 5

截至2023 年 1 月,这对我有用

注意:与上面其他答案的主要区别是我的#4

另外:您现在可以在模拟器中使用测试

脚步:

1.添加url_launcher: latestpubspec.yaml

2.配置:

对于 IOS:添加作为文件中的tel条目传递的方案。canLaunchUrlLSApplicationQueriesSchemesInfo.plist

像这样:

<key>LSApplicationQueriesSchemes</key>
<array>
  <string>tel</string>
</array>
Run Code Online (Sandbox Code Playgroud)

对于 Android:添加方案作为条目tel传递到您的[ie \android\app\src\main\AndroidManifest.xml ] 文件中。canLaunchUrlqueriesAndroidManifest.xml

像这样:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.flutApp">
     <queries>
         <intent>
             <action android:name="android.intent.action.VIEW" />
             <data android:scheme="tel" />
         </intent>
     </queries>
   <application
Run Code Online (Sandbox Code Playgroud)

3.将 url_launcher 导入到您的文件中:ieimport 'package:url_launcher/url_launcher.dart';

4.代码

Future<void> _dialNumber(String phoneNumber) async {
final Uri launchUri = Uri(
scheme: 'tel',
path: phoneNumber,
);
await launchUrl(launchUri);
}
Run Code Online (Sandbox Code Playgroud)

来源url_launcher