Flutter社交分享插件whatsapp_share的使用

Flutter社交分享插件whatsapp_share的使用

插件介绍

Whatsapp Share Plugin 是一个Flutter插件,它为Android平台提供了一种简单的方法,可以将消息、链接或本地文件分享给特定的WhatsApp联系人。

  • 特性:
    • 分享消息或链接到特定联系人。
    • 分享本地文件到特定联系人。

安装配置

添加依赖

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

dependencies:
  whatsapp_share: ^1.1.1

然后在Dart代码中导入:

import 'package:whatsapp_share/whatsapp_share.dart';

平台特定配置

iOS配置

如果尚未存在,请在ios/podfile文件中的target runner后添加一行:

target 'Runner' do
    use_frameworks!
end

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>

更多关于文件提供者的详细信息可参考:FileProvider官方文档

使用方法

以下是展示如何使用该插件的完整示例demo。

import 'dart:async';
import 'dart:io';
import 'dart:developer';

import 'package:flutter/material.dart';
import 'package:whatsapp_share/whatsapp_share.dart';
import 'package:image_picker/image_picker.dart';
import 'package:path_provider/path_provider.dart';
import 'package:screenshot/screenshot.dart';

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

class MyApp extends StatelessWidget {
  final _controller = ScreenshotController();
  File? _image;

  Future<void> share() async {
    await WhatsappShare.share(
      text: 'Example share text',
      linkUrl: 'https://flutter.dev/',
      phone: '911234567890', // Replace with actual phone number
    );
  }

  Future<void> shareFile() async {
    await getImage();
    Directory? directory;
    if (Platform.isAndroid) {
      directory = await getExternalStorageDirectory();
    } else {
      directory = await getApplicationDocumentsDirectory();
    }
    debugPrint('${directory?.path} / ${_image?.path}');

    await WhatsappShare.shareFile(
      phone: '911234567890', // Replace with actual phone number
      filePath: ["${_image?.path}"],
    );
  }

  Future<void> isInstalled() async {
    final val = await WhatsappShare.isInstalled(package: Package.whatsapp);
    debugPrint('Whatsapp is installed: $val');
  }

  Future<void> shareScreenShot() async {
    Directory? directory;
    if (Platform.isAndroid) {
      directory = await getExternalStorageDirectory();
    } else {
      directory = await getApplicationDocumentsDirectory();
    }
    final String localPath =
        '${directory?.path}/${DateTime.now().millisecondsSinceEpoch}.png';

    await _controller.captureAndSave(localPath);

    await Future.delayed(const Duration(seconds: 1));

    await WhatsappShare.shareFile(
      phone: '911234567890', // Replace with actual phone number
      filePath: [localPath],
    );
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Whatsapp Share'),
        ),
        body: Center(
          child: Screenshot(
            controller: _controller,
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.center,
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                ElevatedButton(
                  onPressed: share,
                  child: const Text('Share text and link'),
                ),
                ElevatedButton(
                  onPressed: shareFile,
                  child: const Text('Share Image'),
                ),
                ElevatedButton(
                  onPressed: shareScreenShot,
                  child: const Text('Share screenshot'),
                ),
                ElevatedButton(
                  onPressed: isInstalled,
                  child: const Text('is Installed'),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }

  /// Pick Image From gallery using image_picker plugin
  Future getImage() async {
    try {
      XFile? pickedFile =
          // ignore: deprecated_member_use
          await ImagePicker().pickImage(source: ImageSource.gallery);

      if (pickedFile != null) {
        _image = File(pickedFile.path);
      } else {}
    } catch (er) {
      log(er.toString());
    }
  }
}

此示例演示了如何通过按钮触发不同的分享操作,包括文本和链接分享、图片分享以及屏幕截图分享。同时,也展示了如何检查设备上是否安装了WhatsApp应用。请根据实际情况替换示例代码中的电话号码等参数。


更多关于Flutter社交分享插件whatsapp_share的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter社交分享插件whatsapp_share的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter应用中使用whatsapp_share插件来实现WhatsApp分享的示例代码。这个插件允许你将文本、图片、视频或文件分享到WhatsApp。

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

dependencies:
  flutter:
    sdk: flutter
  whatsapp_share: ^0.3.0  # 请检查最新版本号

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

接下来,在你的Flutter项目中,你可以按照以下步骤使用whatsapp_share插件:

  1. 导入插件

在你的Dart文件中(例如main.dart),导入whatsapp_share插件:

import 'package:whatsapp_share/whatsapp_share.dart';
  1. 配置权限(如果需要分享图片或视频,需要在AndroidManifest.xml中添加相关权限):

确保你的AndroidManifest.xml文件中包含以下权限(如果你分享的内容涉及这些类型):

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  1. 实现分享功能

在你的Flutter组件中,添加按钮或其他触发分享功能的UI元素,并编写分享逻辑。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ShareScreen(),
    );
  }
}

class ShareScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('WhatsApp Share Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Share Text'),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                await WhatsAppShare.shareText(
                  "Hello, this is a test message!",
                  toPhoneNumber: "1234567890"  // Optional, if you want to pre-fill the phone number
                );
              },
              child: Text('Share Text'),
            ),
            SizedBox(height: 20),
            Text('Share Image'),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                final imagePath = "path/to/your/image.jpg";  // Replace with your image path
                await WhatsAppShare.shareImage(
                  imagePath: imagePath,
                  text: "Look at this image!",
                  toPhoneNumber: "1234567890"  // Optional
                );
              },
              child: Text('Share Image'),
            ),
            SizedBox(height: 20),
            Text('Share File'),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                final filePath = "path/to/your/file.pdf";  // Replace with your file path
                await WhatsAppShare.shareFile(
                  filePath: filePath,
                  text: "Check out this file!",
                  toPhoneNumber: "1234567890"  // Optional
                );
              },
              child: Text('Share File'),
            ),
          ],
        ),
      ),
    );
  }
}

在上面的代码中,我们创建了三个按钮,分别用于分享文本、图片和文件。你需要替换imagePathfilePath为你实际的文件路径。toPhoneNumber参数是可选的,如果你希望预填充电话号码。

注意:由于WhatsApp的限制,某些功能(如直接预填充电话号码)可能在不同版本的WhatsApp或不同设备上表现不同。确保在实际设备上测试你的应用以验证分享功能。

希望这能帮助你在Flutter应用中使用whatsapp_share插件!

回到顶部