diff --git a/README.md b/README.md index 0cc73dd7..bccca4fc 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ # flutter_webview_plugin - -Plugin that allow Flutter to communicate with a native Webview. - +Plugin that allow Flutter to communicate with a native WebView. ***For Android, it will launch a new Activity inside the App with the Webview inside. Does not allow to integrate a Webview inside a Flutter Widget*** @@ -11,31 +9,50 @@ Plugin that allow Flutter to communicate with a native Webview. - [x] Android - [x] IOS - ## Getting Started -For help getting started with Flutter, view our online -[documentation](http://flutter.io/). +For help getting started with Flutter, view our online [documentation](http://flutter.io/). +### How it works -### Dart +#### Launch WebView with variable url ```dart -var flutterWebviewPlugin = new FlutterWebviewPlugin(); +void launchWebView(String url) sync { + var flutterWebviewPlugin = new FlutterWebviewPlugin(); + + flutterWebviewPlugin.launch(url); + + // Wait in this async function until destroy of WebView. + await flutterWebviewPlugin.onDestroy.first; +} +``` + +### Close launched WebView -flutterWebviewPlugin.launch("https://flutter.io"); -await flutterWebviewPlugin.onDestroy.first; +```dart +void launchWebViewAndCloseAfterWhile(String url) { + var flutterWebviewPlugin = new FlutterWebviewPlugin(); + + flutterWebviewPlugin.launch(url); + + // After 10 seconds. + new Timer(const Duration(seconds: 10), () { + // Close WebView. + // This will also emit the onDestroy event. + flutterWebviewPlugin.close(); + }); +} ``` ### Android -Add the Activity to you `AndroidManifest.xml` +Add the Activity to you `AndroidManifest.xml`: ```xml - + ``` -### IOS +### iOS -No extra configuration is needed +No extra configuration is needed. diff --git a/example/lib/main.dart b/example/lib/main.dart index b7085a83..abf500d1 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,5 +1,7 @@ import 'dart:async'; + import 'package:flutter/material.dart'; + import 'package:flutter_webview_plugin/flutter_webview_plugin.dart'; void main() { @@ -7,24 +9,14 @@ void main() { } class MyApp extends StatelessWidget { - // This widget is the root of your application. @override Widget build(BuildContext context) { return new MaterialApp( - title: 'Flutter Demo', + title: 'Flutter WebView Demo', theme: new ThemeData( - // This is the theme of your application. - // - // Try running your application with "flutter run". You'll see - // the application has a blue toolbar. Then, without quitting - // the app, try changing the primarySwatch below to Colors.green - // and then invoke "hot reload" (press "r" in the console where - // you ran "flutter run", or press Run > Hot Reload App in IntelliJ). - // Notice that the counter didn't reset back to zero -- the application - // is not restarted. primarySwatch: Colors.blue, ), - home: new MyHomePage(title: 'Flutter Demo Home Page'), + home: new MyHomePage(title: 'Flutter WebView Demo'), ); } } @@ -32,15 +24,6 @@ class MyApp extends StatelessWidget { class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); - // This widget is the home page of your application. It is stateful, - // meaning that it has a State object (defined below) that contains - // fields that affect how it looks. - - // This class is the configuration for the state. It holds the - // values (in this case the title) provided by the parent (in this - // case the App widget) and used by the build method of the State. - // Fields in a Widget subclass are always marked "final". - final String title; @override @@ -48,28 +31,34 @@ class MyHomePage extends StatefulWidget { } class _MyHomePageState extends State { + // Instance of WebView plugin final FlutterWebviewPlugin flutterWebviewPlugin = new FlutterWebviewPlugin(); - TextEditingController _ctrl = - new TextEditingController(text: "https://flutter.io"); + // On destroy stream StreamSubscription _onDestroy; + + TextEditingController _ctrl = new TextEditingController(text: "https://flutter.io"); GlobalKey _scaffoldKey = new GlobalKey(); @override initState() { super.initState(); + + // Add a listener to on destroy WebView, so you can make came actions. _onDestroy = flutterWebviewPlugin.onDestroy.listen((_) { if (mounted) { - _scaffoldKey.currentState - .showSnackBar(new SnackBar(content: new Text("Webview Destroyed"))); + // Actions like show a info toast. + _scaffoldKey.currentState.showSnackBar(new SnackBar(content: new Text("Webview Destroyed"))); } }); } @override void dispose() { - super.dispose(); + // Every listener should be canceled, the same should be done with this stream. _onDestroy?.cancel(); + + super.dispose(); } @override @@ -79,22 +68,26 @@ class _MyHomePageState extends State { appBar: new AppBar( title: new Text('Plugin example app'), ), - body: new Column(children: [ - new Container( + body: new Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + new Container( padding: const EdgeInsets.all(24.0), - child: new TextField(controller: _ctrl)), - new RaisedButton(onPressed: _onPressed, child: new Text("Open Webview")) - ], mainAxisAlignment: MainAxisAlignment.center), + child: new TextField(controller: _ctrl), + ), + new RaisedButton( + onPressed: _onPressed, + child: new Text("Open Webview"), + ) + ], + ), ); } void _onPressed() { try { + // This way you launch WebView with an url as a parameter. flutterWebviewPlugin.launch(_ctrl.text); - - new Timer(const Duration(seconds: 10), () { - flutterWebviewPlugin.close(); - }); } catch (e) { print(e); } diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 1d2058ed..a074a4b7 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -7,47 +7,5 @@ dependencies: flutter_webview_plugin: path: ../ -# For information on the generic Dart part of this file, see the -# following page: https://www.dartlang.org/tools/pub/pubspec - -# The following section is specific to Flutter. flutter: - - # The following line ensures that the Material Icons font is - # included with your application, so that you can use the icons in - # the Icons class. uses-material-design: true - - # To add assets to your application, add an assets section here, in - # this "flutter" section, as in: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - - # To add assets from package dependencies, first ensure the asset - # is in the lib/ directory of the dependency. Then, - # refer to the asset with a path prefixed with - # `packages/PACKAGE_NAME/`. Note: the `lib/` is implied, do not - # include `lib/` in the asset path. - # - # Here is an example: - # - # assets: - # - packages/PACKAGE_NAME/path/to/asset - - # To add custom fonts to your application, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700