.markdown-body { color: rgba(89, 89, 89, 1); font-size: 15px; font-family: -apple-system, system-ui, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; background-image: linear-gradient(90deg, rgba(60, 10, 30, 0.04) 3%, rgba(0, 0, 0, 0) 0), linear-gradient(1turn, rgba(60, 10, 30, 0.04) 3%, rgba(0, 0, 0, 0) 0); background-size: 20px 20px; background-position: center }
.markdown-body p { color: rgba(89, 89, 89, 1); font-size: 15px; line-height: 2; font-weight: 400 }
.markdown-body p+p { margin-top: 16px }
.markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .markdown-body h5, .markdown-body h6 { padding: 30px 0; margin: 0; color: rgba(19, 92, 224, 1) }
.markdown-body h1 { position: relative; text-align: center; font-size: 22px; margin: 50px 0 }
.markdown-body h1:before { position: absolute; content: ""; top: -10px; left: 50%; width: 32px; height: 32px; transform: translateX(-50%); background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABfVBMVEX///8Ad/8AgP8AgP8AgP8Aff8AgP8Af/8AgP8AVf8Af/8Af/8AgP8AgP8Af/8Afv8AAP8Afv8Afv8Aef8AgP8AdP8Afv8AgP8AgP8Acf8Ae/8AgP8Af/8AgP8Af/8Af/8AfP8Afv8AgP8Af/8Af/8Afv8Afv8AgP8Afv8AgP8Af/8Af/8AgP8AgP8Afv8AgP8Af/8AgP8AgP8AgP8Ae/8Afv8Af/8AgP8Af/8AgP8Af/8Af/8Aff8Af/8Abf8AgP8Af/8AgP8Af/8Af/8Afv8AgP8AgP8Afv8Afv8AgP8Af/8Aff8AgP8Afv8AgP8Aff8AgP8AfP8AgP8Ae/8AgP8Af/8AgP8AgP8AgP8Afv8AgP8AgP8AgP8Afv8AgP8AgP8AgP8AgP8AgP8Af/8AgP8Af/8Af/8Aev8Af/8AgP8Aff8Afv8AgP8AgP8AgP8Af/8AgP8Af/8Af/8AgP8Afv8AgP8AgP8AgP8AgP8Af/8AeP8Af/8Af/8Af//////rzEHnAAAAfXRSTlMAD7CCAivatxIDx5EMrP19AXdLEwgLR+6iCR/M0yLRzyFF7JupSXn8cw6v60Q0QeqzKtgeG237HMne850/6Qeq7QaZ+WdydHtj+OM3qENCMRYl1B3K2U7wnlWE/mhlirjkODa9FN/BF7/iNV/2kASNZpX1Wlf03C4stRGxgUPclqoAAAABYktHRACIBR1IAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEaBzgZ4yeM3AAAAT9JREFUOMvNUldbwkAQvCAqsSBoABE7asSOBRUVVBQNNuy9996789+9cMFAMHnVebmdm+/bmdtbQv4dOFOW2UjPzgFyLfo6nweKfIMOBYWwFtmMPGz2Yj2pJI0JDq3udJW6VVbmKa9I192VQFV1ktXUAl5NB0cd4KpnORqsEO2ZIRpF9gJfE9Dckqq0KuZt7UAH5+8EPF3spjsRpCeQNO/tA/qDwIDA+OCQbBoKA8NOdjMySgcZGVM6jwcgRuUiSs0nlPFNSrEpJfU0jTLD6llqbvKxei7OzvkFNQohi0vAsj81+MoqsCaoPOQFgus/1LyxichW+hS2JWCHZ7VlF9jb187pIAYcHiViHAMnp5mTjJ8B5xeEXF4B1ze/fTh/C0h398DDI9HB07O8ci+vRBdvdGnfP4gBuM8vw7X/G3wDmFhFZEdxzjMAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTgtMDEtMjZUMDc6NTY6MjUrMDE6MDA67pVWAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE4LTAxLTI2VDA3OjU2OjI1KzAxOjAwS7Mt6gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAWdEVYdFRpdGxlAGp1ZWppbl9sb2dvIGNvcHlxapmKAAAAV3pUWHRSYXcgcHJvZmlsZSB0eXBlIGlwdGMAAHic4/IMCHFWKCjKT8vMSeVSAAMjCy5jCxMjE0uTFAMTIESANMNkAyOzVCDL2NTIxMzEHMQHy4BIoEouAOoXEXTyQjWVAAAAAElFTkSuQmCC"); opacity: 0.36 }
.markdown-body h2 { position: relative; font-size: 20px; border-left: 4px solid; padding: 0 0 0 10px; margin: 30px 0 }
.markdown-body h3 { font-size: 16px }
.markdown-body ul { list-style: disc outside; margin-left: 2em; margin-top: 1em }
.markdown-body li { line-height: 2; color: rgba(89, 89, 89, 1) }
.markdown-body img.loaded { margin: 0 auto; display: block }
.markdown-body blockquote { background: rgba(255, 249, 249, 1); margin: 2em 0; padding: 2px 20px; border-left: 4px solid rgba(178, 174, 197, 1) }
.markdown-body blockquote p { color: rgba(102, 102, 102, 1); line-height: 2 }
.markdown-body a { color: rgba(3, 106, 202, 1); border-bottom: 1px solid rgba(3, 106, 202, 0.8); font-weight: 400; text-decoration: none }
.markdown-body em strong, .markdown-body strong { color: rgba(3, 106, 202, 1) }
.markdown-body hr { border-top: 1px solid rgba(19, 92, 224, 1) }
.markdown-body pre { overflow: auto }
.markdown-body code, .markdown-body pre { overflow: auto; position: relative; line-height: 1.75; font-family: Menlo, Monaco, Consolas, Courier New, monospace }
.markdown-body pre>code { font-size: 12px; padding: 15px 12px; margin: 0; word-break: normal; display: block; overflow-x: auto; color: rgba(51, 51, 51, 1); background: rgba(248, 248, 248, 1) }
.markdown-body code { border-radius: 2px; overflow-x: auto; background-color: rgba(255, 245, 245, 1); color: rgba(255, 80, 44, 1); font-size: 0.87em; padding: 0.065em 0.4em }
.markdown-body table { border-collapse: collapse; margin: 1rem 0; overflow-x: auto }
.markdown-body table td, .markdown-body table th { border: 1px solid rgba(223, 226, 229, 1); padding: 0.6em 1em }
.markdown-body table tr { border-top: 1px solid rgba(223, 226, 229, 1) }
.markdown-body table tr:nth-child(2n) { background-color: rgba(246, 248, 250, 1) }.markdown-body pre, .markdown-body pre>code.hljs { color: rgba(51, 51, 51, 1); background: rgba(248, 248, 248, 1) }
.hljs-comment, .hljs-quote { color: rgba(153, 153, 136, 1); font-style: italic }
.hljs-keyword, .hljs-selector-tag, .hljs-subst { color: rgba(51, 51, 51, 1); font-weight: 700 }
.hljs-literal, .hljs-number, .hljs-tag .hljs-attr, .hljs-template-variable, .hljs-variable { color: rgba(0, 128, 128, 1) }
.hljs-doctag, .hljs-string { color: rgba(221, 17, 68, 1) }
.hljs-section, .hljs-selector-id, .hljs-title { color: rgba(153, 0, 0, 1); font-weight: 700 }
.hljs-subst { font-weight: 400 }
.hljs-class .hljs-title, .hljs-type { color: rgba(68, 85, 136, 1); font-weight: 700 }
.hljs-attribute, .hljs-name, .hljs-tag { color: rgba(0, 0, 128, 1); font-weight: 400 }
.hljs-link, .hljs-regexp { color: rgba(0, 153, 38, 1) }
.hljs-bullet, .hljs-symbol { color: rgba(153, 0, 115, 1) }
.hljs-built_in, .hljs-builtin-name { color: rgba(0, 134, 179, 1) }
.hljs-meta { color: rgba(153, 153, 153, 1); font-weight: 700 }
.hljs-deletion { background: rgba(255, 221, 221, 1) }
.hljs-addition { background: rgba(221, 255, 221, 1) }
.hljs-emphasis { font-style: italic }
.hljs-strong { font-weight: 700 }

我正在参加「掘金·启航计划」

引言

移动应用程序在现代社会中发挥着越来越重要的作用。跨平台开发框架Flutter的出现让开发者能够更方便地构建应用程序。与此同时,微信小程序也在不断演变,从简单的小工具向全面的业务应用发展。为了更好地满足用户的需要,我们需要在Flutter应用程序中集成微信小程序的能力。本文介绍了如何使用Flutter WeChat Channel插件实现在Flutter应用程序中集成微信小程序。

Flutter框架简介

Flutter是一款功能强大、易于学习的移动应用程序开发框架。由谷歌开发,使用单一代码库构建应用程序,可以同时在iOS和Android上进行发布和运行。Flutter的主要特点是快速、高效和美丽的用户界面。

微信小程序介绍

微信小程序是微信内的应用程序,用户无需下载或安装任何应用即可使用。它是基于微信生态系统的轻量级应用,支持丰富的功能和服务,例如游戏、生活、工具等。

准备工作

在开始集成微信小程序之前,我们需要做一些准备工作。

安装Flutter

如果你已经安装了Flutter,请跳过此步骤。如果你未安装Flutter,请根据Flutter安装指南进行安装。在你的终端中,运行以下命令:

git clone https://github.com/flutter/flutter.git -b stable --depth 1

完成后,将flutter目录添加到PATH环境变量中,以便运行Flutter命令。在终端中运行以下命令即可:

export PATH="$PATH:`pwd`/flutter/bin"

注册微信小程序并获取应用程序ID和应用程序密钥

在集成微信小程序之前,你需要在微信开发者平台上注册并创建一个微信小程序。如果你已经完成这一步骤,请跳过此步骤。如果你还没有注册微信小程序,请前往微信开放平台注册并创建一个微信小程序。

在创建微信小程序之后,你将获得应用程序ID和应用程序密钥。这些信息用于后续的微信小程序集成。

集成Flutter WeChat Channel插件

Flutter WeChat Channel插件是一个Flutter插件,用于管理和控制微信应用程序的数据流和开发功能。它可以让Flutter应用程序与微信小程序交互,并提供各种功能。接下来,我们将为你介绍如何使用Flutter WeChat Channel插件集成微信小程序。

添加flutter_wechat_channel插件依赖

我们首先需要在Flutter项目中添加flutter_wechat_channel插件的依赖。在pubspec.yaml文件中添加以下代码块:

dependencies:
flutter_wechat_channel: ^1.0.0

配置Android平台与IOS

在微信开放平台申请一个App ID,并将其配置到Flutter应用中。对于Android平台,需要将App ID配置到AndroidManifest.xml文件中,并在MainActivityonCreate方法中调用FlutterWechatChannel.registerApp方法进行注册。对于iOS平台,需要将App ID配置到Info.plist文件中,并在Xcode中添加URL Schemes和Universal Link域名等配置。

这里就不贴IOS的配置了,因为我用的windows电脑,装不了Xcode,哈哈哈

<!-- AndroidManifest.xml -->
<manifest>
<application>
<meta-data android:name="wechatAppId" android:value="Wx1234567890" />
</application>
</manifest>

注册微信小程序

我们需要在我们的Flutter应用程序中注册微信小程序。在我们的Flutter应用程序中,我们可以使用以下代码来实现这一点:

import 'package:flutter_wechat_channel/flutter_wechat_channel.dart';

const String WECHAT_MINI_PROGRAM_ORIGINAL_ID = "your_mini_program_original_id";
const String WECHAT_MINI_PROGRAM_PATH = "your_mini_program_path"; class MyApp extends StatefulWidget {
MyApp({Key key}) : super(key: key); @override
_MyAppState createState() => _MyAppState();
} class _MyAppState extends State<MyApp> {
WeChatChannel _weChatChannel; @override
void initState() {
super.initState(); _weChatChannel = WeChatChannel();
_weChatChannel.register(
appId: WECHAT_APP_ID,
appSecret: WECHAT_APP_SECRET,
);
_weChatChannel.registerMiniProgram(
miniProgramType: WeChatMiniProgramType.release,
originalId: WECHAT_MINI_PROGRAM_ORIGINAL_ID,
path: WECHAT_MINI_PROGRAM_PATH,
imageUrl: "",
title: "",
description: "",
);
}
}

实现功能

我们现在已经准备好在我们的Flutter应用程序中实现微信小程序集成。以下是我们可以实现的两个基本功能:

启动微信小程序

我们可以使用以下代码在Flutter应用程序中启动微信小程序:

import 'package:flutter_wechat_channel/flutter_wechat_channel.dart';

class MyApp extends StatefulWidget {
MyApp({Key key}) : super(key: key); @override
_MyAppState createState() => _MyAppState();
} class _MyAppState extends State<MyApp> {
WeChatChannel _weChatChannel; Future<void> _launchMiniProgram() async {
await _weChatChannel.launchMiniProgram(
miniProgramType: WeChatMiniProgramType.release,
originalId: WECHAT_MINI_PROGRAM_ORIGINAL_ID,
path: WECHAT_MINI_PROGRAM_PATH,
);
} @override
void initState() {
super.initState(); _weChatChannel = WeChatChannel();
_weChatChannel.register(
appId: WECHAT_APP_ID,
appSecret: WECHAT_APP_SECRET,
);
_weChatChannel.registerMiniProgram(
miniProgramType: WeChatMiniProgramType.release,
originalId: WECHAT_MINI_PROGRAM_ORIGINAL_ID,
path: WECHAT_MINI_PROGRAM_PATH,
imageUrl: "",
title: "",
description: "",
);
} @override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: RaisedButton(
onPressed: () => _launchMiniProgram(),
child: Text("启动微信小程序"),
),
),
);
}
}

