Flutter短信发送插件direct_sms的使用

Flutter短信发送插件direct_sms的使用

direct_sms 是一个用于在 Flutter 中发送短信的新插件。它允许我们直接通过代码发送短信,而无需打开手机默认的应用程序(仅支持 Android)。

使用说明

在使用 direct_sms 插件之前,确保请求短信权限,并在 AndroidManifest.xml 文件中添加相应的权限声明。

1. 请求权限

在使用插件发送短信前,必须请求短信权限。可以使用 permission_handler 插件来处理权限请求。

final permission = Permission.sms.request();
if (await permission.isGranted) {
  // 权限已授予,可以发送短信
} else {
  // 权限未授予,无法发送短信
}

2. 添加权限声明

AndroidManifest.xml 文件中添加以下权限声明:

<uses-permission android:name="android.permission.SEND_SMS" />

3. 安装插件

在项目的 pubspec.yaml 文件中添加 direct_smspermission_handler 依赖项:

dependencies:
  direct_sms: ^版本号
  permission_handler: ^版本号

然后运行 flutter pub get 命令安装依赖项。

4. 编写示例代码

以下是一个完整的示例代码,展示了如何使用 direct_sms 插件发送短信。

import 'package:flutter/material.dart';
import 'package:direct_sms/direct_sms.dart';
import 'package:permission_handler/permission_handler.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  var directSms = DirectSms();

  [@override](/user/override)
  void initState() {
    super.initState();
  }

  // 发送短信的方法
  _sendSms({required String number, required String message}) async {
    // 请求短信权限
    final permission = await Permission.sms.request();
    if (permission.isGranted) {
      // 如果权限已授予,则发送短信
      directSms.sendSms(message: message, phone: number);
    } else {
      // 如果权限未授予,提示用户
      print("SMS permission not granted");
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    // 创建控制器以获取输入值
    var phoneController = TextEditingController();
    var messageController = TextEditingController();
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Padding(
          padding: const EdgeInsets.symmetric(horizontal: 16),
          child: Expanded(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                // 输入电话号码的文本框
                TextField(
                  controller: phoneController,
                  keyboardType: TextInputType.number,
                  decoration: const InputDecoration(
                    label: Text("Phone Number"),
                    border: OutlineInputBorder(),
                  ),
                ),
                const SizedBox(height: 16),
                // 输入短信内容的文本框
                TextField(
                  controller: messageController,
                  decoration: const InputDecoration(
                    label: Text("Message"),
                    border: OutlineInputBorder(),
                  ),
                ),
                const SizedBox(height: 16),
                // 发送短信的按钮
                ElevatedButton(
                  onPressed: () {
                    // 调用发送短信方法
                    _sendSms(
                      message: messageController.text,
                      number: phoneController.text.trim(),
                    );
                  },
                  child: const Text("Send"),
                )
              ],
            ),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter短信发送插件direct_sms的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter短信发送插件direct_sms的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


direct_sms 是一个 Flutter 插件,允许你直接从应用程序发送短信,而无需打开系统的短信应用。这对于需要自动发送短信或需要直接在应用程序内处理短信发送的场景非常有用。

安装插件

首先,你需要在 pubspec.yaml 文件中添加 direct_sms 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  direct_sms: ^0.1.3

然后运行 flutter pub get 来安装插件。

配置 Android 权限

在 Android 平台上,发送短信需要一些权限。你需要在 AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>

配置 iOS 权限

在 iOS 平台上,发送短信需要使用 CoreTelephony 框架,并且需要用户授权。你需要在 Info.plist 文件中添加以下键:

<key>NSMicrophoneUsageDescription</key>
<string>We need access to send SMS</string>

使用 direct_sms 插件发送短信

下面是一个简单的示例,展示如何使用 direct_sms 插件发送短信:

import 'package:flutter/material.dart';
import 'package:direct_sms/direct_sms.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SmsScreen(),
    );
  }
}

class SmsScreen extends StatefulWidget {
  [@override](/user/override)
  _SmsScreenState createState() => _SmsScreenState();
}

class _SmsScreenState extends State<SmsScreen> {
  String _phoneNumber = '';
  String _message = '';
  bool _isSending = false;
  String _result = '';

  void _sendSms() async {
    setState(() {
      _isSending = true;
    });

    try {
      bool? result = await DirectSms.sendSms(
        phoneNumber: _phoneNumber,
        message: _message,
      );

      setState(() {
        _result = result == true ? 'SMS sent successfully!' : 'Failed to send SMS.';
        _isSending = false;
      });
    } catch (e) {
      setState(() {
        _result = 'Error: $e';
        _isSending = false;
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Send SMS'),
      ),
      body: Padding(
        padding: EdgeInsets.all(16.0),
        child: Column(
          children: <Widget>[
            TextField(
              decoration: InputDecoration(
                labelText: 'Phone Number',
                hintText: 'Enter phone number',
              ),
              onChanged: (value) {
                setState(() {
                  _phoneNumber = value;
                });
              },
            ),
            TextField(
              decoration: InputDecoration(
                labelText: 'Message',
                hintText: 'Enter message',
              ),
              onChanged: (value) {
                setState(() {
                  _message = value;
                });
              },
            ),
            SizedBox(height: 20),
            _isSending
                ? CircularProgressIndicator()
                : ElevatedButton(
                    onPressed: _sendSms,
                    child: Text('Send SMS'),
                  ),
            SizedBox(height: 20),
            Text(_result),
          ],
        ),
      ),
    );
  }
}
回到顶部