当前位置: 萬仟网 > 互联网>腾讯>微信 > Flutter实现仿微信分享功能的示例代码

Flutter实现仿微信分享功能的示例代码

2022年01月14日 微信 我要评论
目录1.首先去pub官网2 在微信开放平台注册开发者账号以及创建你的应用程序3 在分享页面3.1 初始化3.2 检测微信是否安装3.3 分享微信消息总结本文设计到的知识点有主要问题flutter 用来

flutter 用来快速开发 android ios平台应用,在flutter 中,通过 fluwx或者fluwx_no_pay 插件来实现微信分享功能

主要还是看自己的需求,本示例我将按照没有支付的实现。至于为什么,主要是ios打包提审比较麻烦。

那么接下来就看一下如何实现吧,

1.首先去pub官网

https://pub.flutter-io.cn/

查找这两个包

fluwx_no_pay

或者

fluwx

安装方式有两种:

方法一:

flutter pub add fluwx_no_pay

方法二:

dependencies:
  fluwx_no_pay: ^3.6.1+5

然后在使用的时候导入

import 'package:fluwx_no_pay/fluwx_no_pay.dart';

虽然它集成的功能很多

但是我们只做分享的演示

2 在微信开放平台注册开发者账号以及创建你的应用程序

微信开放平台链接

开发平台文档

创建应用填写基本的应用信息后,提交微信平台审核,审核通过后

从这里拿到 appid ,然后再将配置的 ios 平台的 universal links 拿过来,至于如何获取,请查看相关资料。

3 在分享页面

3.1 初始化

  @override
  void initstate() {
    super.initstate();
    _initfluwx();
  }

  future _initfluwx() async {

    await wxsdk.init();

  }

3.2 检测微信是否安装

如点击按钮时进行分享,分享前检查一下

  bool _wxisinstalled = false;  
  void _checkwx() async {
    _wxisinstalled = await wxsdk.wxisinstalled();
    refreshui();
  }

3.3 分享微信消息

 string imagepath;

imagepath = await localimagecache.instance
          .download(context, widget.cjinfo.cover, ext: ".jpg");
//压缩图片,我这儿用的flutter_image_compress

                          uint8list image =
                              await flutterimagecompress.compresswithfile(
                            imagepath,
                            minheight: 128,
                            minwidth: 128,
                            quality: 20,
                            // rotate: 135,
                          );

                         wxsdk.shareurl(
                                  //分享链接
                                  "你的链接",
                                  scene: 1,
                                  thumbfile: imagepath,
                                  desc: "描述",
                                  title: "标题",
                                );

封装的工具类

import 'dart:io';
import 'dart:typed_data';
import 'check.dart';
import 'package:fluwx_no_pay/fluwx_no_pay.dart' as fluwx;


class wxsdk {
  // static bool wxisinstalled;
  static future init() async {
    fluwx.registerwxapi(
        appid: "你的appid",
        doonandroid: true,
        doonios: true,
        universallink: "你的universallink");
  
  }

  static future<bool> wxisinstalled() async {
    return await fluwx.iswechatinstalled;
  }



  /**
   * 分享图片到微信,
   * file=本地路径
   * url=网络地址
   * asset=内置在app的资源图片
   * scene=分享场景,1好友会话,2朋友圈,3收藏
   */
  static void shareimage(
      {string title,
      string decs,
      string file,
      string url,
      string asset,
      int scene = 1}) async {
    fluwx.wechatscene wxscene = fluwx.wechatscene.session;
    if (scene == 2) {
      wxscene = fluwx.wechatscene.timeline;
    } else if (scene == 3) {
      wxscene = fluwx.wechatscene.favorite;
    }
    fluwx.wechatshareimagemodel model = null;

    if (file != null) {
      model = fluwx.wechatshareimagemodel(fluwx.wechatimage.file(file(file)),
          title: title, description: decs, scene: wxscene);
    } else if (url != null) {
      model = fluwx.wechatshareimagemodel(fluwx.wechatimage.network(url),
          title: title, description: decs, scene: wxscene);
    } else if (asset != null) {
      model = fluwx.wechatshareimagemodel(fluwx.wechatimage.asset(asset),
          title: title, description: decs, scene: wxscene);
    } else {
      throw exception("缺少图片资源信息");
    }
    fluwx.sharetowechat(model);
  }

  /**
   * 分享文本
   * content=分享内容
   * scene=分享场景,1好友会话,2朋友圈,3收藏
   */
  static void sharetext(string content, {string title, int scene = 1}) {
    fluwx.wechatscene wxscene = fluwx.wechatscene.session;
    if (scene == 2) {
      wxscene = fluwx.wechatscene.timeline;
    } else if (scene == 3) {
      wxscene = fluwx.wechatscene.favorite;
    }
    fluwx.wechatsharetextmodel model =
        fluwx.wechatsharetextmodel(content, title: title, scene: wxscene);
    fluwx.sharetowechat(model);
  }

/***
 * 分享视频
 * videourl=视频网上地址
 * thumbfile=缩略图本地路径
   * scene=分享场景,1好友会话,2朋友圈,3收藏
 */
  static void sharevideo(string videourl,
      {string thumbfile, string title, string desc, int scene = 1}) {
    fluwx.wechatscene wxscene = fluwx.wechatscene.session;
    if (scene == 2) {
      wxscene = fluwx.wechatscene.timeline;
    } else if (scene == 3) {
      wxscene = fluwx.wechatscene.favorite;
    }
    fluwx.wechatimage image = null;
    if (thumbfile != null) {
      image = fluwx.wechatimage.file(file(thumbfile));
    }
    var model = fluwx.wechatsharevideomodel(
        videourl: videourl,
        thumbnail: image,
        title: title,
        description: desc,
        scene: wxscene);
    fluwx.sharetowechat(model);
  }