其他WeChat Channel功能

除了启动微信小程序之外,WeChat Channel插件还提供了其他功能。以下是一些常用的功能示例:

判断用户是否安装微信

import 'package:flutter_wechat_channel/flutter_wechat_channel.dart';

class MyApp extends StatefulWidget {
MyApp({Key key}) : super(key: key); @override
_MyAppState createState() => _MyAppState();
} class _MyAppState extends State<MyApp> {
WeChatChannel _weChatChannel; Future<void> _hasInstalledWeChat() async {
final bool isInstalled = await _weChatChannel.hasInstalledWeChat();
// Do something with isInstalled...
} @override
void initState() {
super.initState(); _weChatChannel = WeChatChannel();
_weChatChannel.register(
appId: WECHAT_APP_ID,
appSecret: WECHAT_APP_SECRET,
);
_weChatChannel.registerMiniProgram(
miniProgramType: WeChatMiniProgramType.release,
originalId: WECHAT_MINI_PROGRAM_ORIGINAL_ID,
path: WECHAT_MINI_PROGRAM_PATH,
imageUrl: "",
title: "",
description: "",
);
} @override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: RaisedButton(
onPressed: () => _hasInstalledWeChat(),
child: Text("判断用户是否安装微信"),
),
),
);
}
}

微信朋友圈分享

