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

패키지 상세v0.5.1+1

webviewx_plus

모바일용 webview_flutter와 웹용 iFrame을 사용하는 크로스 플랫폼 웹뷰입니다.

AndroidiOSWeb
30일 다운로드
1.1만
좋아요
49
Pub 점수
130

패키지 설치

flutter pub add webviewx_plus

패키지 개요

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

webviewx_plus는 Android 및 iOS에서 webview_flutter를 활용하고 웹 통합을 위해 HTML iframe을 사용하는 크로스 플랫폼 웹뷰 패키지입니다. 모바일 및 웹 플랫폼에서 일관된 동작으로 웹 콘텐츠를 통합하기 위한 유일한 API를 제공합니다. 플랫폼별 코드 없이 원활한 웹 콘텐츠 렌더링을 원하는 개발자를 위해 설계되었으며, Flutter 앱에서 웹 기반 기능을 구현하는 것을 간소화합니다. 이 패키지는 기본적인 탐색, 자바스크립트 통신 및 보안적으로 웹 URL을 로드하는 기능을 지원합니다.

사용 사례

  • 모바일 앱에 웹 콘텐츠 삽입
  • 웹 기반 대시보드 표시
  • 온라인 양식 또는 결제 게이트웨이 통합
  • 하이브리드 앱 인터페이스 만들기
  • 보안 컨테이너 내부에서 외부 웹사이트 로드

주요 기능

  • 크로스 플랫폼 호환성 (Android, iOS, Web)
  • 모든 플랫폼용 통합 API
  • JavaScript 채널 통신을 지원합니다
  • 보안 웹 콘텐츠 로딩
  • 경량이며 통합이 쉬움

적합한 대상

  • 하이브리드 앱 개발자
  • 다중 플랫폼 앱을 개발하는 팀
  • 내장 웹 콘텐츠가 필요한 앱
  • 플랫폼별 WebView 코드를 피하는 개발자

고려 사항

  • 네이티브 구현과 비교하여 고급 WebView 기능이 제한됨
  • 웹 플랫폼은 iframe 제한에 의존합니다
  • 전체 페이지 탐색과 같은 복잡한 웹 상호작용에 내장된 지원 없음
  • 웹에서 URL 보안을 신중하게 다뤄야 합니다
  • 웹에서 HTTPS 및 CORS에 대한 추가 구성이 필요할 수 있습니다

원본 README

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

webviewx

Made with ❤️ by Cross Sonic

A feature-rich cross-platform webview using webview_flutter for mobile and iframe for web. JS interop-ready.

Getting started


Gallery

Mobile

Web


Basic usage

1. Create a WebViewXController inside your stateful widget
late WebViewXController webviewController;
2. Add the WebViewX widget inside the build method, and set the onWebViewCreated callback in order to retrieve the controller when the webview is initialized
WebViewX(
    initialContent: '<h2> Hello, world! </h2>',
    initialSourceType: SourceType.HTML,
    onWebViewCreated: (controller) => webviewController = controller,
    ...
    ... other options
);

Important !

If you need to add other widgets on top of the webview (e.g. inside a Stack widget), you MUST wrap those widgets with a WebViewAware widget. This does nothing on mobile, but on web it allows widgets on top to intercept gestures. Otherwise, those widgets may not be clickable and/or the iframe will behave weird (unexpected refresh/reload - this is a well known issue).

Also, if you add widgets on top of the webview, wrap them and then you notice that the iframe still reloads unexpectedly, you should check if there are other widgets that sit on top without being noticed, or try to wrap InkWell, GestureRecognizer or Button widgets to see which one causes the problem.

3. Interact with the controller (run the example app to check out some use cases)
webviewController.loadContent(
    'https://flutter.dev',
    SourceType.url,
);
webviewController.goBack();

webviewController.goForward();
...
...

Features

Note: For more detailed information about things such as EmbeddedJsContent, please visit each own's .dart file from the utils folder.

  • Widget properties

