Flutter即时通讯插件wa_me的使用

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

Flutter即时通讯插件wa_me的使用

1. 插件简介

wa_mewhatsapp_share2 的一个分支,旨在支持除官方 WhatsApp 应用之外的其他版本,例如 GBWhatsApp。该插件提供了以下功能:

  • 向特定联系人分享文本或链接。
  • 向特定联系人分享本地文件。

2. 安装

2.1 添加依赖

首先,在 pubspec.yaml 文件中添加 wa_me 依赖:

dependencies:
  wa_me: latest_version

然后在 Dart 代码中导入插件:

import 'package:wa_me/wa_me.dart';
2.2 平台特定配置
2.2.1 iOS 配置

如果 ios/podfile 文件中没有以下内容,请添加:

target 'Runner' do
    use_frameworks!
    ...
end
2.2.2 Android 配置

如果你打算使用文件分享功能,需要配置文件提供者(File Provider),这将允许应用访问和分享文件。

AndroidManifest.xml 中添加以下内容:

<application>
    ...
    <provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="${applicationId}.provider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths"/>
    </provider>
</application>

创建 res/xml/provider_paths.xml 文件,并添加以下内容:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="."/>
</paths>

3. 使用方法

3.1 检查设备上是否安装了WhatsApp

你可以使用 WaMe.isInstalled() 方法来检查设备上是否安装了特定版本的 WhatsApp。例如,检查是否安装了 GBWhatsApp:

Future<void> isInstalled() async {
  final val = await WaMe.isInstalled(
    package: Package.gbWhatsapp, // 你可以选择其他包名
  );
  print('GBWhatsApp 是否已安装: $val');
}

注意:如果 WhatsApp 未安装,请不要调用 WaMe.share()WaMe.shareFile() 方法。

3.2 分享文本或链接

你可以使用 WaMe.share() 方法向特定联系人分享文本或链接。以下是一个示例:

Future<void> share() async {
  await WaMe.share(
    text: '这是通过 WaMe 插件分享的文本', // 要分享的文本
    linkUrl: 'https://flutter.dev/', // 要分享的链接(可选)
    phone: '91xxxxxxxxxx', // 目标联系人的电话号码(带国家代码)
  );
}
3.3 分享图片或文件

你可以使用 WaMe.shareFile() 方法向特定联系人分享图片或其他文件。以下是一个示例:

Future<void> shareFile() async {
  await WaMe.shareFile(
    text: '这是通过 WaMe 插件分享的文件', // 可选的附加文本
    phone: '91xxxxxxxxxx', // 目标联系人的电话号码(带国家代码)
    filePath: [_image1.path, _image2.path], // 文件路径列表
  );
}

注意_image1.path_image2.path 是你要分享的文件的路径。你需要确保这些文件路径是有效的,并且文件存在于设备上。

4. 完整示例 Demo

以下是一个完整的 Flutter 示例应用,展示了如何使用 wa_me 插件进行文本、链接和文件分享。

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('WaMe 示例')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: () => isInstalled(),
                child: Text('检查 GBWhatsApp 是否已安装'),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () => share(),
                child: Text('分享文本和链接'),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () => shareFile(),
                child: Text('分享文件'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  Future<void> isInstalled() async {
    final val = await WaMe.isInstalled(
      package: Package.gbWhatsapp, // 你可以选择其他包名
    );
    print('GBWhatsApp 是否已安装: $val');
  }

  Future<void> share() async {
    await WaMe.share(
      text: '这是通过 WaMe 插件分享的文本',
      linkUrl: 'https://flutter.dev/',
      phone: '91xxxxxxxxxx', // 替换为实际的电话号码
    );
  }

  Future<void> shareFile() async {
    // 假设你已经获取了文件路径
    String imagePath1 = '/path/to/image1.jpg'; // 替换为实际的文件路径
    String imagePath2 = '/path/to/image2.png'; // 替换为实际的文件路径

    await WaMe.shareFile(
      text: '这是通过 WaMe 插件分享的文件',
      phone: '91xxxxxxxxxx', // 替换为实际的电话号码
      filePath: [imagePath1, imagePath2],
    );
  }
}

更多关于Flutter即时通讯插件wa_me的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter即时通讯插件wa_me的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于Flutter中的即时通讯插件wa_me(通常指的是用于集成WhatsApp的URL Scheme进行即时通讯的插件,虽然没有一个官方的Flutter插件直接命名为wa_me,但我们可以实现类似的功能),以下是一个如何在Flutter应用中集成并使用WhatsApp进行即时通讯的示例代码。

在Flutter中,我们通常不会直接使用一个名为wa_me的插件,而是会利用WhatsApp提供的URL Scheme来启动WhatsApp应用并预填充消息。这里是一个简单的实现方法:

1. 添加URL Launch依赖

首先,你需要在pubspec.yaml文件中添加url_launcher依赖,这个依赖允许你的Flutter应用启动其他应用(如WhatsApp)。

dependencies:
  flutter:
    sdk: flutter
  url_launcher: ^6.0.15  # 请检查最新版本

2. 导入依赖并编写功能

在你的Dart文件中(例如main.dart),导入url_launcher包,并编写一个函数来启动WhatsApp并预填充消息。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('WhatsApp Integration'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // WhatsApp的URL Scheme
              String phoneNumber = '+1234567890'; // 替换为目标用户的电话号码
              String message = 'Hello, this is a test message!';
              String url = 'https://api.whatsapp.com/send?phone=$phoneNumber&text=$message';
              
              if (await canLaunchUrl(Uri.parse(url))) {
                await launchUrl(Uri.parse(url));
              } else {
                throw 'Could not launch $url';
              }
            },
            child: Text('Send WhatsApp Message'),
          ),
        ),
      ),
    );
  }
}

3. 处理权限问题(Android和iOS)

  • Android: 在AndroidManifest.xml中,你通常不需要额外的权限来使用url_launcher,但确保你的应用有互联网访问权限(这通常是默认的)。

  • iOS: 你需要在Info.plist中添加一个LSApplicationQueriesSchemes数组来指定你想查询的URL Scheme。对于WhatsApp,你需要添加whatsapp

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>whatsapp</string>
</array>

4. 运行应用

现在,当你运行这个Flutter应用并点击按钮时,它应该会尝试打开WhatsApp应用并预填充消息。如果WhatsApp没有安装在你的设备上,系统会提示你选择一个应用来打开这个链接。

注意事项

  • 确保电话号码格式正确,通常是国际格式,以+开头。
  • url_launcher包提供了异步方法来处理URL启动,因此你需要使用asyncawait关键字。
  • 始终检查canLaunchUrl方法,以确保目标URL Scheme是可用的,避免应用崩溃。

这个示例展示了如何在Flutter应用中集成并使用WhatsApp进行即时通讯的基本方法。希望这对你有所帮助!

回到顶部