要在Flutter中实现微信朋友圈分享,可以使用flutter_wechat_channel库来调用微信API实现。实现步骤如下:

import 'package:flutter_wechat_channel/flutter_wechat_channel.dart';

void shareToWeChatTimeline() async {
// 检查微信是否安装
bool isInstalled = await FlutterWechatChannel.isWeChatInstalled;
if (!isInstalled) {
// 提示用户安装微信并返回
} // 构造分享内容
final WeChatShareWebpageObject webpage = WeChatShareWebpageObject(
title: '分享标题',
description: '分享描述',
webpageUrl: 'https://example.com',
thumbnailData: Uint8List.fromList([]),
);
final WeChatShareMessage message = WeChatShareMessage(
messageType: WeChatMessageType.Webpage,
webpageObject: webpage,
); // 调用微信API执行分享
final bool isSuccess = await FlutterWechatChannel.shareToWeChatTimeline(message);
if (isSuccess) {
// 分享成功
} else {
// 分享失败
}
}

其中,WeChatShareWebpageObject是分享的内容,包括标题、描述、链接地址和缩略图;WeChatShareMessage是分享的消息对象,包括消息类型和内容;FlutterWechatChannel是调用微信API的接口。

发送消息

通过调用FlutterWechatChannel.sendMiniProgramMessage方法向小程序发送消息。其中,需要提供小程序的App ID和路径,以及消息类型和额外数据。

