Skip to content
CAI
Software that uses CAICheck a score

OpenFlutter/fluwx

64.0

Adequate · 23 September 2026

6.9k

lines of production code

Dart

with Objective-C, Kotlin, C++

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Fluwx is a Flutter plugin that integrates the WeChat SDK, enabling applications to handle authentication, payments, and content sharing across iOS and Android platforms. It provides a strongly-typed Dart API that bridges to native implementations, supporting features like mini-program opening, file sharing with compression, and response handling via sealed classes. The system is structured as a monorepo with separate packages for standard and payment-free variants, utilizing modern tooling such as Swift Package Manager and Flutter v2 embedding.

How it got here

2018 — V6 migration and repository rename

10 changes.

The project was renamed from wechat\_plugin to Fluwx, introducing a comprehensive V6 migration with breaking changes and updated documentation. Core implementation files were restructured to support modern Flutter standards, including enhanced image handling and multi-source file support on Android, while legacy iOS and example scaffolding were removed. The codebase was also reorganized into a monorepo with updated dependencies and build configurations.

2020–2026 — v4 architecture migration

12 changes.

The project underwent a comprehensive rewrite to version 4, introducing a strongly-typed, sealed-class API and a new v4 method channel implementation for bridging Flutter to native WeChat SDKs. This period involved migrating native Android and iOS code to modern embedding standards and package managers, while restructuring the Dart foundation to enforce type safety and improve response handling.

Features

Added fluwx\_no\_pay example app scaffolding

The \fluwx\_no\_pay\ package now includes a complete example application scaffold to facilitate development and testing. This adds platform-specific configuration files for Android (including \AndroidManifest.xml\ with WeChat entry activities and permissions) and iOS (including \Info.plist\, \AppDelegate.swift\, and Xcode project settings), along with shared Dart code for the example UI. The example uses a compatibility layer (\fluwx\_compat.dart\) to import the \fluwx\_no\_pay\ package, allowing developers to run and test the no-payment variant of the library.

_packages/fluwx\_no\pay · high confidence

Removals

Removal of legacy WeChat plugin implementation files

The iOS implementation files for the WeChat plugin (SwiftWechatPlugin.swift and WechatPlugin.m) have been removed from the codebase. This change eliminates the previous Objective-C/Swift bridge code that registered the 'wechat\_plugin' method channel and returned the iOS system version, indicating a shift away from this specific legacy integration approach.

ios/Classes · high confidence

Removed legacy example app entry point

The original \example/lib/main.dart\ file, which served as the basic entry point for the example application, has been deleted. This removes the simple platform-version display demo that previously initialized the WeChat plugin and showed the device's platform version in a basic Material app scaffold.

example/lib · high confidence

Behavioural changes

Android implementation migrated to Flutter v2 embedding with cold-start callback fix

The Android native code for the Fluwx WeChat SDK plugin has been rewritten to use the Flutter v2 embedding API (FlutterPlugin and ActivityAware), replacing the legacy PluginRegistry approach. This migration introduces dedicated handler classes (FluwxAuthHandler, FluwxShareHandler, WXAPiHandler) and a new FluwxWXEntryActivity to manage WeChat callbacks. Crucially, the plugin now implements an 'attemptToResumeMsgFromWx' mechanism to handle and deliver WeChat callbacks that occur during a cold application start, preventing the loss of the first callback event. The update also includes a new FileProvider for secure file sharing and updated ProGuard rules to preserve necessary WeChat SDK classes.

_packages/\shared · high confidence

Android module refactored to support image compression and multi-source file handling

The Android implementation has been restructured to improve image sharing capabilities. A new \ImagesIO\ module now handles image compression and scaling using the Compressor library, ensuring shared images meet size constraints. Additionally, a \WeChatFile\ abstraction has been introduced to support reading image data from multiple sources, including local files, assets, network URLs, and memory, replacing the previous single-source approach.

android · high confidence

Android module restructured to use shared code and explicit manifest definitions

The Android implementation for the WeChat SDK integration has been reorganized to improve maintainability and compatibility. The Kotlin source and resource directories are now symbolic links pointing to a shared Android module, centralizing common logic. A new AndroidManifest.xml explicitly declares necessary permissions (Internet, Network State, WiFi State) and registers the required WeChat entry activities and file provider, including a \<queries\> block to support WeChat detection on Android P and later. Additionally, a Gradle build script (gen.gradle.kts) and a .gitignore file have been added to manage build artifacts and incremental generation tasks.

packages/fluwx/android · high confidence

Example app regenerated for modern Flutter and platform standards

The fluwx example application has been regenerated to align with current Flutter tooling and platform conventions. This update includes a migration to Kotlin for the Android MainActivity, adoption of the Flutter V2 embedding on Android, and the addition of a SceneDelegate for iOS. The project now supports Linux and macOS natively with updated CMake and Xcode configurations, and includes a new .metadata file to track platform-specific migration states. Shared Dart logic is now consolidated via symlinks and a compatibility export layer.