  /**
   * 分享链接
   * url=链接
   * thumbfile=缩略图本地路径
   * scene=分享场景,1好友会话,2朋友圈,3收藏
   */
  static void shareurl(string url,
      {string thumbfile,
      uint8list thumbbytes,
      string title,
      string desc,
      int scene = 1,
      string networkthumb,
      string assetthumb}) {
    desc = desc ?? "";
    title = title ?? "";
    if (desc.length > 54) {
      desc = desc.substring(0, 54) + "...";
    }
    if (title.length > 20) {
      title = title.substring(0, 20) + "...";
    }
    fluwx.wechatscene wxscene = fluwx.wechatscene.session;
    if (scene == 2) {
      wxscene = fluwx.wechatscene.timeline;
    } else if (scene == 3) {
      wxscene = fluwx.wechatscene.favorite;
    }
    fluwx.wechatimage image = null;
    if (thumbfile != null) {
      image = fluwx.wechatimage.file(file(thumbfile));
    } else if (thumbbytes != null) {
      image = fluwx.wechatimage.binary(thumbbytes);
    } else if (strnoempty(networkthumb)) {
      image = fluwx.wechatimage.network(uri.encodefull(networkthumb));
    } else if (strnoempty(assetthumb)) {
      image = fluwx.wechatimage.asset(assetthumb, suffix: ".png");
    }
    var model = fluwx.wechatsharewebpagemodel(
      url,
      thumbnail: image,
      title: title,
      description: desc,
      scene: wxscene,
    );
    fluwx.sharetowechat(model);
  }
}

check.dart

/// 字符串不为空
bool strnoempty(string value) {
  if (value == null) return false;

  return value.trim().isnotempty;
}

/// 字符串不为空
bool mapnoempty(map value) {
  if (value == null) return false;
  return value.isnotempty;
}

///判断list是否为空
bool listnoempty(list list) {
  if (list == null) return false;

  if (list.length == 0) return false;

  return true;
}

//下载图片

import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';
import 'package:dio/dio.dart';
import 'package:flutter/cupertino.dart';
import 'package:path_provider/path_provider.dart';

class localimagecache {
  static localimagecache instance = localimagecache();
  string _tmeppath = "";
  void init() async {
    var tempdir = await gettemporarydirectory();
    _tmeppath = tempdir.path;
  }


/**
 * 直接下载图片到本地临时目录
 * ios必须带有后缀,不然exists会永远=false
 */
 

  future<string> download(buildcontext context, string url,{string ext = ""}) async {
    try {
      var dio = await dio()
          .get(url, options: options(responsetype: responsetype.bytes));
      uint8list image = uint8list.fromlist(dio.data);
      
      return save(image, url,ext: ext);
    } catch (ex) {
      print("image download error:${ex.tostring()}");
      return null;
    }
  }

  
}

总结

本文设计到的知识点有

  • 如何进行微信分享
  • 如何利用dio将图片下载到本地
  • 如何利用flutter_image_compress压缩图片

主要问题

未安装微信

ios未配置白名单

图片太大了(所以我用了压缩技术)32k

开发平台文档

以上就是一些在接入微信分享过程中遇到的一些问题。

到此这篇关于flutter实现仿微信分享功能的示例代码的文章就介绍到这了,更多相关flutter仿微信分享功能内容请搜索萬仟网以前的文章或继续浏览下面的相关文章希望大家以后多多支持萬仟网!

(0)
打赏 微信扫一扫 微信扫一扫

相关文章:

  • 如何修改微信号方法(微信号一年内第二次修改技巧)

    如何修改微信号方法(微信号一年内第二次修改技巧)

    盼望着、盼望着,这一天终于来了!微信号终于可以修改了!虽然一年只能改一次,虽然目前只能支持安卓版,这对很多人来说已经是莫大的欢喜吧!想想曾经沙雕风、旧恋情风却又... [阅读全文]
  • 微信营销策划方案案例,赶紧收下这10种营销技巧吧

    大家好,我是老六,为了让大家更好的了解微商是什么,特意给大家写了这篇文章为了大家不要误解微商,微商本质还是卖货,微商卖货有什么流程呢?今天给大家涨知识,告诉大家微信营销到底是怎样玩…

    2022年01月14日 资讯
  • 基于Qt实现离线瓦片地图下载器

    基于Qt实现离线瓦片地图下载器

    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言写这个离线地图下载器的初衷,就是为了方便自己的几个需要离线地图的程序,客户需求,既然地图程序已... [阅读全文]
  • Tomcat部署Bolo动态博客

    Tomcat部署Bolo动态博客

    bolo菠萝博客是基于solo深度定制的动态博客,内置了更多的精美的皮肤,并且可以本地账号登录。官网文档提供了docker部署和tocat部署两种方式,由于我买... [阅读全文]
  • 微信抖币充值入口(充值抖币便宜的方法)

    微信抖币充值入口(充值抖币便宜的方法)

    抖音可以说是时下最热门的短视频平台了,帅哥美女众多,是最受海外华人欢迎的app之一,抖音直播功能也非常受欢迎,那么海外华人如果想充值抖音币该如何操作呢?最常见的... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2022  萬仟网 保留所有权利. 粤ICP备17035492号-1
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com