Future<void> sendMessageToMiniProgram() async {
final WeChatMiniProgramObject object = WeChatMiniProgramObject(
webpageUrl: 'https://example.com',
userName: 'gh_1234567890',
path: '/pages/index',
hdImageData: Uint8List.fromList([]),
withShareTicket: true,
miniprogramType: WeChatMiniProgramType.Release,
);
final WeChatSendMessage message = WeChatSendMessage(
messageType: WeChatMessageType.MiniProgram,
miniProgramObject: object,
);
final bool isSuccess = await FlutterWechatChannel.sendMiniProgramMessage(
message: message,
toUserName: 'gh_1234567890',
);
if (isSuccess) {
// 发送成功
} else {
// 发送失败
}
}

以上就是在Flutter中实现微信朋友圈分享的步骤和代码示例。

更多的功能使用方法可以参考flutter_wechat_channel插件的文档。

5. 总结

本文介绍了如何在Flutter应用中集成微信小程序。我们首先介绍了Flutter框架和微信小程序的基本知识,然后讲解了准备工作和flutter_wechat_channel插件的引入,最后通过代码示例演示了微信小程序的启动和其他功能的实现方法。

在完成了微信小程序的集成之后,可以考虑进一步扩展应用的功能。比如,可以结合第三方地图API实现微信小程序的地图展示;或者结合网络请求库实现微信小程序的数据交互等等。

