Flutter短信发送插件flutter_sms_actual_kotlin的使用

发布于 1周前 作者 caililin 来自 Flutter

Flutter短信发送插件flutter_sms_actual_kotlin的使用

简介

Flutter插件用于在Android和iOS上发送短信和彩信。如果发送给多个人,它会作为彩信发送。在iOS上,如果号码是iPhone且启用了iMessage,它将作为iMessage发送。


如何使用

您可以有多种方式发送短信:

  1. 只输入消息而无需指定收件人。
  2. 只输入收件人而无需消息。
  3. 同时输入消息和收件人。

这将自动填充正确的字段。


示例代码

安装并导入插件

确保在项目的pubspec.yaml文件中添加以下依赖项:

dependencies:
  flutter_sms: ^2.0.0

然后运行以下命令以安装依赖项:

flutter pub get

接下来,在Dart文件中导入插件:

import 'package:flutter_sms/flutter_sms.dart';

创建发送短信的功能

定义一个函数来处理短信发送逻辑:

void _sendSMS(String message, List<String> recipients) async {
  String _result = await sendSMS(message: message, recipients: recipients)
      .catchError((onError) {
    print(onError); // 打印错误信息
  });
  print(_result); // 打印发送结果
}

调用发送短信功能

以下是一个简单的调用示例:

String message = "这是测试消息!";
List<String> recipents = ["1234567890", "5556787676"];

_sendSMS(message, recipents);

直接发送

警告:只有少数类别应用可以通过此功能进入Google Play商店。建议仅在符合此类别的应用或计划通过第三方平台分发时使用该功能。

在Android上,可以跳过额外的对话框,直接发送短信。

示例代码

String message = "这是测试消息!";
List<String> recipents = ["1234567890", "5556787676"];

String _result = await sendSMS(
  message: message,
  recipients: recipents,
  sendDirect: true, // 跳过对话框
).catchError((onError) {
  print(onError);
});
print(_result);

注意事项

直接发送短信还需要在AndroidManifest.xml中添加以下权限:

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

完整示例代码

以下是完整的示例代码,展示了如何在Flutter中集成flutter_sms插件:

import 'dart:async';

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

void main() => runApp(MyApp());

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

class _MyAppState extends State<MyApp> {
  late TextEditingController _controllerPeople, _controllerMessage;
  String? _message, body;
  String _canSendSMSMessage = '检查尚未运行。';
  List<String> people = [];
  bool sendDirect = false;

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

  Future<void> initPlatformState() async {
    _controllerPeople = TextEditingController();
    _controllerMessage = TextEditingController();
  }

  Future<void> _sendSMS(List<String> recipients) async {
    try {
      String _result = await sendSMS(
        message: _controllerMessage.text,
        recipients: recipients,
        sendDirect: sendDirect,
      );
      setState(() => _message = _result);
    } catch (error) {
      setState(() => _message = error.toString());
    }
  }

  Future<bool> _canSendSMS() async {
    bool _result = await canSendSMS();
    setState(() =>
        _canSendSMSMessage = _result ? '此设备可以发送短信' : '此设备无法发送短信');
    return _result;
  }

