【发布时间】:2017-08-26 05:18:00
【问题描述】:
我正在构建一个 Flutter 应用程序,我想拨打一个电话号码以响应按钮点击。最好的方法是什么?
谢谢!
【问题讨论】:
标签: flutter
我正在构建一个 Flutter 应用程序,我想拨打一个电话号码以响应按钮点击。最好的方法是什么?
谢谢!
【问题讨论】:
标签: flutter
它的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);
}
【讨论】:
您可以使用 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:有时需要关闭手机中的应用再重新打开才能正常工作,所以flutter可以成功注入新widget的代码。
【讨论】:
这个方法会打开拨号器:
_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';
【讨论】:
通常,要与底层平台交互,您必须编写特定于平台的代码并使用platform channels 与之通信。但是,Flutter 提供了一些开箱即用的平台集成点。例如拨打电话,您可以使用UrlLauncher.launch API 和tel 方案来拨打电话。
UrlLauncher.launch("tel://<phone_number>"); 之类的东西应该可以在所有平台上正常工作。
请注意,这在模拟器中不起作用。因此,请确保您使用的是实际设备进行测试。
【讨论】:
UrlLauncher 不再起作用,该功能似乎已移至新包:pub.dartlang.org/packages/url_launcher