36

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

谢谢!

4

5 回答 5

67

此方法将打开拨号器:

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

编辑:

如果有人遇到错误:

添加url_launcher:pubspec.yaml 并运行flutter get

import 'package:url_launcher/url_launcher.dart';

于 2018-06-01T11:59:23.373 回答
33

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

类似的东西UrlLauncher.launch("tel://<phone_number>");应该在所有平台上都能正常工作。

请注意,这在模拟器中不起作用。因此,请确保您使用的是实际设备来测试它。

于 2017-03-31T23:10:03.600 回答
5

您可以使用 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';
     }
    

    }

  5. 在构建小部件内部:

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

注意1:你应该写带有前缀'tel'的电话号码:'tel:0123456789'

注意2:有时需要关闭手机中的app再重新打开才能正常工作,所以flutter可以成功注入新widget的代码。

于 2021-02-07T16:16:10.947 回答
1

太容易了

import 'package:flutter/material.dart';
import 'package:flutter_phone_direct_caller/flutter_phone_direct_caller.dart';

void main() {
  runApp(Scaffold(
    body: Center(
      child: RaisedButton(
        onPressed: _callNumber,
        child: Text('Call Number'),
      ),
    ),
  ));
}

_callNumber() async{
  const number = '08592119XXXX'; //set the number here
  bool res = await FlutterPhoneDirectCaller.callNumber(number);
}
于 2021-06-14T18:57:32.583 回答
0

请按照以下步骤操作:

  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 ...
    

有关更多查询,请按照此更多查询

4.增加拨号功能,设置网址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;
  }
  1. 完毕
于 2022-02-26T03:53:08.423 回答