패키지, 저장소 및 앱 카테고리 검색

패키지 상세v1.0.5

using

자동 정리 및 최종화 기능을 통해 클래스를 업그레이드하세요. C#의 "using + IDisposable"과 Java의 "try-with-resource + AutoCloseable"와 유사합니다.

AndroidiOSLinuxmacOSWebWindows
30일 다운로드
3.2만
좋아요
4
Pub 점수
160

패키지 설치

flutter pub add using

패키지 개요

공개 정보를 바탕으로 생성한 선택 가이드입니다.

The 'using' package enhances Dart classes with automatic resource cleanup and finalization, inspired by C#'s 'using' statement and Java's 'try-with-resources'. It enables developers to safely manage resources like files, streams, or connections by automatically calling a close method when the object goes out of scope. This reduces boilerplate code and prevents resource leaks. The package integrates seamlessly with Flutter and supports all major platforms, making it ideal for writing clean, safe, and maintainable code.

사용 사례

  • Managing file and stream resources
  • Automating disposal of network connections
  • Simplifying lifecycle management in widgets
  • Ensuring cleanup after async operations
  • Preventing memory leaks in long-running apps

주요 기능

  • Automatic resource cleanup
  • Supports async and sync disposal
  • Works across all Flutter platforms
  • Minimal boilerplate
  • Intuitive syntax similar to C# and Java

적합한 대상

  • Developers seeking C#-style using statements
  • Teams focused on resource safety
  • Flutter apps requiring reliable cleanup
  • Complex widget hierarchies with disposable dependencies
  • Codebases aiming to reduce manual dispose calls

고려 사항

  • Requires understanding of dispose patterns
  • May add slight overhead for simple cases
  • Best used with classes implementing IDisposable
  • Not needed for trivial or short-lived resources
  • Limited to objects that support auto-cleanup

원본 README

연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.

Using

This package provides a Releasable mixin to upgrade classes with automatic resource cleanup and finalization features.

Examples

class Resource with Releasable {
  // manage resource

  @override
  void release() {
    // clean-up resource in this method
    // and make sure super.release() is called!
    super.release();
  }
}

void main() {
  Resource? res;
  try {
    res = Resource(); // allocate
    // use resource
  } finally {
    // release in a finally block to ensure resources are released
    // even when an error occurs
    res?.release();
  }
}

Extension methods are provided to support syntaxes similar to C#'s using and Java's try-with-resource. They also help make sure resources are properly released!

void main() {
  final data = Resource().use((res) {
    // use `res` to load and return some data
  });
  // the instance created by `Resource()` is guaranteed to be released

  final asyncData = await Resource().useAsync((res) async {
    // use `res` to load and return some data
  });
  // the instance created by `Resource()` is guaranteed to be released
}

Streams are also supported via the consume() extension method:

void main() {
  final outputs = await Resource().consume(inputStream, (res, input) async {
    // use `res` to process inputs and return outputs
  }).toList();
  // the instance created by `Resource()` is guaranteed to be released
}

Automatic finalization is also available to try ensure resources will be released even in situations where release() has not been called. However, no promises are made that this will really happen. For more information, see Dart's documentation for Finalizer.

class ResourceOwner with Releasable {
  final _res1 = Resource();
  final _res2 = Resource();

  ResourceOwner() {
    // non-deterministic clean-up relying on Dart's `Finalizer` class. If
    // the resource owner goes out of scope and `release()` was not called,
    // the two resources should eventually be released and reclaimed by a
    // `Finalizer`.
    autoRelease([_res1, _res2]);
  }

  // deterministic clean-up by explicitly calling `release()` on this
  // instance, or when the instance is used via extension methods (`use()`,
  // `consume()`...).
  @override
  void release() {
    // clean-up resources
    _res1.release();
    _res2.release();
    // call super method
    super.release();
  }
}

카테고리

의존성

의존성 목록 1 개

소스 저장소

이 패키지를 사용하는 프로젝트

아직 데이터가 없습니다.

순위