packages/fluwx/example · high confidence

Fluwx Dart API restructured with typed arguments and platform interface

The \packages/fluwx/lib\ source files have been reorganized to replace the previous dynamic argument passing with a strongly-typed, sealed-class architecture. The public API now uses specific model classes for all operations: \AuthType\ (with \NormalAuth\, \QRCode\, \PhoneLogin\), \OpenType\ (including \WeChatApp\, \Browser\, \MiniProgram\, \CustomerServiceChat\, etc.), \PayType\ (\Payment\, \HongKongWallet\), and \WeChatShareModel\ variants (Text, Image, Music, Video, WebPage, MiniProgram, File, Emoji). These models implement a common \\_Argument\ mixin to serialize their data for the method channel. The \Fluwx\ class delegates to a new \FluwxPlatform\ interface, with \MethodChannelFluwx\ handling the native communication, and response handling is now routed through a typed \WeChatResponse\ hierarchy. This change improves type safety and clarity for users integrating WeChat features.

packages/fluwx/lib · high confidence

Gradle build cache initialization

The project now initializes Gradle build output cleanup caches, specifically creating a cache properties file that sets the Gradle version to 5.2.1 and establishing garbage collection properties for the build directory. This ensures consistent build state management for the Gradle wrapper.

.gradle · medium confidence

Introduce v4 method channel implementation for WeChat integration

This change introduces the v4 architecture for the Fluwx library by adding a new method channel implementation (\MethodChannelFluwx\) and its corresponding platform interface (\FluwxPlatform\). The new implementation bridges Flutter to native iOS and Android WeChat SDKs, supporting features such as app opening (WeChat App, Browser, Mini Programs, etc.), sharing various content types (text, images, music, video, web pages, mini programs, files, emojis), authentication (normal, QR code, phone login), and payment. It also includes a response event handler to stream WeChat responses back to the Flutter app and a logging mechanism to send native logs to the Flutter console.

_lib/src/method\channel · high confidence

Introduction of sealed WeChat response classes with Record serialization

The \lib/src/response/wechat\_response.dart\ file has been rewritten to introduce a sealed \WeChatResponse\ base class and specific subclasses (such as \WeChatShareResponse\, \WeChatAuthResponse\, \WeChatPaymentResponse\, and \WeChatOpenCustomerServiceChatResponse\) that parse WeChat callback arguments. A key behavioral change is the addition of a \toRecord()\ method to these response models, allowing users to easily convert response data into immutable Record structures for simpler pattern matching and data handling.

lib/src/response · high confidence

Refactored foundation argument models and share types

The \lib/src/foundation\ package has been restructured to use a unified \arguments.dart\ module with part files for specific model types. This introduces new sealed classes for authentication (\AuthType\), opening WeChat features (\OpenType\), and payments (\PayType\), alongside a \FluwxCancelable\ mixin for operation cancellation. For sharing, the models now enforce a common base (\WeChatShareModel\) with explicit \thumbData\ and \thumbDataHash\ fields, and the mini-program share model now supports an \hdImageData\ option for iOS.

lib/src/foundation · high confidence

Removal of legacy Android example project scaffolding

The Android example project's legacy scaffolding files have been removed, including the \AndroidManifest.xml\, \MainActivity.kt\, and the Gradle wrapper scripts (\gradlew\, \gradlew.bat\). This cleanup eliminates the old Flutter activity and application entry points, aligning the example with modern Flutter Android project structures that no longer require these specific legacy components.

example/android · high confidence

Removed legacy iOS WeChat plugin files in example app

The example iOS project has removed several legacy files related to the WeChat integration, including the \.gitignore\, \Runner-Bridging-Header.h\, \WechatPlugin-Bridging-Header.h\, and \WechatPluginMethods.swift\. This cleanup eliminates obsolete Swift plugin methods and bridging headers that were previously required for WeChat SDK integration, simplifying the example project structure.

example/ios · high confidence

Renamed library entry point from wechat\_plugin to fluwx

The main library entry point has been renamed from \wechat\_plugin.dart\ to \fluwx.dart\. Users must update their imports to use \package:fluwx/fluwx.dart\ instead of \package:fluwx/wechat\_plugin.dart\. The old \WechatPlugin\ class and its direct method channel usage have been removed in favor of the new \fluwx\ library structure which exports a more comprehensive set of modules including arguments, cancelable operations, and response models.

lib · high confidence

Repository renamed to Fluwx and documentation updated for V6 migration

The project has been renamed from 'wechat\_plugin' to 'Fluwx', with the README updated to reflect the new name, updated installation instructions for pub.dev, and a new section detailing the migration to V6 (which introduces breaking changes like UISceneDelegate support and Swift Package Manager adoption). The repository also adds a .pubignore file to exclude build artifacts and IDE files from the published package, and updates the .gitignore to include Flutter-specific generated files.

