根據您正在開發的應用程序類型,您可能希望用戶通過按下應用程序中的按鈕快速撥打電話或發送消息或電子郵件。這可能是有用的,例如,如果您希望他聯系支持熱線,或者如果您想讓他打電話給商店或餐館。
添加url_launcher包
為了完成上述所有操作,我們需要導入一個名為url_launcher的庫,您可能已經使用它來從您的flutter應用程序啟動safari或chrome上的網站。如果您還沒有,請將它添加到我們的pubspec.yaml文件中。
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.2
get_it: ^1.0.3+2
url_launcher: ^5.0.3
創建呼叫和消息服務
在我們的services文件夾中,讓我們創建一個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");
}
這應該很容易理解,需要注意的是URL格式。
- tel:后面跟著號碼會打開默認的手機應用程序
- sms:后跟數字將打開默認消息應用程序
- mailto:然后電子郵件將打開默認的電子郵件應用程序
接下來,我們的service_locator
為了實例化CallsAndMessagesService并讓它在我們的應用程序的任何地方快速可用,我們希望使用get_it創建服務定位器。
GetIt locator = GetIt();
void setupLocator() {
locator.registerSingleton(CallsAndMessagesService());
}
并且不要忘記在main函數中調用setupLocator。
void main() {
setupLocator();
runApp(MyApp());
}
獲得服務
為了能夠訪問CallsAndMessagesService,我們使用定位器調用它。
class _MyHomePageState extends State<MyHomePage> {
final CallsAndMessagesService _service = locator<CallsAndMessagesService>();
final String number = "123456789";
final String email = "dancamdev@example.com";
...
}
創建快速UI并調用相應的方法
將它包裝起來,讓我們為之前實現的功能創建一個包含三個按鈕的列。
@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鏈接中找到。
結論
這是一個快速的片段,以便您可以通過顫動的應用程序撥打電話,發送短信和電子郵件。我希望你喜歡這個片段!