Feature Details
String initialContent Initial webview content
SourceType initialSourceType Initial webview content type (url, urlBypass or html)
String? userAgent User agent
double width Widget's width
double height Widget's height
Function(WebViewXController controller)? onWebViewCreated Callback that gets executed when the webview has initialized
Set<EmbeddedJsContent> jsContent A set of EmbeddedJsContent, which is an object that defines some javascript which will be embedded in the page, once loaded (check the example app)
Set<DartCallback> dartCallBacks A set of DartCallback, which is an object that defines a dart callback function, which will be called from javascript (check the example app)
bool ignoreAllGestures Boolean value that specifies if the widget should ignore all gestures right after it is initialized
JavascriptMode javascriptMode This specifies if Javascript should be allowed to execute, or not (allowed by default, you must allow it in order to use above features)
AutoMediaPlaybackPolicy initialMediaPlaybackPolicy This specifies if media content should be allowed to autoplay when initialized (i.e when the page is loaded)
void Function(String src)? onPageStarted Callback that gets executed when a page starts loading (e.g. after you change the content)
void Function(String src)? onPageFinished Callback that gets executed when a page finishes loading
NavigationDelegate? navigationDelegate Callback that, if not null, gets executed when the user clicks something in the webview (on Web it only works for SourceType.urlBypass, for now)
void Function(WebResourceError error)? onWebResourceError Callback that gets executed when there is an error when loading resources issues on web
WebSpecificParams webSpecificParams This is an object that contains web-specific options. Theese are not available on mobile (yet)
MobileSpecificParams mobileSpecificParams This is an object that contains mobile-specific options. Theese are not available on web (yet)

  • Controller properties

Feature Usage
Load URL that allows iframe embedding webviewController.loadContent(URL, SourceType.URL)
Load URL that doesnt allow iframe embedding webviewController.loadContent(URL, SourceType.URL_BYPASS)
Load URL that doesnt allow iframe embedding, with headers webviewController.loadContent(URL, SourceType.URL_BYPASS, headers: {'x-something': 'value'})
Load HTML from string webviewController.loadContent(HTML, SourceType.HTML)
Load HTML from assets webviewController.loadContent(HTML, SourceType.HTML, fromAssets: true)
Check if you can go back in history webviewController.canGoBack()
Go back in history webviewController.goBack()
Check if you can go forward in history webviewController.canGoForward()
Go forward in history webviewController.goForward()
Reload current content webviewController.reload()
Check if all gestures are ignored webviewController.ignoringAllGestures
Set ignore all gestures webviewController.setIgnoreAllGestures(value)
Evaluate "raw" javascript code webviewController.evalRawJavascript(JS)
Evaluate "raw" javascript code in global context ("page") webviewController.evalRawJavascript(JS, inGlobalContext: true)
Call a JS method webviewController.callJsMethod(METHOD_NAME, PARAMS_LIST)
Retrieve webview's content webviewController.getContent()
Get scroll position on X axis webviewController.getScrollX()
Get scroll position on Y axis webviewController.getScrollY()
Scrolls by x on X axis and by y on Y axis webviewController.scrollBy(int x, int y)
Scrolls exactly to the position (x, y) webviewController.scrollTo(int x, int y)
Retrieves the inner page title webviewController.getTitle()
Clears cache webviewController.clearCache()

Contribution

Any help from the open-source community is always welcome and needed:

  • Found an issue?

    • Please fill a bug report with details.
  • Wish a feature?

    • Open a feature request with use cases.
  • Are you using and liking the project?

    • Promote the project: create an article, do a post or make a donation.
  • Are you a developer?

    • Fix a bug and send a pull request.
    • Implement a new feature.
  • Have you already helped in any way?

    • Many thanks from me, the contributors and everybody that uses this project!

Support & Development Services

This plugin is maintained by Cross Sonic, a software solutions company specializing in Flutter, .NET, AI, and cloud-based applications.

Need Custom Development?

If you need custom development, feature enhancements, or professional support, Cross Sonic provides dedicated development services tailored to your needs. Reach out to us at contact@crosssonic.com.

License

This project is licensed under the MIT License.

카테고리

의존성

의존성 목록 9 개

소스 저장소

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