从颤动的应用程序拨打电话

时间:2017-08-05 15:06:29

标签: android flutter

我尝试通过Flutter应用程序拨打电话。使用以下代码:

UrlLauncher.launch('tel: xxxxxxxx');

我在github flutter repo上找到了这个函数:https://github.com/flutter/flutter/issues/4856

但这对我不起作用。这个功能仍然在颤动和哪个包中?或者有更好的选择从我的应用程序拨打电话?

10 个答案:

答案 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}'));
},

enter image description here

答案 2 :(得分:4)

这对我有用

使用this plugin

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,拨打号码和发送邮件的通用软件包。

  1. url_launcher: ^5.5.2添加到pubspec.yaml文件并运行flutter pub get
  2. 导入软件包import 'package:url_launcher/url_launcher.dart';
  3. 定义功能:
void launchUrl(String url) async {
  if (await canLaunch(url)) {
    launch(url);
  } else {
    throw "Could not launch $url";
  }
}
  1. 出于不同目的调用通用函数:
//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");
  }
}