  Widget _phoneTile(String name) {
    return Padding(
      padding: const EdgeInsets.all(3),
      child: Container(
        decoration: BoxDecoration(
            border: Border(
          bottom: BorderSide(color: Colors.grey.shade300),
          top: BorderSide(color: Colors.grey.shade300),
          left: BorderSide(color: Colors.grey.shade300),
          right: BorderSide(color: Colors.grey.shade300),
        )),
        child: Padding(
          padding: const EdgeInsets.all(4),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            mainAxisSize: MainAxisSize.min,
            children: <Widget>[
              IconButton(
                icon: const Icon(Icons.close),
                onPressed: () => setState(() => people.remove(name)),
              ),
              Padding(
                padding: const EdgeInsets.all(0),
                child: Text(
                  name,
                  textScaleFactor: 1,
                  style: const TextStyle(fontSize: 12),
                ),
              )
            ],
          ),
        ),
      ),
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(
          title: const Text('短信/彩信示例'),
        ),
        body: ListView(
          children: <Widget>[
            if (people.isEmpty)
              const SizedBox(height: 0)
            else
              SizedBox(
                height: 90,
                child: Padding(
                  padding: const EdgeInsets.all(3),
                  child: ListView(
                    scrollDirection: Axis.horizontal,
                    children: List<Widget>.generate(people.length, (int index) {
                      return _phoneTile(people[index]);
                    }),
                  ),
                ),
              ),
            ListTile(
              leading: const Icon(Icons.people),
              title: TextField(
                controller: _controllerPeople,
                decoration: const InputDecoration(labelText: '添加电话号码'),
                keyboardType: TextInputType.number,
                onChanged: (String value) => setState(() {}),
              ),
              trailing: IconButton(
                icon: const Icon(Icons.add),
                onPressed: _controllerPeople.text.isEmpty
                    ? null
                    : () => setState(() {
                          people.add(_controllerPeople.text.toString());
                          _controllerPeople.clear();
                        }),
              ),
            ),
            const Divider(),
            ListTile(
              leading: const Icon(Icons.message),
              title: TextField(
                decoration: const InputDecoration(labelText: '添加消息'),
                controller: _controllerMessage,
                onChanged: (String value) => setState(() {}),
              ),
            ),
            const Divider(),
            ListTile(
              title: const Text('是否支持发送短信'),
              subtitle: Text(_canSendSMSMessage),
              trailing: IconButton(
                padding: const EdgeInsets.symmetric(vertical: 16),
                icon: const Icon(Icons.check),
                onPressed: () {
                  _canSendSMS();
                },
              ),
            ),
            SwitchListTile(
                title: const Text('直接发送'),
                subtitle: const Text(
                    '是否跳过额外的对话框?(仅限Android)'),
                value: sendDirect,
                onChanged: (bool newValue) {
                  setState(() {
                    sendDirect = newValue;
                  });
                }),
            Padding(
              padding: const EdgeInsets.all(8),
              child: ElevatedButton(
                style: ButtonStyle(
                  backgroundColor: MaterialStateProperty.resolveWith(
                      (states) => Theme.of(context).colorScheme.secondary),
                  padding: MaterialStateProperty.resolveWith(
                      (states) => const EdgeInsets.symmetric(vertical: 16)),
                ),
                onPressed: () {
                  _send();
                },
                child: Text(
                  '发送',
                  style: Theme.of(context).textTheme.displayMedium,
                ),
              ),
            ),
            Visibility(
              visible: _message != null,
              child: Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Expanded(
                    child: Padding(
                      padding: const EdgeInsets.all(12),
                      child: Text(
                        _message ?? '无数据',
                        maxLines: null,
                      ),
                    ),
                  ),
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }

  void _send() {
    if (people.isEmpty) {
      setState(() => _message = '至少需要1个联系人或消息');
    } else {
      _sendSMS(people);
    }
  }
}

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

1 回复

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


flutter_sms_actual_kotlin 是一个 Flutter 插件,用于在 Android 平台上发送短信。它使用 Kotlin 编写,并且提供了一种简单的方法来发送短信。以下是如何使用这个插件的步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_sms_actual_kotlin: ^1.0.0  # 请使用最新的版本

然后运行 flutter pub get 来安装依赖。

2. 导入插件

在你的 Dart 文件中导入插件:

import 'package:flutter_sms_actual_kotlin/flutter_sms_actual_kotlin.dart';

3. 发送短信

你可以使用 sendSMS 方法来发送短信。以下是一个简单的示例:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Send SMS Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              String message = "Hello, this is a test message!";
              String phoneNumber = "1234567890"; // 替换为你要发送短信的手机号码

              bool? result = await FlutterSmsActualKotlin.sendSMS(
                phoneNumber: phoneNumber,
                message: message,
              );

              if (result == true) {
                print("SMS sent successfully!");
              } else {
                print("Failed to send SMS.");
              }
            },
            child: Text('Send SMS'),
          ),
        ),
      ),
    );
  }
}

4. 处理权限

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

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

此外,如果你的应用目标 API 级别为 23 或更高,你还需要在运行时请求权限。你可以使用 permission_handler 插件来处理运行时权限。

5. 处理结果

sendSMS 方法返回一个 bool? 值,表示短信是否成功发送。你可以根据返回值来处理成功或失败的情况。

6. 注意事项

  • 该插件仅支持 Android 平台。
  • 确保你使用的手机号码是有效的,并且设备支持发送短信。
  • 由于短信发送可能涉及费用,请确保用户知晓并同意发送短信。

7. 示例代码

以下是一个完整的示例代码:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Send SMS Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              String message = "Hello, this is a test message!";
              String phoneNumber = "1234567890"; // 替换为你要发送短信的手机号码

              bool? result = await FlutterSmsActualKotlin.sendSMS(
                phoneNumber: phoneNumber,
                message: message,
              );

              if (result == true) {
                print("SMS sent successfully!");
              } else {
                print("Failed to send SMS.");
              }
            },
            child: Text('Send SMS'),
          ),
        ),
      ),
    );
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!