J'ai une application Flutter dans laquelle j'utilise le package flutter_web_view. Je l'utilise sur plusieurs fichiers différents et j'aimerais créer son propre fichier et simplement faire référence à la fonction _launchwebview n'importe où dans mon application, car plusieurs lignes de code sont nécessaires pour le faire fonctionner. Je sais comment référencer des fichiers et transmettre des informations mais pas des méthodes/fonctions. Voici le code de la classe ...
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",
},
);
}
}
Comment utiliser launchWebViewExample
dans une autre classe?
Vous pouvez écrire un fichier avec seulement cette fonction, comme:
test.Dart
void launchWebView () {
print("1234");
}
puis importez ce fichier comme ceci:
main.Dart
import "test.Dart";
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
launchWebView();
Ce n'est pas vraiment propre, mais vous pouvez le faire ..__ Alternativement, vous pouvez utiliser une classe avec une méthode statique telle que:
class test {
static void foo() {
print("1234");
}
}
et ensuite dans votre code, invoquez-le comme ça (après l'importation):
test.foo();
Ou vous pouvez simplement déclarer toutes vos fonctions (aides) dans une classe et les transmettre comme argument à une autre classe.
//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();
}
}
Vous voulez déclarer une fonction au niveau de la classe
fichier foo.Dart
class foo {
void launchWebView () {};
}
barre de fichiers
import 'foo.Dart'
class Bar {
void someFunction (){
launchWebView();
}
}