根據(jù)您正在開發(fā)的應(yīng)用程序類型并级,您可能希望用戶通過(guò)按下應(yīng)用程序中的按鈕快速撥打電話或發(fā)送消息或電子郵件。這可能是有用的凛虽,例如死遭,如果您希望他聯(lián)系支持熱線,或者如果您想讓他打電話給商店或餐館凯旋。
添加url_launcher包
為了完成上述所有操作呀潭,我們需要導(dǎo)入一個(gè)名為url_launcher的庫(kù),您可能已經(jīng)使用它來(lái)從您的flutter應(yīng)用程序啟動(dòng)safari或chrome上的網(wǎng)站至非。如果您還沒有钠署,請(qǐng)將它添加到我們的pubspec.yaml文件中。
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.2
get_it: ^1.0.3+2
url_launcher: ^5.0.3
創(chuàng)建呼叫和消息服務(wù)
在我們的services文件夾中荒椭,讓我們創(chuàng)建一個(gè)calls_and_messages_service.dart文件谐鼎。
import 'package:url_launcher/url_launcher.dart';
class CallsAndMessagesService {
void call(String number) => launch("tel:$number");
void sendSms(String number) => launch("sms:$number");
void sendEmail(String email) => launch("mailto:$email");
}
這應(yīng)該很容易理解,需要注意的是URL格式趣惠。
- tel:后面跟著號(hào)碼會(huì)打開默認(rèn)的手機(jī)應(yīng)用程序
- sms:后跟數(shù)字將打開默認(rèn)消息應(yīng)用程序
- mailto:然后電子郵件將打開默認(rèn)的電子郵件應(yīng)用程序
接下來(lái)狸棍,我們的service_locator
為了實(shí)例化CallsAndMessagesService并讓它在我們的應(yīng)用程序的任何地方快速可用,我們希望使用get_it創(chuàng)建服務(wù)定位器味悄。
GetIt locator = GetIt();
void setupLocator() {
locator.registerSingleton(CallsAndMessagesService());
}
并且不要忘記在main函數(shù)中調(diào)用setupLocator草戈。
void main() {
setupLocator();
runApp(MyApp());
}
獲得服務(wù)
為了能夠訪問(wèn)CallsAndMessagesService,我們使用定位器調(diào)用它侍瑟。
class _MyHomePageState extends State<MyHomePage> {
final CallsAndMessagesService _service = locator<CallsAndMessagesService>();
final String number = "123456789";
final String email = "dancamdev@example.com";
...
}
創(chuàng)建快速UI并調(diào)用相應(yīng)的方法
將它包裝起來(lái)唐片,讓我們?yōu)橹皩?shí)現(xiàn)的功能創(chuàng)建一個(gè)包含三個(gè)按鈕的列。
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('dancamdev'),
),
body: Container(
width: double.infinity,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
RaisedButton(
child: Text(
"call $number",
),
onPressed: () => _service.call(number),
),
SizedBox(height: 20),
RaisedButton(
child: Text(
"message $number",
),
onPressed: () => _service.sendSms(number),
),
SizedBox(height: 20),
RaisedButton(
child: Text(
"email $email",
),
onPressed: () => _service.sendEmail(email),
),
],
),
),
);
GitHub鏈接為本文中顯示的代碼
本文中的所有代碼都可以在此GitHub鏈接中找到涨颜。
結(jié)論
這是一個(gè)快速的片段费韭,以便您可以通過(guò)顫動(dòng)的應(yīng)用程序撥打電話,發(fā)送短信和電子郵件庭瑰。我希望你喜歡這個(gè)片段星持!