Flutter_web_viewパッケージを使用しているFlutterアプリがあります。私はそれをいくつかの異なるファイルで使用していますが、それを機能させるために必要なコードの行がいくつかあるので、独自のファイルを作成し、アプリの任意の場所で_launchwebview関数を参照するだけです。ファイルを参照して情報を渡す方法は知っていますが、メソッド/関数は知りません。ここにクラスコードがあります...
import 'package:flutter/material.Dart';
import 'package:flutter_web_view/flutter_web_view.Dart';
class ShopClass extends StatefulWidget {
@override
ShopClassState createState() => new ShopClassState();
}
class ShopClassState extends State<ShopClass> {
String _redirectedToUrl;
FlutterWebView flutterWebView = new FlutterWebView();
bool _isLoading = false;
@override
initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
Widget leading;
if (_isLoading) {
leading = new CircularProgressIndicator();
}
var columnItems = <Widget>[
new MaterialButton(
onPressed: launchWebViewExample, child: new Text("Launch"))
];
if (_redirectedToUrl != null) {
columnItems.add(new Text("Redirected to $_redirectedToUrl"));
}
var app = new MaterialApp(
home: new Scaffold(
appBar: new AppBar(
leading: leading,
),
body: new Column(
children: columnItems,
),
),
);
return app;
}
void launchWebViewExample() {
if (flutterWebView.isLaunched) {
return;
}
flutterWebView.launch("https://apptreesoftware.com",
headers: {
"X-SOME-HEADER": "MyCustomHeader",
},
javaScriptEnabled: false,
toolbarActions: [
new ToolbarAction("Dismiss", 1),
new ToolbarAction("Reload", 2)
],
barColor: Colors.green,
tintColor: Colors.white);
flutterWebView.onToolbarAction.listen((identifier) {
switch (identifier) {
case 1:
flutterWebView.dismiss();
break;
case 2:
reload();
break;
}
});
flutterWebView.listenForRedirect("mobile://test.com", true);
flutterWebView.onWebViewDidStartLoading.listen((url) {
setState(() => _isLoading = true);
});
flutterWebView.onWebViewDidLoad.listen((url) {
setState(() => _isLoading = false);
});
flutterWebView.onRedirect.listen((url) {
flutterWebView.dismiss();
setState(() => _redirectedToUrl = url);
});
}
void reload() {
flutterWebView.load(
"https://google.com",
headers: {
"X-SOME-HEADER": "MyCustomHeader",
},
);
}
}
別のクラスでlaunchWebViewExample
を使用するにはどうすればよいですか?
次のように、その機能だけでファイルを作成できます。
test.Dart
void launchWebView () {
print("1234");
}
次に、このファイルを次のようにインポートします。
main.Dart
import "test.Dart";
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
launchWebView();
それは本当にきれいではありませんが、あなたはそれを行うことができます。または、次のような静的メソッドでクラスを使用できます。
class test {
static void foo() {
print("1234");
}
}
そして、あなたのコードでそのように呼び出します(インポート後):
test.foo();
または、クラス内ですべての関数(ヘルパー)を宣言し、それらを引数として他のクラスに渡すことができます。
//The class which contains your functions
class HelperFunction{
//Define your method
void launchWebView () {
print("1234");
}
//Pass that function to a class
MyHomePage(launchWebView);
}
//The class which receives the function.
class MyHomePage extends StatefulWidget{
//Retrieve the function and store it to a variable of type Function.
final Function launchWebView;
MyHomePage(this.launchWebView);
}
class class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
//Access that function in State class using widget keyword.
widget.launchWebView();
}
}
クラスレベルで関数を宣言したい
ファイルfoo.Dart
class foo {
void launchWebView () {};
}
ファイルbar.Dart
import 'foo.Dart'
class Bar {
void someFunction (){
launchWebView();
}
}