본문 바로가기
Flutter/Flutter FAQ

Flutter 다트 / 플러터에서 다른 파일의 함수를 사용하는 방법은 무엇인가요?, How to use Functions of another File in Dart / Flutter?

by 베타코드 2023. 7. 17.
반응형

질문


나는 플러터 앱에서 flutter_web_view 패키지를 사용하는 중입니다. 여러 가지 파일에서 사용하고 있으며, 앱의 어디에서든지 _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();
반응형

댓글