总之,在Flutter中使用flutter_wechat_channel库集成微信小程序相对来说比较简单和方便,只需要进行简单的配置和调用就可以实现微信小程序与Flutter应用的交互。随着Flutter的不断发展和完善,未来也会有更多的工具库和API提供更丰富的微信小程序集成功能,为开发者提供更多的选择和便利。

Flutter集成微信小程序技术教程的更多相关文章

  1. 微信小程序开发教程目录

    本系列教程是自己在工作中使用到而记录的,没有顺序之分 如有错误之处,请给与指正,也不希望误导了别人 微信小程序开发教程目录 微信小程序之注册和入门 微信小程序之HTTPS请求 微信小程序开发之选项卡 ...

  2. 微信小程序开发教程 #043 - 在小程序开发中使用 npm

    本文介绍了如何在微信小程序开发中使用 npm 中包的功能,大大提高微信小程序的开发效率,同时也是微信小程序系列教程的视频版更新. 微信小程序在发布之初没有对 npm 的支持功能,这也是目前很多前端开发 ...

  3. 补充ABP Zero集成微信小程序登陆的BUG修复部分

    感谢园友 @turingguo 发布的 https://www.cnblogs.com/turingguo/p/9019026.html  文章,详细介绍了ABP Zero集成微信小程序登陆的实现过程 ...

  4. 从零开始的微信小程序入门教程(一)

    之前说要和同事一起开发个微信小程序项目,现在也在界面设计,功能定位等需求上开始实施了.所以在还未正式写项目前,打算在空闲时间学习下小程序.本意是在学习过程中结合实践整理出一个较为入门且不是很厚的教程, ...

  5. 微信小程序开发教程

    9月21日晚发布的微信公众平台·小程序内侧邀请,微信应用号(小程序,「应用号」的新称呼)终于来了!目前还处于内测阶段,微信只邀请了部分企业参与封测.想必大家都关心应用号的最终形态到底是什么样子? 怎样 ...

  6. 开发一个微信小程序项目教程

    一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可.2.注册成功后进入首页,在 小程序发布流程->小程序开 ...

  7. 开发一个微信小程序实例教程

    一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可.2.注册成功后进入首页,在 小程序发布流程->小程序开 ...

  8. 微信小程序入门教程之一:初次上手

    微信是中国使用量最大的手机 App 之一,日活跃用户超过3亿,月活跃用户超过11亿(2019年底统计),市场极大. 2017年,微信正式推出了小程序,允许外部开发者在微信内部运行自己的代码,开展业务. ...

  9. 微信小程序简易教程

    刚接触到微信小程序开发,这里做一个简单的教程: 1. 获取微信小程序的 AppID 登录 https://mp.weixin.qq.com ,就可以在网站的"设置"-"开 ...

  10. 微信小程序实例教程(一)

    序言 开始开发应用号之前,先看看官方公布的「小程序」教程吧!(以下内容来自微信官方公布的「小程序」开发指南) 本文档将带你一步步创建完成一个微信小程序,并可以在手机上体验该小程序的实际效果.这个小程序 ...

