flutter调用系统的打电话、发短信、发邮件功能

虚树季风
• 阅读 12420

介绍

类似于安卓的通过设置intent-action;
点击按钮就能跳转到系统的拨号,发短信,发邮件等界面。
效果图:

flutter调用系统的打电话、发短信、发邮件功能

引入类库

url_launcher: ^5.0.3
get_it: ^1.0.3+2

如下图所示:
在配置文件pubspec.yaml中引入两个类库:
flutter调用系统的打电话、发短信、发邮件功能

创建一个服务

TelAndSmsService.dart

import 'package:url_launcher/url_launcher.dart';

class TelAndSmsService {

  void call(String number) => launch("tel:$number");
  void sendSms(String number) => launch("sms:$number");
  void sendEmail(String email) => launch("mailto:$email");
}

创建一个注册服务的工具类

ServiceLocator.dart

import 'package:get_it/get_it.dart';
import './TelAndSmsService.dart';

GetIt locator = GetIt();
void setupLocator() {
  locator.registerSingleton(TelAndSmsService());
}

应用主入口调用

main.dart

import 'package:flutter/material.dart';
import './view_sample.dart';
import 'ServiceLocator.dart';
void main()  {
// 注册服务
setupLocator();
// 运行主界面
runApp(ViewSample());
}

调用打电话,发短信,发邮件

view_sample.dart

import 'package:flutter/material.dart';
import 'ServiceLocator.dart';
import 'TelAndSmsService.dart';

class   ViewSample extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return MaterialApp(
      title: 'view add or remove',
      theme: ThemeData(
        primaryColor: Colors.green,
      ),
      home: ViewPage(),
    );
  }
}

class ViewPage extends StatefulWidget{
  @override
  ViewPageState createState() => ViewPageState();

}
class ViewPageState extends State<ViewPage>{
  bool toggle = true;
  final TelAndSmsService _service = locator<TelAndSmsService>();
  final String number = "123456789";
  final String email = "12345@example.com";
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      appBar: AppBar(
        title: Text('view page'),
      ),
      body: Container(
        child: Column(
          children: <Widget>[
            RaisedButton(
              child: Text("打电话"),
              onPressed: ()=> _service.call(number)
              ,
            ),
            RaisedButton(
              child: Text("发短信"),
              onPressed: ()=> _service.sendSms(number)
            ),
            RaisedButton(
              child: Text("发邮件"),
                onPressed: ()=> _service.sendEmail(email)
            ),
          ],
        ),
      ),
    );
  }
  


}
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
基于Xposed自动化框架XposedAppium
基于Xposed做的一款自动化点击,滑动框架(基于安卓原生的事件分发)。可以模拟手指的一切操作,基于Xpath表达式获取View。此框架在virjar大佬的框架基础上进行的修改的,修复了部分Bug,添加常用方法等.在登入页面输入账号密码后,跳转到第二个Activity并点击对话框确定按钮。Xposed模块:很简单,添加对应的Activity,需要实Page
Wesley13 Wesley13
3年前
IOS 开发,调用打电话,发短信,打开网址
IOS开发,调用打电话,发短信,打开网址1、调用自带mail\\UIApplicationsharedApplication\openURL:\NSURLURLWithString:@"mailto://admin@hzlzh.com"\\;2、调用电话phone\\UI
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
vivo Y71的USB调试模式在哪里,开启vivo Y71USB调试模式的流程
就在我们使用安卓手机通过数据线连接到电脑的时候,如果手机没有开启usb开发者调试模式,电脑则没能成功识别我们的手机,部分工具也没能正常使用,此情况我们需要找解决方法将手机的usb开发者调试模式打开,以下内容我们讲解vivoY71如何开启usb开发者调试模式的方法。首先,在vivoY71应用程序界面点中“设置”ICON,进入vivoY71系统“设置”
可莉 可莉
3年前
2020.4.29美团Android开发暑期实习二面面经
美团安卓开发暑期实习一面面经1.自我介绍2.部门在北京,你怎么看待北京这座城市3.安卓四大组件是什么4.活动A跳转到活动B,A、B各自经历了哪些状态?如果又在B界面按了返回键呢?5.活动A跳转到活动B,再回到A,如何实现活动A中数据的数据持久化?6.如果跳转到活动B后,活动A被回收,此时再返回活
Wesley13 Wesley13
3年前
unity网络
网络TCP:与打电话类似,通知服务到位UDP:与发短信类似,消息发出即可IP和端口号是网络两大重要成员端口号(Port)分为知名端口号\01024,不开放)和动态端口号\1024,10000多,开放可用)三次握手,四次挥手:!(https://img2018.cnblogs.com/blog/1505331/2
Stella981 Stella981
3年前
2020.4.29美团Android开发暑期实习二面面经
美团安卓开发暑期实习一面面经1.自我介绍2.部门在北京,你怎么看待北京这座城市3.安卓四大组件是什么4.活动A跳转到活动B,A、B各自经历了哪些状态?如果又在B界面按了返回键呢?5.活动A跳转到活动B,再回到A,如何实现活动A中数据的数据持久化?6.如果跳转到活动B后,活动A被回收,此时再返回活
Stella981 Stella981
3年前
Android检查设备是否可以访问互联网,判断Internet连接,测试网络请求,解析域名
安卓SDK提供了ConnectivityManager类,那么我们就可以轻松的获取设备的网络状态以及联网方式等信息。 但是要想知道安卓设备连接的网络能不能访问到Internet,就要费一番周折了。 本文为大家介绍三种方式来检查Internet连接状态。1、使用Linux系统pingip的命令方式检查设备的Internet连接状态。 2
小天 小天
1年前
鸿蒙系统与安卓系统有什么区别
自从华为推出了鸿蒙系统后,不少网友都对此非常感兴趣,不知道跟传统的安卓系统相比,鸿蒙系统和安卓系二者有什么区别?鸿蒙系统与安卓系统还是有很大的区别。安卓系统是手机两大操作系统之一,而华为董事长任正非表示,鸿蒙系统不是专门用于手机的操作系统,而是为了做物联网