Teddy Yeung

Mobile engineer (5 years)

I build and operate production iOS and Android apps with Flutter, along with the native Swift and Kotlin code behind them.

Most of my open-source work keeps Flutter plugins healthy on iOS: adding Swift Package Manager support, fixing native bugs, and making sure existing CocoaPods users never see a breaking change. More recently I have been working on image decoding in the Flutter web engine.

Open source contributions

Merged pull requests to Flutter and the packages used in production apps. Detailed write-ups: open-source-contributions.

flutter/flutter · web engine

Flutter framework and engine repository · Dart, Web Merged

Fixed still AVIF images failing to decode on Chrome (flutter/flutter#160600, open since 2024) in both the CanvasKit and Skwasm renderers.

  • Traced the failure to ImageDecoder being created with preferAnimation: true, which Chrome rejects for still AVIF images; without it, animated GIF, WebP and AVIF keep their frame counts
  • Compared all 141 GIF, WebP, AVIF, PNG and JPEG test images from Skia's resources under both settings before changing the default
  • Added four tests covering still and animated AVIF, decoded from bytes and through the URL streaming path
Flutter webCanvasKit · SkwasmImageDecoder

flutter/packages · image_picker_ios

Official Flutter team repository · Objective-C, Swift Testing Merged · shipped in 0.8.13+10

Fixed a long-standing iOS bug (flutter/flutter#132154, open since 2023) where picking an image that UIImage cannot decode, such as AVIF, left the picker hanging or was treated as a successful save.

  • The operation now completes with the existing invalid_image error instead of continuing with a nil image
  • Added a regression test that checks no path is returned and the NSOperation finishes
  • Went through the full flutter/packages process: Google CLA, several upstream merge-conflict resolutions, and porting the test to the new Swift Testing suite
image_picker · ~5.9M downloads/moiOSPHPicker

flutter_foreground_task

Background execution plugin · Swift, Objective-C Merged · shipped in v11.0.0

Added iOS Swift Package Manager support to one of the most-used background-execution plugins in Flutter.

  • Worked around SPM's no-mixed-language-target rule by isolating a pure-Swift SPM target
  • Kept the existing Objective-C + Swift CocoaPods path intact, with zero breaking changes
  • Made implicit umbrella-header imports explicit so the module compiles standalone under SPM
~270K downloads/moSPM+1,276 LOC · 24 files

image_gallery_saver_plus

Media plugin · Swift Package Manager Merged

Found and fixed a broken Package.swift that declared a non-existent FlutterFramework dependency, which made SPM resolution fail for every app using the plugin.

  • Aligned the iOS deployment target with the podspec
  • Brought the manifest in line with Flutter's official plugin SPM template
~151K downloads/moSPM

flutter_jailbreak_detection_plus

Jailbreak and root detection plugin · Swift Merged · shipped in v1.10.8

Added iOS Swift Package Manager support alongside CocoaPods, with no Dart API changes.

  • Added a Flutter-style SPM package layout that registers the existing method channel
  • Pulled IOSSecuritySuite in through SwiftPM; CocoaPods files and Android left unchanged
~63K downloads/moSPM

is_lock_screen2

Lock screen detection plugin · Swift Merged · shipped in v2.1.0

Added iOS Swift Package Manager support while keeping CocoaPods, and verified builds on both paths.

SPM+409 / −148 LOC

Maintained packages

Published under the verified pub.dev publisher teddyyeung.is-a.dev.

flutter_jailbreak_guard

Flutter plugin · Android (Kotlin) · iOS (Swift) · v0.2.1

Jailbreak and root detection with Swift Package Manager support. A drop-in replacement for flutter_jailbreak_detection_plus that uses the same detection engines and gives the same results.

  • Swift Package Manager and CocoaPods on iOS
  • Fail-closed: a missing result reports the device as unsafe
  • Android root checks run on a background task queue, off the main thread
  • Choice of iOS engine license: IOSSecuritySuite 1.9.x (BSD-2) or 2.x (EULA)
  • Dart unit tests, a Kotlin unit test, and integration tests
FlutterKotlinSwiftSPMSecurity

flutter_mute_plus

Flutter plugin · Android (Kotlin) · iOS (Swift)

Check or toggle the device ringer mode (normal, silent, vibrate). A maintained fork of flutter_mute, whose last release was in 2021 and no longer builds with current toolchains.

  • Builds on Android Gradle Plugin 8 and 9
  • Compiles on Xcode 16 and later
  • Swift Package Manager support, with CocoaPods kept
  • Fixes a hanging openNotificationPolicySettings() call and an SPM compile error in the upstream PR
  • Unit and integration tests; drop-in Dart API; 160/160 pub points
FlutterKotlinSwiftSPM

What I work with

Flutter & Dart

Apps, plugins, method channels, federated plugin packages, pub.dev publishing

iOS

Swift, Objective-C, Swift Package Manager, CocoaPods, XCTest and Swift Testing

Android

Kotlin, Gradle Kotlin DSL, Android Gradle Plugin 8/9 migration