Skip to content

Enhance comments, example, README #12

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 5, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 32 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
@@ -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***

Expand All @@ -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
<activity android:name="com.flutter_webview_plugin.WebviewActivity"
android:parentActivityName=".MainActivity"/>
<activity android:name="com.flutter_webview_plugin.WebviewActivity" android:parentActivityName=".MainActivity"/>
```

### IOS
### iOS

No extra configuration is needed
No extra configuration is needed.
63 changes: 28 additions & 35 deletions example/lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,75 +1,64 @@
import 'dart:async';

import 'package:flutter/material.dart';

import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';

void main() {
runApp(new MyApp());
}

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'),
);
}
}

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
_MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
// 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<ScaffoldState> _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
Expand All @@ -79,22 +68,26 @@ class _MyHomePageState extends State<MyHomePage> {
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);
}
Expand Down
42 changes: 0 additions & 42 deletions example/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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