我尝试通过Flutter应用程序拨打电话。使用以下代码:
UrlLauncher.launch('tel: xxxxxxxx');
我在github flutter repo上找到了这个函数:https://github.com/flutter/flutter/issues/4856
但这对我不起作用。这个功能仍然在颤动和哪个包中?或者有更好的选择从我的应用程序拨打电话?
答案 0 :(得分:21)
我尝试使用Android {iOS launch("tel://214324234")
,效果很好。
您需要安装包url_launcher并将其导入
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
home: new Home(),
);
}
}
class Home extends StatelessWidget {
Home({Key key}) : super(key: key);
@override
Widget build(BuildContext context) => new Scaffold(
appBar: new AppBar(
title: new Text("View"),
),
body: new Center(
child: new FlatButton(
onPressed: () => launch("tel://21213123123"),
child: new Text("Call me")),
),
);
}
void main() {
runApp(
new MyApp(),
);
}
您也可以将其import 'package:url_launcher/url_launcher.dart' as UrlLauncher;
导入,然后使用UrlLauncher.launch("tel://21213123123")
请确保在pubspec.yaml文件的dependencies部分中包含一个条目: url_launcher:^ 1.0.2
答案 1 :(得分:6)
如果您在单击按钮时没有采取任何措施,那么正因为如此。发生这种情况是因为您可能没有在数字前添加 tel:// 。
这样做吧
完整代码如下
launch(('tel://${mobile_no}')); //launch(('tel://99999xxxxx'));
pubspec.yaml中的1)
dependencies:
flutter:
sdk: flutter
url_launcher: ^5.4.10
2)导入要使用的任何地方
import 'package:url_launcher/url_launcher.dart';
3)最后呼叫
onPressed: () {
launch(('tel://${item.mobile_no}'));
},
答案 2 :(得分:4)
这对我有用
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:flutter_phone_direct_caller/flutter_phone_direct_caller.dart';
void main() => runApp(new MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => new _MyAppState();
}
class _MyAppState extends State<MyApp> {
TextEditingController _numberCtrl = new TextEditingController();
@override
void initState() {
super.initState();
_numberCtrl.text = "085921191121";
}
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new Scaffold(
appBar: new AppBar(
title: const Text('Plugin example app'),
),
body: new Column(
children:<Widget>[
Padding(
padding: EdgeInsets.all(8.0),
child: TextField(
controller: _numberCtrl,
decoration: InputDecoration(
labelText: "Phone Number"
),
keyboardType: TextInputType.number,
),
),
RaisedButton(
child: Text("Test Call"),
onPressed: () async{
FlutterPhoneDirectCaller.callNumber(_numberCtrl.text);
},
)
]
),
),
);
}
}
答案 3 :(得分:2)
您应该将其添加到pubspec.yaml => url_launcher:^ 5.0.2中,然后单击Packages get。
在代码中添加import:import'package:url_launcher / url_launcher.dart'作为UrlLauncher; 希望它能工作=)
identical(lst_out, do.call(Map, c(rbind, lst_1)))
#[1] TRUE
答案 4 :(得分:2)
url_launcher 是用于启动url,拨打号码和发送邮件的通用软件包。
url_launcher: ^5.5.2
添加到pubspec.yaml文件并运行flutter pub get
import 'package:url_launcher/url_launcher.dart';
void launchUrl(String url) async {
if (await canLaunch(url)) {
launch(url);
} else {
throw "Could not launch $url";
}
}
//for launching url
launchUrl("HTTP://example.com");
// for dial phone number
launchUrl("tel:+99364921507");
// for sending email
launchUrl("mailto:zehinz@gmail.com?subject=Meeting&body=Can we meet via Google Meet");
答案 5 :(得分:1)
如果你使用 url_launcher 并且你的电话号码有像“+1111111111”这样的加号,你应该使用 Uri 类
final Uri phoneUrl = Uri(
scheme: 'tel',
path: '+11111111111',
);
if (await canLaunch(phoneUrl.toString())) {
await launch(phoneUrl.toString());
} else {
throw "Can't phone that number.";
}
答案 6 :(得分:0)
请不要忘记通过flutter pub get
安装软件包并重新启动应用。
答案 7 :(得分:0)
在Pubspec.yamal中仅url_launcher: ^ latest Version
注意:在发布或升级Pub之前,请删除Pubspec.lock,这会带来不必要的问题。
导入包导入'package:url_launcher / url_launcher.dart';
//for launching URL
launchUrl("HTTP://website.com");
// for dial phone number
launchUrl("tel:+91963852741");
// for sending email
launchUrl("mailto:mail@gmail.com?subject=Meeting&body=Can we meet via Google Meet");
答案 8 :(得分:0)
您可以通过这个包直接调用flutter_phone_direct_caller
创建一个函数并传递手机号码值:
_callNumber(String mobile) async {
await FlutterPhoneDirectCaller.callNumber(mobile);
}
答案 9 :(得分:0)
要启动设备的拨号程序,还可以使用以下代码进行异常处理:
Future<void> launchPhoneDialer(String contactNumber) async {
final Uri _phoneUri = Uri(
scheme: "tel",
path: contactNumber
);
try {
if (await canLaunch(_phoneUri.toString()))
await launch(_phoneUri.toString());
} catch (error) {
throw("Cannot dial");
}
}