web-dev-qa-db-fra.com

Comment utiliser les fonctions d'un autre fichier dans Dart/Flutter?

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?

5
Charles Jr

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();
10
Antonino Cacace

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();
   }
}  
1
terap30

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();
  }


}
1
Tree