谢谢!
这个方法将会打开拨号器:
_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';
tel
协议来拨打电话。
类似UrlLauncher.launch("tel://<phone_number>");
应该在所有平台上都可以正常工作。
请注意,这在模拟器中不起作用。因此,请确保使用实际设备测试此功能。
UrlLauncher
不再可用,该功能似乎已被移动到一个新的包中:https://pub.dartlang.org/packages/url_launcher。 - RenatoAdd this to your package's pubspec.yaml file: dependencies: url_launcher: ^5.7.10
Install it: $ flutter pub get
Import it import 'package:url_launcher/url_launcher.dart';
Inside your class, define this method so you can call from any action in your code:
Future<void> _makePhoneCall(String url) async {
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
inside the build widget:
IconButton(icon: new Icon(Icons.phone),
onPressed: ()
{
setState(() {
_makePhoneCall('tel:0597924917');
});
},
),
注意 1:你应该使用前缀“tel”编写电话号码:“tel:0123456789”
注意 2:有时直到您关闭移动应用程序并重新打开它,Flutter才能成功注入新小部件的代码,此时原来的代码可能无法正常工作。
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.");
}
}
info.plist
和AndroidManifest.xml
。请按照以下步骤操作:
add the url_launcher: Latest version
dependency in your pubspec.yaml
Go to \android\app\src\main\AndroidManifest.xml
.
add the queries lines before the <application, like this :
<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.添加拨号功能,设置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;
}
这太容易了,点击链接
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);
}
以下是我在2023年1月的实践结果:
NB:与上面其他答案的主要区别在于我的#4
ALSO:现在您可以在模拟器中测试此功能
步骤:
1.将url_launcher:latest
添加到pubspec.yaml
2.配置:
对于IOS:将tel
方案传递给canLaunchUrl
作为LSApplicationQueriesSchemes
条目添加到您的Info.plist
文件中。
像这样:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>tel</string>
</array>
对于安卓:在你的 AndroidManifest.xml
文件中添加 tel
方案,将其作为 queries
条目传递给 canLaunchUrl
。[即 \android\app\src\main\AndroidManifest.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
3.将url_launcher导入到您的文件中:例如 import 'package:url_launcher/url_launcher.dart';
4.代码
Future<void> _dialNumber(String phoneNumber) async {
final Uri launchUri = Uri(
scheme: 'tel',
path: phoneNumber,
);
await launchUrl(launchUri);
}
Source: url_launcher
Info.plist
和AndoridManifiest
这两个步骤非常有帮助。谢谢。 - undefinedURL启动器已更新其依赖项,因此这是更新后执行此任务的方法,它适用于Android和iOS。
final Uri launchUri = Uri(
scheme: 'tel',
path: number,
);
await launchUrl(launchUri);
如果您没有使用过这个插件,只需导入此插件即可。