v_platform 2.2.0 copy "v_platform: ^2.2.0" to clipboard
v_platform: ^2.2.0 copied to clipboard

Cross-platform Flutter file metadata, serialization, MIME detection, and multipart upload utilities.

v_platform #

v_platform provides one serializable model for files that come from local paths, browser bytes, Flutter assets, or network URLs. It also includes MIME classification, stable cache identifiers, platform detection, and multipart upload helpers.

Requirements #

  • Dart 3.4 or newer
  • Flutter 3.22 or newer
  • Android, iOS, Linux, macOS, web/WASM, and Windows

Installation #

dependencies:
  v_platform: ^2.2.0
import 'package:v_platform/v_platform.dart';

Create files #

Use the constructor that matches the source available on the current platform:

final local = VPlatformFile.fromPath(
  fileLocalPath: '/tmp/avatar.png',
);

final browserFile = VPlatformFile.fromBytes(
  name: 'avatar.png',
  bytes: uploadedBytes,
);

final asset = VPlatformFile.fromAssets(
  assetsPath: 'assets/avatar.png',
  fileSize: 2048,
);

final remote = VPlatformFile.fromUrl(
  networkUrl: '/media/avatar.png?token=temporary',
);

Local paths are available only on platforms with dart:io. For web and WASM, pass the bytes returned by the browser or file-picker API.

Every instance exposes name, fileSize, readableSize, mimeType, extension, fileHash, and source flags such as isFromBytes. MIME-derived flags include isContentImage, isContentVideo, and isContentFile.

Resolve relative media URLs #

Configure a base once, then read fullNetworkUrl:

VPlatformFileUtils.baseMediaUrl = 'https://cdn.example.com/media';

final file = VPlatformFile.fromUrl(networkUrl: 'images/photo.jpg');
print(file.fullNetworkUrl);
// https://cdn.example.com/media/images/photo.jpg

Absolute URLs remain unchanged. getCachedUrlKey is a deterministic SHA-256 identifier that omits query strings and fragments, so temporary access tokens do not create duplicate cache entries.

Serialize and upload #

toMap() preserves all supported sources. fromMap() prefers preSignedUrl over networkUrl, accepts the legacy url key, and accepts byte lists in addition to Base64 strings.

final stored = file.toMap();
final restored = VPlatformFile.fromMap(stored);

final multipart = await VPlatforms.getMultipartFile(
  source: browserFile,
  fieldName: 'attachment',
);

Multipart conversion requires in-memory bytes or a local path. Resolve network and asset sources to bytes before uploading them.

Platform helpers #

VPlatforms.currentOs distinguishes native targets, web, and WASM. VPlatforms.osInWeb reports the browser host platform, while VPlatforms.isWebRunOnMobile identifies Android and iOS browsers.

Run the interactive sample with:

cd example
flutter run -d chrome

The example app targets iOS 14 and macOS 10.15 or newer, matching the current file_picker Darwin implementation.

4
likes
160
points
927
downloads

Documentation

API reference

Publisher

verified publishervchatsdk.com

Weekly Downloads

Cross-platform Flutter file metadata, serialization, MIME detection, and multipart upload utilities.

Repository (GitHub)
View/report issues

Topics

#file #upload #mime #cross-platform

License

MIT (license)

Dependencies

crypto, file_sizes, flutter, http, http_parser, mime, path

More

Packages that depend on v_platform