inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

class 문법 관련하여 질문있습니다.

1689

뭐하지이름

작성한 질문수 13

1

  1. final homeUrl = Uri.parse('https://blog.codefatory.ai');

    homeUrl을 해당 변수를 사용하는 클래스 밖(상위)에서 선언하는건 어떤이유인가요?

    loadRequest()가 수행되는공간과 같은 공간에 위치시켰더니

    'the instance member 'homeUrl' can't be accessed in an initializer. Try replacing the reference to the instance member with a different expression.' 이란 에러가 뜨더군요.

    클래스 컨스트럭터 내에서 변수를 사용하려면 상위공간에 미리 선언해야만 하는것인가요?

    (이전 코드에선 web view위젯 안에서 homeUrl을 call했기에 webview위젯 밖에 선언되어있어서 괜찮았던거라고 이해해도되는걸까요?

     

  2. WebViewController controller = WebViewController()

    ..setJavaScriptMode(JavaScriptMode.unrestricted)

    ..loadRequest(homeUrl);

    새로 등장한 이 코드에서 (..)은 찾아보니 cascade notation 이라는 문법이더군요.

    맞다면

    WebViewController controller = WebViewController();

    controller.setJavaScriptMode(JavaScriptMode.unrestricted);

    controller.loadRequest(homeUrl);

    과 같은 뜻일텐데 이 코드처럼 풀어서 쓰려하면' the name of a constructor must match the name of the enclosing class'라는 에러가 뜹니다. 이는 왜일까요?

flutter 클론코딩 Flutter 클론코딩

답변 1

0

코드팩토리

안녕하세요!

1번의 경우 클래스 인스턴스의 프로퍼티 (변수)에서 또다른 클래스 인스턴스의 프로퍼티를 접근 할 수 없기때문입니다.

추가로, homeUrl의 경우 경로가 변경될 일이 없기때문에 어디에 선언해도 상관이 없습니다.

2번의 경우 이해하신게 맞습니다. 혹시 WebViewController controller = WebViewController()를 선언하시고 바로 아래에 함수들을 실행하셨나요? 그건 불가능한 방식입니다. 특정 함수를 실행하는 위치는 클래스의 함수 안에서만 가능합니다. 외부에서는 변수 선언만 가능합니다. cascade operator의 경우 결국 타겟 변수를 반환해주기때문에 가능한 문법입니다.

WebView 강의의 경우 낮은 난이도로 앱을 구현해보는데 초점을 두고 설계되었습니다. 이전 버전의 WebView 플러그인에서는 이 목적에 잘 맞았는데 플러그인 버전업이 되다보니 난이도를 최대한 높히지 않고 강의를 진행하려다보니 코드가 약간 어색한 부분이 있을 수 있습니다. 예를들어 WebView를 조금 더 효율적으로 사용하려면 최소한 StatefulWidget과 라이프사이클을 배워야합니다. 강의를 조금 더 진행해보시고 라이프사이클까지 봐보시면 의문점들이 모두 풀리실거라 생각합니다.

감사합니다!

0

뭐하지이름

친절한 답변 감사드립니다.

0

뭐하지이름

클래스 인스턴스의 프로퍼티 라는부분이 잘 이해가되지않아 추가 질문드립니다.

homescreen이라는 클래스가 있다면 homescreen 내부에서 정의 하는 프로퍼티(변수)는 그냥 클래스 내부의 프로퍼티라고 해야하지않나요? homescreen의 인스턴스를 생성해서

var homescreenInstance = homescreen();

homescreenlnstance.length;

이런식으로 사용할때 위의 length부분이 homescreen클래스의 인스턴스의 프로퍼티가 아닌가요?

 

아님 혹시 클래스의 인스턴스 프로퍼티 (static property가 아닌)를 말씀하신걸까요?

0

코드팩토리

네 제가 말을 좀 헷갈리게 한 것 같네요. static이 아닌걸 지칭했습니다. 일반적으로 클래스의 프로퍼티라고 하지만 혹시 static으로 선언하면 되지 않냐고 하실까봐 '인스턴스'라는 명칭을 넣게 되었네요! 이해하신게 맞습니다.

0

뭐하지이름

이제 정확히 머릿속에서 정리되었습니다 감사힙니다!!

198강 (){onTap(e);}의 이해 돕기

0

39

1

video_call 플러그인 설치후 에러 발생

0

47

1

SDK 안드로이드 설치 질문!

0

62

1

코드팩토리 디스코드 링크 다시 부탁드려요~

0

93

1

Webview를 이용해서 URL 상의 페이지 출력 불가

0

71

1

홈스크린 함수를 함축해서 main.dart에 옮기는 문제

0

56

1

플레이스토어

0

60

1

아고라 엔진 init 함수의 반환타입이 Future<void> 이것의 의미는 무엇인가요?

0

56

1

가이드라인 질문

0

59

0

emulator 에러 환경설정 뭐가 문제 일까요??

0

78

1

emulator 실행 오류

0

95

3

Column을 가로방향 최대 사이즈를 차지하도록 하는 방법에 관련

0

73

1

pubspec.yaml에서 font를 추가하면서 weight 값을 지정하는 것이 의미가 있는 것인지 문의

0

44

1

setState()를 호출하지 않으면 build가 실행 안되는 건가요?

0

54

1

video_call 플러그인 설치시 에러문제

0

67

1

children 안의 if 문에서 { } 못쓰는 이유?

0

51

1

이렇게 오류가 떠요

0

66

1

AppBar 사용했는데

0

63

2

[문제해결] '오늘도 출첵!' 의 171번 강의에서 중요한 문제를 발견했습니다

0

58

1

StatefulWidget 실습 에러가 발생합니다.[해결완료]

0

65

1

Video Player 프로젝트에 대한 추가 질문

0

54

0

Row위젯이나 column위젯의 위치는 누가 정하나요??

0

43

1

geolocator 오류때문에 개발진행이 불가능입니다

0

64

1

API 관련 이슈

0

89

2