shyun_link 2.1.0
shyun_link: ^2.1.0 copied to clipboard
A comprehensive deeplink and short URL management system with ultra-simple ShyunLinkManager API. Built with Clean Architecture principles, supports strategy patterns, dependency injection, and enterpr [...]
shyun_link #
딥링크, 숏링크, 인앱 내비게이션을 통합 관리하는 강력한 플러터 플러그인입니다. 클린 아키텍처 원칙에 따라 설계되어, 복잡한 링크 처리 로직을 단순하고 명확하게 관리할 수 있습니다.
주요 기능 #
- 통합 링크 처리: 딥링크, 일반 URL, 단축 URL을 일관된 방식으로 처리합니다.
- 클린 아키텍처: Domain, Application, Infrastructure 계층으로 분리되어 유지보수와 확장이 용이합니다.
- 단축 URL 생성: 외부 API와 연동하여 동적으로 단축 URL을 생성합니다.
- 커스텀 라우팅: 앱 내 특정 페이지로 이동하는 라우팅 로직을 손쉽게 정의하고 관리할 수 있습니다.
- 의존성 주입(DI):
get_it
을 사용한 DI 컨테이너를 통해 필요한 서비스와 저장소를 관리합니다. - 테스트 용이성: 메모리 기반의 Mock Repository를 제공하여, 네트워크 연결 없이도 비즈니스 로직을 테스트할 수 있습니다.
시작하기 #
설치 #
pubspec.yaml
파일에 다음 의존성을 추가하세요:
dependencies:
shyun_link: ^2.0.0
그리고 터미널에서 flutter pub get
을 실행하세요.
초기화 #
앱의 main
함수에서 플러그인을 초기화해야 합니다. 이 과정에서 필요한 모든 서비스와 저장소가 DI 컨테이너에 등록됩니다.
// main.dart
import 'package:flutter/material.dart';
import 'package:shyun_link/shyun_link.dart';
void main() async {
// Flutter 엔진과 위젯 바인딩 초기화
WidgetsFlutterBinding.ensureInitialized();
// shyun_link 시스템 초기화
// useHttpRepository: true로 설정하면 실제 API와 연동합니다.
await SystemInitializer.initialize(useHttpRepository: true);
runApp(const MyApp());
}
사용 방법 #
초기화 후, DI 컨테이너에서 DeepLinkFacade
를 가져와 모든 기능을 사용할 수 있습니다.
딥링크 처리 #
앱으로 들어오는 딥링크 URL을 처리하여 적절한 페이지로 라우팅합니다.
import 'package:shyun_link/shyun_link.dart';
// DI 컨테이너에서 Facade 인스턴스 가져오기
final deepLinkFacade = DeepLinkContainer.instance.get<DeepLinkFacade>();
// 처리할 URL (예: from uni_links or other deep link library)
final Uri uri = Uri.parse("https://your-domain.com/path?id=123");
// 딥링크 처리 실행
final result = await deepLinkFacade.processDeepLink(uri);
result.when(
success: (route) {
// 성공 시, 반환된 NavigationRouteEntity를 사용하여 페이지 이동
print("Navigating to ${route.path} with arguments: ${route.arguments}");
// 예: Navigator.pushNamed(context, route.path, arguments: route.arguments);
},
failure: (error) {
// 실패 시, 에러 처리
print("Deep link processing failed: $error");
},
);
단축 URL 생성 #
긴 URL을 백엔드 API를 통해 짧은 URL로 변환합니다.
// 생성할 원본 URL
const originalUrl = "https://your-long-url.com/some/very/long/path?with=params";
// 단축 링크 생성 요청
final result = await deepLinkFacade.createShortLink(originalUrl);
result.when(
success: (shortLink) {
// 성공 시, 생성된 ShortLinkEntity 정보 사용
print("Short link created: ${shortLink.shortUrl}");
},
failure: (error) {
// 실패 시, 에러 처리
print("Failed to create short link: $error");
},
);
아키텍처 #
shyun_link
는 클린 아키텍처를 따르며, 각 계층은 다음과 같은 역할을 수행합니다.
- Domain: 핵심 비즈니스 로직과 데이터 모델(Entities), 그리고 인터페이스(Repositories)를 포함합니다. 외부 의존성이 없는 순수한 Dart 코드로 작성됩니다.
- Application: 유스케이스(UseCases), 팩토리(Factories), 퍼사드(Facade)를 통해 앱의 기능을 조합하고 실행 흐름을 관리합니다.
- Infrastructure: 외부 세계와의 통신을 담당합니다. API 클라이언트(HTTP Repositories), 로컬 데이터베이스, 플랫폼 서비스 등이 여기에 해당합니다.
- Configuration: 의존성 주입(DI) 설정과 시스템 초기화를 담당합니다.
이러한 구조는 각 부분의 역할을 명확히 하고, 코드의 결합도를 낮춰 테스트와 유지보수를 용이하게 만듭니다.
예제 #
더 자세한 사용법과 전체 실행 코드는 example/
디렉토리에서 확인하실 수 있습니다.
기여하기 #
버그 리포트, 기능 제안 등 모든 종류의 기여를 환영합니다. 이슈를 생성하거나 Pull Request를 보내주세요.
라이선스 #
이 프로젝트는 MIT 라이선스를 따릅니다. 자세한 내용은 LICENSE
파일을 참고하세요.