Phase 4: FFmpeg conditional import (web-safe), remove unused dio + pointycastle (~230KB saved)

This commit is contained in:
Patrick Britton 2026-02-10 18:57:47 -06:00
parent 96468521cf
commit 6cb0a921c9
10 changed files with 59 additions and 37 deletions

View file

@ -1,7 +1,6 @@
import 'dart:io';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:ffmpeg_kit_flutter_new/ffmpeg_kit.dart';
import 'package:ffmpeg_kit_flutter_new/return_code.dart';
import '../services/media/ffmpeg.dart';
import 'package:path_provider/path_provider.dart';
import '../services/auth_service.dart';
import '../services/api_service.dart';

View file

@ -1,8 +1,7 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:ffmpeg_kit_flutter_new/ffmpeg_kit.dart';
import 'package:ffmpeg_kit_flutter_new/return_code.dart';
import '../../services/media/ffmpeg.dart';
import 'package:path_provider/path_provider.dart';
import '../../services/image_upload_service.dart';
import '../../providers/api_provider.dart';

View file

@ -6,8 +6,7 @@ import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:path_provider/path_provider.dart';
import 'package:video_player/video_player.dart';
import 'package:ffmpeg_kit_flutter_new/ffmpeg_kit.dart';
import 'package:ffmpeg_kit_flutter_new/return_code.dart';
import '../../services/media/ffmpeg.dart';
import '../../models/sojorn_media_result.dart';
import '../../theme/app_theme.dart';

View file

@ -2,8 +2,7 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:video_player/video_player.dart';
import 'package:ffmpeg_kit_flutter_new/ffmpeg_kit.dart';
import 'package:ffmpeg_kit_flutter_new/return_code.dart';
import '../../../services/media/ffmpeg.dart';
import 'package:path_provider/path_provider.dart';
import '../../../providers/quip_upload_provider.dart';
import '../../../services/image_upload_service.dart';

View file

@ -0,0 +1,2 @@
/// Conditional export: web gets the stub, mobile/desktop gets the real package.
export 'ffmpeg_stub.dart' if (dart.library.io) 'ffmpeg_io.dart';

View file

@ -0,0 +1,4 @@
/// Mobile/desktop: re-export the real ffmpeg_kit_flutter_new classes.
export 'package:ffmpeg_kit_flutter_new/ffmpeg_kit.dart';
export 'package:ffmpeg_kit_flutter_new/ffmpeg_session.dart';
export 'package:ffmpeg_kit_flutter_new/return_code.dart';

View file

@ -0,0 +1,48 @@
/// Web-safe stubs that mirror the ffmpeg_kit_flutter_new API surface.
/// These classes compile on web but always return failure / no-op.
class FFmpegKit {
static Future<FFmpegSession> execute(String command) async {
return FFmpegSession._();
}
static Future<FFmpegSession> executeAsync(
String command, [
Function? completeCallback,
Function? logCallback,
Function? statisticsCallback,
]) async {
final session = FFmpegSession._();
completeCallback?.call(session);
return session;
}
static Future<FFmpegSession> executeWithArguments(
List<String> arguments, [
Function? completeCallback,
Function? logCallback,
Function? statisticsCallback,
]) async {
final session = FFmpegSession._();
completeCallback?.call(session);
return session;
}
}
class FFmpegSession {
FFmpegSession._();
Future<ReturnCode?> getReturnCode() async => ReturnCode._(-1);
Future<String?> getOutput() async => null;
Future<String?> getAllLogsAsString() async => null;
}
class ReturnCode {
final int _value;
ReturnCode._(this._value);
static bool isSuccess(ReturnCode? code) => false;
@override
String toString() => 'ReturnCode($_value)';
}

View file

@ -1,7 +1,5 @@
import 'dart:io';
import 'package:ffmpeg_kit_flutter_new/ffmpeg_kit.dart';
import 'package:ffmpeg_kit_flutter_new/ffmpeg_session.dart';
import 'package:ffmpeg_kit_flutter_new/return_code.dart';
import 'media/ffmpeg.dart';
import 'package:path_provider/path_provider.dart';
class VideoStitchingService {

View file

@ -345,22 +345,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.4.1"
dio:
dependency: "direct main"
description:
name: dio
sha256: b9d46faecab38fc8cc286f80bc4d61a3bb5d4ac49e51ed877b4d6706efe57b25
url: "https://pub.dev"
source: hosted
version: "5.9.1"
dio_web_adapter:
dependency: transitive
description:
name: dio_web_adapter
sha256: "7586e476d70caecaf1686d21eee7247ea43ef5c345eab9e0cc3583ff13378d78"
url: "https://pub.dev"
source: hosted
version: "2.1.1"
fake_async:
dependency: transitive
description:
@ -1469,14 +1453,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.8"
pointycastle:
dependency: "direct main"
description:
name: pointycastle
sha256: "92aa3841d083cc4b0f4709b5c74fd6409a3e6ba833ffc7dc6a8fee096366acf5"
url: "https://pub.dev"
source: hosted
version: "4.0.0"
pool:
dependency: transitive
description:

View file

@ -20,7 +20,6 @@ dependencies:
# HTTP & API
http: ^1.2.2
dio: ^5.7.0
# UI & Utilities
cupertino_icons: ^1.0.8
@ -63,7 +62,6 @@ dependencies:
# E2EE Cryptography
cryptography: ^2.5.0
convert: ^3.1.1
pointycastle: ^4.0.0
file_picker: ^10.3.10
universal_html: ^2.0.8