我正在构建一个 Flutter 应用程序,我想拨打一个电话号码以响应按钮点击。最好的方法是什么?
谢谢!
此方法将打开拨号器:
_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';
通常,要与底层平台交互,您必须编写特定于平台的代码并使用平台通道与之通信。但是,Flutter 提供了一些开箱即用的平台集成点。例如,要拨打电话,您可以使用带有方案的UrlLauncher.launch APItel
来拨打电话。
类似的东西UrlLauncher.launch("tel://<phone_number>");
应该在所有平台上都能正常工作。
请注意,这在模拟器中不起作用。因此,请确保您使用的是实际设备来测试它。
您可以使用 url_launcher 小部件(https://pub.dev/packages/url_launcher)
将此添加到包的 pubspec.yaml 文件中:dependencies: url_launcher: ^5.7.10
安装它:$ flutter pub get
导入它import 'package:url_launcher/url_launcher.dart';
在您的类中,定义此方法,以便您可以从代码中的任何操作中调用:
Future<void> _makePhoneCall(String url) async {
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
在构建小部件内部:
IconButton(icon: new Icon(Icons.phone),
onPressed: ()
{
setState(() {
_makePhoneCall('tel:0597924917');
});
},
),
注意1:你应该写带有前缀'tel'的电话号码:'tel:0123456789'
注意2:有时需要关闭手机中的app再重新打开才能正常工作,所以flutter可以成功注入新widget的代码。
它太容易了
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);
}
请按照以下步骤操作:
url_launcher: Latest version
在 pubspec.yaml 中添加依赖项
去\android\app\src\main\AndroidManifest.xml
。
在<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;
}