Flutter短信管理插件mon_sms_pro的使用

Flutter短信管理插件mon_sms_pro的使用

安装mon_sms_pro包

pubspec.yaml文件中添加mon_sms_pro包:

flutter pub add mon_sms_pro

获取开始

为了安全起见,建议安装dotenv包。

flutter pub add dotenv

安装完成后,需要在Flutter项目的根目录下创建一个.env文件。

touch .env

.env文件中添加以下内容:

API_KEY="your_api_key"

导入环境变量:

import 'package:dotenv/dotenv.dart';

void main() async {
  await dotenv.load(fileName: ".env");
  runApp(const MyApp());
}

创建一个MonSmsPro类的实例:

final sms = MonSMSPRO(apiKey: dotenv.env['API_KEY'] ?? "");

使用方法发送短信:

import 'package:mon_sms_pro/mon_sms_pro.dart';

// 获取OTP
ElevatedButton(
    onPressed: () async {
        final otp = await sms.otp.get(
            GetOtpPayload(phoneNumber: "+2250000000000"),
        );

        if (otp != null) {
            setState(() {
                _token = otp.token;
            });
        }
    },
    child: const Text("获取OTP"),
)

可用方法

方法 描述
otp.get 生成OTP并发送到用户的手机号码
otp.verify 验证发送的OTP

示例代码

以下是完整的示例代码:

import 'package:flutter/material.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:mon_sms_pro/mon_sms_pro.dart';
import 'package:hive_flutter/hive_flutter.dart';

