반응형
반응형
반응형

웹 앱을 만들기 위한 사전 작업이 끝났다.

이제 진짜 앱을 만들어 보자!!

 

1. 앱이 처음 실행됐을 때 보여줄 화면.

 - lib/main.dart

import 'package:[프로젝트 이름]/screen/home_screen.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(
    MaterialApp(
      home: HomeScreen(),
    ),
  );
}

 - import : 다른 파일의 위젯이나 변수등을 불러와서 사용하는 경우에 사용.

  √ 다른 파일에서 불러올 경우 : package:[프로젝트의 이름]/[lib 폴더로 부터의 위치]/파일명(.dart)

  √ 플러그인 기능 사용 시 : package:[플러그인 이름]/[플러그인 이름].dart

 

 - MaterialApp 위젯은 플러터 앱의 최상위 위젯이며 앱이 처음 실행됐을 때 보여줄 화면을 home 매개변수에 입력할 수 있다. 여기서는 HomeScreen() 을 불러와서 첫화면으로 설정한다.

 

2. 홈 화면에서 사용할 HomeScreen 정의

 - lib/screen/home_screen.dart

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';

class HomeScreen extends StatelessWidget {
  WebViewController? controller; // 컨트롤러 변수 생성

  HomeScreen({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar( // 앱바 위젯 추가
        // 배경색 지정
        backgroundColor: Colors.orange,
        // 앱 타이틀 설정
        title: Text('Childeye Blog'),
        // 가운데 정렬
        centerTitle: true,
        actions: [
          IconButton(

            // 눌렀을 때 콜백 함수 설정
            onPressed: () {
              if (controller != null) {

                // 웹뷰에서 보여줄 사이트 실행하기
                controller!.loadUrl('https://childeye.tistory.com');
              }
            },

            // 홈 버튼 아이콘 설정
            icon: Icon(
              Icons.home,
            ),
          ),
        ],
      ),
      body: WebView(  // WebView 추가하기
        initialUrl: 'https://childeye.tistory.com',
        javascriptMode: JavascriptMode.unrestricted,
        onWebViewCreated: (WebViewController controller) {
          this.controller = controller; // 위젯에 컨트롤러 저장
        },
      ),
    );
  }
}

 - HomeScreen 위젯 : 웹 앱이 실행되면 가장 먼저 보이는 위젯.

 

 - 웹뷰 컨트롤러 : 홈 아이콘을 눌렀을 때 웹뷰 화면을 변경하려면 위젯 제어 기능이 필요하다. 이 기능을 하는 것이 웹뷰 컨트롤러가 담당한다.

  √ WebViewController 를 저장할 변수를 선언한다.(controller 변수)

  √ 웹뷰 위젯이 생성되면 onWebViewCreated 함수가 실행되는데 이때 WebViewController 를 매개변수로 받는다. 이 값을 controller 변수에 저장하면 웹뷰를 제어할 수 있다.

 

 - 화면 구성 : 앱바와 웹뷰로 이루어져 있음.

  √ 앱바 : 제목과 홈 버튼을 렌더링.

  √ 웹뷰 : 지정한 URL(childeye.tistory.com)의 내용을 표시

 

 - 앱바(AppBar)

  √ HomeScreen 위젯에 앱바를 추가, 제목을 넣어주고 배경색을 설정한다.

  √ 앱바 위젯은 일반적으로 Scaffold 위젯의 appBar 매개변수로 넣어준다.

  √ AppBar 의 배경색을 지정한다.

  √ AppBar 의 중간에 Text 위젯을 넣어주고 가운데 정렬한다.

  √ AppBar 의 actions 매개변수에 홈아이콘을 생성하고 제어한다. actions 매개변수에 위젯을 넣으면 앱바의 오른쪽 끝에 순서대로 위젯이 배치된다.

  √ 홈아이콘을 눌렀을 때 실행할 콜백 함수를 onPressed 매개변수에 정의한다. WebViewController 의 load() 함수를 이용하여 URL 로 이동시킨다. controller 변수에 ! 기호를 추가하는 이유는 controller 변수가 null 이 가능한 타입으로 선언됐기 때문이다. 위 코드에서는 controller 변수가 null 이 아닌 경우에만 load() 함수를 호출하니 ! 를 사용하여 controller 변수는 절대로 null 이 될수 없다고 표현한 것이다.

 

 - 웹뷰(WebView)

  √ 웹뷰 플러그인을 import 하여 사용한다.

  √ Scaffold 의 body 매개변수에 WebView 위젯을 넣는다.

  √ 기본 URL 을 설정하고 자바스크립트도 실행할 수 있도록 한다.

 

에뮬레이터를 실행시키면 다음과 같은 결과물이 된다.

 

웹 앱 완성!!

반응형
반응형

이전 글에서 콜백 함수, 웹뷰 위젯에 대해서 알아보았다.

이를 이용하여 이제 웹 앱 만들기에 도전해보자.

이미 만들어진 웹 페이지를 앱에서 불러와서 보여주는 앱을 웹 앱이라 부른다.

웹 앱을 만들기 전에 사전 설정이 필요하다.

 

1. 플러그인 추가

 - pubspec.yaml

dependencies:
  flutter:
    sdk: flutter


  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^1.0.2

  # 웹뷰 플러그인 추가.
  webview_flutter: 3.0.4

위와 같이 웹뷰 플러그인을 추가하고 "pub get" 을 클릭하여 플러그인을 내려받는다.

"pub get" 버튼을 클릭하지 않고 플러그인을 내려받는 방법은...

아래처럼 안드로이드 스튜디오 하단의 "터미널" 탭에서 명령어를 실행하는 것이다.

