【问题标题】:How can I dial the phone from Flutter?如何从 Flutter 拨打电话?
【发布时间】:2017-08-26 05:18:00
【问题描述】:

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

谢谢!

【问题讨论】:

标签: flutter


【解决方案1】:

它的too easy

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);
}

【讨论】:

    【解决方案2】:

    您可以使用 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:有时需要关闭手机中的应用再重新打开才能正常工作,所以flutter可以成功注入新widget的代码。

    【讨论】:

      【解决方案3】:

      这个方法会打开拨号器:

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

      编辑:

      如果有人遇到错误:

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

      还有import 'package:url_launcher/url_launcher.dart';

      【讨论】:

      【解决方案4】:

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

      UrlLauncher.launch("tel://&lt;phone_number&gt;"); 之类的东西应该可以在所有平台上正常工作。

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

      【讨论】:

      • 是否也可以进行更多低级电话活动?我正在考虑创建一个完全替代的拨号器应用程序,我想知道它是否可以在颤振中完成。
      • 链接到UrlLauncher 不再起作用,该功能似乎已移至新包:pub.dartlang.org/packages/url_launcher
      • “请注意,这在模拟器中不起作用。” - 非常感谢!
      猜你喜欢
      • 2018-01-13
      • 2019-05-16
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      • 1970-01-01
      • 2017-12-21
      相关资源
      最近更新 更多