FLUTTER ECOSYSTEM

yendoplan/open_app_file

플러터에서 네이티브 앱을 호출하여 파일을 열고 문자열 결과를 반환할 수 있는 플러그인으로, iOS(UTI), Android(Intent), PC(FFI), 웹(dart:html)을 지원

open_app_file 프로젝트 이미지
Stars
2
Forks
16
최근 푸시(UTC)
2026. 6. 10.
프로젝트 상태
활성
yendoplan GitHub avatar
GITHUB Organization

yendoplan ↗

언어C++CMakeDartKotlinRubyObjective-CSwiftCHTML

이 저장소가 배포한 패키지

사용 중인 의존성

의존성 목록 3 개
  • flutter{"sdk":"flutter"}
  • ffi^2.1.4
  • web^1.1.1

원본 README

아래는 영문 원문 스냅샷입니다. 최신 내용은 GitHub에서 확인하세요.

README 펼치기 / 접기

open_file

pub package

A plugin to open files the app has permission to access with default system-provided applications.

Supports Android, iOS, Web, Linux, macOS and Windows.

Fork info

The library is forked from open_file by crazecoder

This version:

  • does not include REQUEST_INSTALL_PACKAGES permission on Android, so cannot install .apk's
  • does not include READ_EXTERNAL_STORAGE permission on Android
  • has completely rewritten Android implementation for more robust permission checks
  • has deprecated explicit list of MIME types, UTI's, and Linux launch options
  • web implementation is changed (see below)

The main use case for the plugin is opening a generated or downloaded file with a default system application (see example).

Usage

Add open_file as a dependency in your pubspec.yaml file.

dependencies:
  open_app_file: ^lastVersion

Example

import 'package:open_app_file/open_app_file.dart';

OpenAppFile.open('/sdcard/example.txt');

// You can provide overrides for MIME type (Android) and/or UTI (iOS). This is not necessary
// in most cases, but if you know that the file extension does not match its content, you can
// help the system to provide correct response to your request.
OpenAppFile.open('/sdcard/example.abc', mimeType: 'text/plain', uti: 'public.plain-text');

Behavior on Android

While the main purpose of the plugin is opening files owned by the host app, it is possible to open any file even considering Android 11 scoped storage limitations (see official docs). The plugin will not provide any tools for requesting permissions to prevent declaring them in the Manifest for apps that don't need to handle this case. An attempt to open a file with no permissions granted will produce an appropriate result (ResultType.permissionDenied).

See more details and instructions on how to test permission conditions in the example app.

Behavior on web

Direct local file access is generally discouraged on web, therefore we chose the approach that in most cases is the most logical web alternative: imitate user clicking on an element that targets the requested file. For most files it will result in browser downloading the requested file immediately. Some file types, like images, texts, or videos might be opened directly, so the library adds target: _blank attribute to prevent user from leaving the application by accident.

The important limitation of this approach is that there's no way to check file type or availability beforehand, so on web the open call always succeeds.

Check the example app for general idea on how app-generated or remote files can be handled on web.