- flutter pub get

 

2. 권한 및 네이티브 설정

 - 웹 앱을 만들기 위해 인터넷 사용 권한을 추가하고 http / https 프로토콜을 이용할 수 있게 설정해야 한다.

 - android/app/src/main/AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.flutter_sample">
....
   <uses-permission android:name="android.permission.INTERNET" />
....
</manifest>

 

 - 안드로이드 빌드 툴인 gradle 설정 파일인 build.gradle 은 모듈 파일로써 의존성이나 버전 정보를 관리한다.

 - android/app/build.gradle(android/build.gradle 파일은 프로젝트 파일이며 주로 클래스패스나 repository 정보등을 설정한다)

....

android {
    // 변경.
    // compileSdkVersion flutter.compileSdkVersion
    compileSdkVersion 32

....

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "com.example.flutter_sample"
        // You can update the following values to match your application needs.
        // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
        // 변경
        // minSdkVersion flutter.minSdkVersion
        minSdkVersion 20
        targetSdkVersion flutter.targetSdkVersion
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
    }

....
}

....

 - minSdkVersion : 안드로이드 운영체제의 최소 SDK 버전을 설정

 - compileSdkVersion : 앱을 빌드할 때 사용할 SDK 버전. 앱은 compileSdkVersion 이하 버전의 기능을 모두 지원한다.

이런 네이티브 설정 관련 정보는 각 플러그인의 pub.dev 페이지에서 확인 할 수 있다.참고로 webview_flutter 플러그인 정보는 webview_flutter | Flutter Package (pub.dev) 에서 확인 할 수 있다.

아직 많은 사이트들이 https 가 아닌 http 만 지원하는 곳도 있을 수 있다. 따라서 http 프로토콜을 허용하도록 설정한다.

 - android/app/src/main/AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.flutter_sample">

   <uses-permission android:name="android.permission.INTERNET" />

   <application
        android:label="flutter_sample"
        android:name="${applicationName}"
        android:icon="@mipmap/ic_launcher"
        android:usesCleartextTraffic="true"> <!-- 여기 부분 추가 -->
        
       ....
       
</manifest>

 

다음 글에서 본격적으로 웹 앱을 만들어 보도록 하자!!

반응형
반응형

1. 콜백 함수

 - 일정 작업이 완료되면 실행되는 함수

 - 함수를 정의하고 바로 실행되는 것이 아니라 특정 조건이 됐을 때 실행되는 함수

 - ex) 사용자가 화면을 터치 했을 때 실행할 함수, 웹뷰의 로딩이 완료됐을 때 실행할 콜백 함수를 정의 할 수 있다.

WebView(
	initialUrl: 'https://childeye.tistroy.com',
    javascriptMode: JavascriptMode.unrestricted,
    
    onPageFinished: (String url) {
    	print(url);
    },
}

onPageFinished() 함수는 웹뷰에서 페이지 로딩이 완료된 뒤에 실행되는 콜백 함수이다.

첫 번째 매개변수로 로딩된 페이지의 url 전달한다.

페이지가 로딩 후 실행하고 싶은 작업이 있다면 함수 내부에 코드를 정의하면 된다.

WebView 위젯의 콜백함수는 onPageFinished 뿐 아니라 onWebViewCreated(), onPageStarted(), onProgress 등의 특정 조건이 성립됐을 때 실행되는 콜백 함수도 있다.

 

2. 웹뷰 위젯

웹뷰는 프레임워크에 내장된 브라우저를 앱의 네이티브 컴포넌트에 임베딩하는 기능이다.

엡에서 웹브라우저의 기능을 구현해 주는 것이다.

웹뷰는 네이티브 컴포넌트에 비해 속도가 느리고 애니메이션이 부자연스럽지만 기존에 만든 웹사이트를 손쉽게 활용할 수 있어서 사용한다.

이미 만들어진 웹사이트가 있다면 코드 몇 줄로 해당 사이트를 앱에서 웹뷰로 탑재해서 앱을 만들수 있다.

결제 모듈을 PG사에서 웹으로 이미 기능을 구현해두었기 때문에 웹뷰를 사용하면 결제 기능 개발을 별도로 구현할 필요가 없다.

 

웹뷰의 속성

 - initialUrl : 웹뷰에서 처음 실행할 웹사이트의 주소. 웹뷰가 포함된 위젯이 화면에 생성되면 웹뷰를 생성하고 initialUrl 사이트를 처음으로 실행한다.

 - javascriptMode : 웹뷰에서 자바스크립트 실행을 허용할지 여부를 결정.

   √ unrestricted : 자바스크립트를 제한 없이 실행

    disable : 자바스크립트를 실행 할 수 없음.

 - onWebViewCreated : 웹뷰 위젯이 생성되면 실행할 콜백 함수. 매개 변수로 WebViewController 를 전달하며 뒤로가기, 앞으로 가기, 새로운 URL 실행하기 등 기능을 조작할 수 있다.

 - onPageStarted : 웹뷰가 처음 생성되거나 페이지를 이동했을 때 웹페이지가 로딩되기 시작하면 실행할 콜백 함수. 매개변수로 로딩이 시작된 페이지의 URL 이 전달된다.

 - onPageFinished : 웹페이지 로딩이 끝나면 실행. 로딩이 완료된 웹페이지의 URL 이 매개변수로 전달된다.

 - onProgress : 웹페이지가 로딩 중일 때 지속적으로 실행되며 페이지의 로딩이 끝날 때까지 실행된다. 매개변수로 페이지 로딩 상태가 0 ~ 100 사이의 int 값으로 전달된다.

반응형

+ Recent posts