最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Flutter實現(xiàn)仿微信分享功能的示例代碼

 更新時間:2022年01月14日 16:03:03   作者:大前端之旅  
Flutter 用來快速開發(fā) Android iOS平臺應(yīng)用,在Flutter 中,通過 fluwx或者fluwx_no_pay 插件可以實現(xiàn)微信分享功能,本文將具體介紹實現(xiàn)的示例代碼,需要的可以參考一下

Flutter 用來快速開發(fā) Android iOS平臺應(yīng)用,在Flutter 中,通過 fluwx或者fluwx_no_pay 插件來實現(xiàn)微信分享功能

主要還是看自己的需求,本示例我將按照沒有支付的實現(xiàn)。至于為什么,主要是ios打包提審比較麻煩。

那么接下來就看一下如何實現(xiàn)吧,

1.首先去pub官網(wǎng)

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

查找這兩個包

fluwx_no_pay

或者

fluwx

安裝方式有兩種:

方法一:

flutter pub add fluwx_no_pay

方法二:

dependencies:
  fluwx_no_pay: ^3.6.1+5

然后在使用的時候?qū)?/p>

import 'package:fluwx_no_pay/fluwx_no_pay.dart';

雖然它集成的功能很多

但是我們只做分享的演示

2 在微信開放平臺注冊開發(fā)者賬號以及創(chuàng)建你的應(yīng)用程序

微信開放平臺鏈接

開發(fā)平臺文檔

創(chuàng)建應(yīng)用填寫基本的應(yīng)用信息后,提交微信平臺審核,審核通過后

從這里拿到 AppID ,然后再將配置的 iOS 平臺的 Universal Links 拿過來,至于如何獲取,請查看相關(guān)資料。

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=網(wǎng)絡(luò)地址
   * asset=內(nèi)置在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=分享內(nèi)容
   * 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=視頻網(wǎng)上地址
 * 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;
    }
  }

  
}

總結(jié)

本文設(shè)計到的知識點有

  • 如何進行微信分享
  • 如何利用dio將圖片下載到本地
  • 如何利用flutter_image_compress壓縮圖片

主要問題

未安裝微信

ios未配置白名單

圖片太大了(所以我用了壓縮技術(shù))32k

開發(fā)平臺文檔

以上就是一些在接入微信分享過程中遇到的一些問題。

到此這篇關(guān)于Flutter實現(xiàn)仿微信分享功能的示例代碼的文章就介紹到這了,更多相關(guān)Flutter仿微信分享功能內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android 沉浸式狀態(tài)欄及懸浮效果

    Android 沉浸式狀態(tài)欄及懸浮效果

    這篇文章主要介紹了Android 沉浸式狀態(tài)欄及懸浮效果的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-11-11
  • Android權(quán)限操作之uses-permission詳解

    Android權(quán)限操作之uses-permission詳解

    這篇文章主要介紹了Android權(quán)限操作之uses-permission,較為詳細的分析了uses-permission常見權(quán)限操作類型與功能,需要的朋友可以參考下
    2016-10-10
  • Android開啟ADB網(wǎng)絡(luò)調(diào)試方法

    Android開啟ADB網(wǎng)絡(luò)調(diào)試方法

    今天小編就為大家分享一篇Android開啟ADB網(wǎng)絡(luò)調(diào)試方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Kotlin WorkManager使用方法詳解

    Kotlin WorkManager使用方法詳解

    這篇文章主要介紹了Kotlin WorkManager使用方法,WorkManager是 安卓體系結(jié)構(gòu)之一,也是Android JetPack的一部分。WorkManager用于可延期并需要保證執(zhí)行的后臺工作
    2023-01-01
  • Android設(shè)計模式之單例模式實例

    Android設(shè)計模式之單例模式實例

    這篇文章主要介紹了Android設(shè)計模式之單例模式實例,單例模式是運用最廣泛的設(shè)計模式之一,在應(yīng)用這個模式時,單例模式的類必須保證只有一個實例存在
    2023-04-04
  • flutter實現(xiàn)一個列表下拉抽屜的示例代碼

    flutter實現(xiàn)一個列表下拉抽屜的示例代碼

    本文主要介紹了flutter實現(xiàn)一個列表下拉抽屜的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Android控件系列之Toast使用介紹

    Android控件系列之Toast使用介紹

    Toast可以說是最常用也是最簡單的Android控件之一,其自動關(guān)閉的功能大大簡化了代碼量,不失為用戶提示的最佳選擇
    2012-11-11
  • android編程實現(xiàn)局部界面動態(tài)切換的方法

    android編程實現(xiàn)局部界面動態(tài)切換的方法

    這篇文章主要介紹了android編程實現(xiàn)局部界面動態(tài)切換的方法,以實例形式較為詳細的分析了Android局部切換的布局及功能實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • android 通知Notification詳解及實例代碼

    android 通知Notification詳解及實例代碼

    這篇文章主要介紹了android 通知Notification詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • Android 使用Toolbar實現(xiàn)應(yīng)用欄實例詳解

    Android 使用Toolbar實現(xiàn)應(yīng)用欄實例詳解

    這篇文章主要為大家介紹了Android 使用Toolbar實現(xiàn)應(yīng)用欄實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11

最新評論

稷山县| 无极县| 海原县| 太康县| 松桃| 河南省| 东乡族自治县| 水城县| 苗栗市| 安国市| 泰州市| 宁远县| 大关县| 威宁| 石屏县| 尼勒克县| 鸡西市| 芦溪县| 宜春市| 沧源| 邛崃市| 湖州市| 阜新市| 安国市| 綦江县| 鲁山县| 建湖县| 顺义区| 沅江市| 青阳县| 多伦县| 专栏| 会理县| 平原县| 阿尔山市| 新疆| 禹城市| 昌黎县| 莆田市| 乐安县| 广西|