(repo-wide) · high confidence

Simplified example app setup and package maintenance tooling

The fluwx package now includes scripts and configuration to streamline the setup of its example applications. A new shell script automates the creation of Flutter example projects, establishes symlinks to shared example code and assets, and configures the pubspec files. Additionally, a Dart tool is provided to synchronize version numbers between the fluwx and fluwx\_no\_pay packages, and a .pubignore file has been added to exclude build artifacts and IDE files from the published package.

packages/fluwx, tools · high confidence

WeChat SDK integration library core files added and legacy models removed

The \lib/src\ directory now includes the main Fluwx entry point (\fluwx.dart\) which exposes methods for registering the app, sharing content, authentication, and payments, along with supporting files for WeChat-specific enums (\wechat\_enums.dart\) and file handling (\wechat\_file.dart\). This update removes the previous \wechat\_scene.dart\ and \wechat\_share\_models.dart\ files, indicating a restructuring of the sharing API and scene definitions to align with the new platform interface implementation.

lib/src · medium confidence

iOS integration now uses Swift Package Manager with shared sources and automated setup

The iOS package has migrated from CocoaPods to Swift Package Manager (SPM), replacing local source files with symbolic links to shared implementation code in the \\_shared/ios/Sources\ directory. To support this new structure, a new \wechat\_setup.rb\ script has been added to automatically configure the Xcode project's Info.plist (including WeChat App ID, URL schemes, and ATS settings) and associated domains entitlements during integration.

packages/fluwx/ios · high confidence

Test coverage

Initial unit tests for Fluwx plugin and method channel; Removed example widget test.

Dependencies

Migrated to monorepo with Kotlin 2.3.20 and Android Gradle Plugin 9.0.1

The project has been restructured into a monorepo containing \fluwx\ and \fluwx\_no\_pay\ packages, replacing the legacy \wechat\_plugin\. The Android build configuration now uses Kotlin 2.3.20 and Android Gradle Plugin 9.0.1, with a minimum SDK of 24 and Java 17 compatibility. The WeChat Android SDK has been updated to version 6.8.40, and the iOS dependency now uses the \WechatOpenSDK-XCFramework\ via CocoaPods and Swift Package Manager. The example apps have been updated to use the Flutter Gradle Plugin and target SDK 34.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Baseline

  • First survey — no prior run to compare against. CAI 64.

Lenses

  • Code Health 91
  • Architecture 100
  • Maturity 59
  • Readiness 58
  • Security 60
  • Domain Modelling 100

Changes since last survey

  • 300 commits — 255 feature/other, 45 fixes

By area

  • (root) — 121 commits
  • (repo) — 26 commits
  • lib/src — 24 commits
  • .github/workflows — 19 commits
  • ios/Classes — 16 commits
  • android/src — 15 commits
  • android/build.gradle — 12 commits
  • example/android — 9 commits
  • example/ios — 7 commits
  • ios/fluwx.podspec — 6 commits
  • .github/actions — 5 commits
  • ohos/src — 5 commits
  • example/lib — 4 commits
  • example/pubspec.yaml — 4 commits
  • packages/_shared — 4 commits
  • packages/fluwx — 4 commits
  • ios/Resources — 3 commits
  • ohos/oh-package.json5 — 3 commits
  • doc/LAUNCH_APP_FROM_H5.md — 2 commits
  • example/ohos — 2 commits

Notable commits

  • fix: Bugfix (#717)
  • fix: Fix #537
  • fix: Fix #703
  • fix: Fix CHANGELOG.md
  • fix: Fix CHANGELOG.md
  • fix: Fix crash when launch app from WeChat on iOS
  • fix: Fix fluwx CocoaPods CI to install pods before iOS build (#765)
  • fix: Fix type error in isSupportOpenBusinessView on iOS (#707)
  • fix: Merge pull request #606 from naivetoby/bugfix-ios-privacy-info
  • fix: Merge pull request #639 from OpenFlutter/fix/list
  • fix: Merge pull request #658 from OpenFlutter/fix/external-cache-path-android
  • fix: Merge pull request #659 from OpenFlutter/fix/ios-scripts
  • fix: Revert "bump to 5.4.1"
  • fix: [Fix] 修复openUrl不工作的问题 (#704)
  • fix: bugfix
  • fix: fix #543
  • fix: fix #543
  • fix: fix #545
  • fix: fix #549
  • fix: fix #575
  • …and 280 more

Architecture

  • 0 containers · 1 bounded contexts · 0 dependency edges (baseline)

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

OpenFlutter/fluwx was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 23 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 54da71c376aa37fbdd8562a77bbbc6f1a0112c0f — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-955b9cee9818.