随机推荐

  1. QT5笔记:13. QString 的常用功能

    QString采用Unicode码,所以任何一个字符不管中英文,在size或者count时都算作一个字符,不会有宽字符区分 常用的方法 append prepend toUpper toLower l ...

  2. [Qt基础-07 QSignalMapper]

    QSignalMapper 本文主要根据QT官方帮助文档以及日常使用,简单的介绍一下QSignalMapper的功能以及使用 文章目录 QSignalMapper 简介 使用方法 主要的函数 信号和槽 ...

  3. .NET周刊【3月第1期 2025-03-02】

    国内文章 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章 https://www.cnblogs.com/shanyou/p/18737657 2025年2月25日,.NET ...

  4. Git 命令使用体验的神器 -- tig

    tig, 就是把 Git 这个单词倒过来念, 它是一个命令行工具, 日常使用中我用它来取代 Git 最高频的几个操作, 如 git log, git diff 以及 git blame等, 使用常见安 ...

  5. 编写你的第一个 Django 应用程序,第1部分

    让我们通过示例来学习. 在本教程中,我们将引导您完成基本投票应用程序 它将由两部分组成: 一个公共网站,允许人们查看投票并在其中投票. 允许您添加.更改和删除投票的管理网站. 一.开发环境搭建 第一步 ...

  6. JDK 24 发布,新特性解读!

    真快啊!Java 24 这两天已经正式发布啦!这是自 Java 21 以来的第三个非长期支持版本,和 Java 22.Java 23一样. 下一个长期支持版是 Java 25,预计今年 9 月份发布. ...

  7. 什么是swagger,一篇带你入门

    一.前言 在前后端分离开发的过程中,前端和后端需要进行api对接进行交互,就需要一个api规范文档,方便前后端的交互,但api文档不能根据代码的变化发生实时动态的改变,这样后端修改了接口,前端不能及时 ...

  8. 一个专业DBA应具备的技能

    本文可以作为MySQL DBA面试官,以及候选人的双向参考 面试流程 接下来先说下我以往在做MySQL DBA面试时的过程(套路): 1.先自我介绍后,再让候选人花2-5分钟做下自我简介有不少人可能对 ...

  9. [每日算法 - 华为机试] leetcode20 :有效的括号 「栈」

    入口 力扣https://leetcode.cn/problems/valid-parentheses/submissions/ 题目描述 给定一个只包括 '(',')','{','}','[','] ...

  10. 学习unigui【20】unistringGrid

    做成下面效果图: 采用unistringGrid控件. 问题: 1.不同的日期区间如何得到.如: 项目   开始时间时间 -- 终止使用时间 呼吸机  yyyy-mm-dd   yyyy-mm-dd ...