void main() async {
  await dotenv.load(fileName: ".env");

  WidgetsFlutterBinding.ensureInitialized();

  await Hive.initFlutter();

  await initHiveAdapters();

  await Hive.openBox('SMS_EXAMPLE');

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Mon SMS Pro Library Demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String? _token;

  // TODO: 添加SMS_API_KEY到.env文件
  final sms = MonSMSPRO(apiKey: dotenv.env['SMS_API_KEY'] ?? "");

  final _otpController = TextEditingController(text: "");

  final box = Hive.box('SMS_EXAMPLE');

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: ListView(
        padding: const EdgeInsets.all(15),
        children: [
          ElevatedButton(
            onPressed: () async {
              final otp = await sms.otp.get(
                GetOtpPayload(phoneNumber: "+2250708517414"),
              );

              if (otp != null) {
                setState(() {
                  _token = otp.token;
                });
              }
            },
            child: const Text("获取OTP"),
          ),
          if (_token != null) ...[
            TextField(
              controller: _otpController,
              keyboardType: TextInputType.number,
              decoration: const InputDecoration(
                border: OutlineInputBorder(),
                labelText: 'OTP',
              ),
            ),
            ElevatedButton(
              onPressed: () async {
                final val = _otpController.value.text;

                final otp = await sms.otp.verify(
                  VerifyOtpPayload(token: _token!, otp: val),
                );

                if (otp != null) {
                  setState(() {
                    _token = null;
                  });

                  print("OTP已验证");
                }
              },
              child: const Text("验证OTP"),
            ),
          ],
          ElevatedButton(
            onPressed: () async {
              final list = await sms.campain.list(
                CampainListPayload(senderId: "ID GOES HERE"),
              );

              box.put("CAMPAINS", list);

              print(list);
            },
            child: const Text("活动列表"),
          ),
          ElevatedButton(
            onPressed: () async {
              final list = await sms.contact.list();

              print(list);
            },
            child: const Text("联系人列表"),
          ),
        ],
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用mon_sms_pro插件来进行短信管理的示例代码。请注意,mon_sms_pro插件的具体API和功能可能会根据版本的不同而有所变化,因此以下代码仅供参考,具体使用时请参考插件的官方文档。

首先,确保你的Flutter项目已经创建,并且在pubspec.yaml文件中添加了mon_sms_pro依赖:

dependencies:
  flutter:
    sdk: flutter
  mon_sms_pro: ^最新版本号  # 请替换为实际的最新版本号

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

接下来,你可以在Dart代码中导入并使用mon_sms_pro插件。以下是一个简单的示例,展示了如何请求短信权限、读取短信和发送短信(如果插件支持的话)。

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool hasPermission = false;
  List<SmsMessage> smsMessages = [];

  @override
  void initState() {
    super.initState();
    _requestSmsPermission();
  }

  Future<void> _requestSmsPermission() async {
    bool result = await MonSmsPro.requestSmsPermission();
    if (result) {
      setState(() {
        hasPermission = true;
        _readAllSms();
      });
    } else {
      // 处理权限请求被拒绝的情况
      print("SMS Permission Denied");
    }
  }

  Future<void> _readAllSms() async {
    if (hasPermission) {
      List<SmsMessage> messages = await MonSmsPro.readAllSms();
      setState(() {
        smsMessages = messages;
      });
    }
  }

  Future<void> _sendSms(String phoneNumber, String message) async {
    // 注意:不是所有短信管理插件都支持发送短信,此API可能不存在或需要额外配置
    // 如果插件支持发送短信,可以参考以下代码(假设API存在)
    bool sent = await MonSmsPro.sendSms(phoneNumber, message);
    if (sent) {
      print("SMS Sent Successfully");
    } else {
      print("Failed to Send SMS");
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('SMS Management with mon_sms_pro'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            children: [
              if (!hasPermission)
                Text('Requesting SMS Permission...'),
              ElevatedButton(
                onPressed: hasPermission ? null : _requestSmsPermission,
                child: Text('Request SMS Permission'),
              ),
              if (hasPermission)
                Expanded(
                  child: ListView.builder(
                    itemCount: smsMessages.length,
                    itemBuilder: (context, index) {
                      SmsMessage message = smsMessages[index];
                      return ListTile(
                        title: Text('From: ${message.from}'),
                        subtitle: Text('Body: ${message.body}'),
                      );
                    },
                  ),
                ),
              if (hasPermission)
                Padding(
                  padding: const EdgeInsets.symmetric(vertical: 16.0),
                  child: Column(
                    children: [
                      TextField(
                        decoration: InputDecoration(labelText: 'Phone Number'),
                        keyboardType: TextInputType.phone,
                        onEditingComplete: () {
                          FocusScope.of(context).unfocus();
                        },
                        controller: TextEditingController()..text = '+1234567890', // 示例号码
                      ),
                      TextField(
                        decoration: InputDecoration(labelText: 'Message'),
                        maxLines: 5,
                        controller: TextEditingController()..text = 'Hello, this is a test message!', // 示例消息
                      ),
                      ElevatedButton(
                        onPressed: () {
                          TextEditingController phoneController = TextEditingController.fromValue(
                            TextEditingValue(text: '+1234567890'), // 这里应该是用户输入的号码
                          );
                          TextEditingController messageController = TextEditingController.fromValue(
                            TextEditingValue(text: 'Hello, this is a test message!'), // 这里应该是用户输入的消息
                          );
                          _sendSms(phoneController.text, messageController.text);
                        },
                        child: Text('Send SMS'),
                      ),
                    ],
                  ),
                ),
            ],
          ),
        ),
      ),
    );
  }
}

注意事项

  1. MonSmsPro.requestSmsPermission()MonSmsPro.readAllSms()MonSmsPro.sendSms()等方法是假设存在的API,实际使用时请参考插件的官方文档。
  2. 发送短信功能可能不是所有短信管理插件都支持的,具体请参考插件的功能描述。
  3. 在实际项目中,处理用户输入和UI交互时,应该添加更多的错误处理和用户反馈。
  4. 短信权限请求和读取短信操作可能需要在AndroidManifest.xml和iOS的Info.plist文件中进行额外的配置,请参考插件的官方文档进行配置。
回到顶部