반응형

PostgreSQL에서 real, float, float8, double precision, numeric 타입은 모두 부동 소수점 숫자 또는 고정 소수점 숫자를 저장하는 데 사용됩니다. 각각의 차이점과 사용 방법, 그리고 활용 방안에 대해 알아보겠습니다.

데이터 타입 설명

  1. real
    • 설명: 4바이트 단정밀도 부동 소수점 숫자.
    • 정밀도: 약 6자리의 소수점 자릿수를 가짐.
    • 범위: -3.4E+38 ~ +3.4E+38.
    • 사용: 메모리가 제한적이고, 매우 높은 정밀도가 필요하지 않은 경우에 사용.
  2. float (또는 float8)
    • 설명: 8바이트 배정밀도 부동 소수점 숫자. float8은 double precision의 별칭입니다.
    • 정밀도: 약 15자리의 소수점 자릿수를 가짐.
    • 범위: -1.7E+308 ~ +1.7E+308.
    • 사용: 높은 정밀도가 필요한 경우에 사용.
  3. double precision
    • 설명: 8바이트 배정밀도 부동 소수점 숫자.
    • 정밀도: float와 동일, 약 15자리의 소수점 자릿수를 가짐.
    • 범위: float와 동일, -1.7E+308 ~ +1.7E+308.
    • 사용: 매우 높은 정밀도가 필요한 경우에 사용.
  4. numeric (또는 decimal)
    • 설명: 가변 길이의 정확한 숫자. 소수점 이하 자릿수와 전체 자릿수를 지정할 수 있음.
    • 정밀도: 사용자가 지정한 자릿수까지 정확함.
    • 범위: 매우 넓음, 제한이 없다고 볼 수 있음.
    • 사용: 금액 계산 등 매우 높은 정밀도가 요구되는 경우에 사용.

사용 방법과 예제

real

CREATE TABLE example_real ( id serial PRIMARY KEY, value real ); 
INSERT INTO example_real (value) VALUES (3.14), (2.71); 
SELECT * FROM example_real;

float (float8), double precision

CREATE TABLE example_float ( id serial PRIMARY KEY, value float8 ); 
CREATE TABLE example_double_precision ( id serial PRIMARY KEY, value double precision ); 
INSERT INTO example_float (value) VALUES (3.141592653589793), (2.718281828459045); 
INSERT INTO example_double_precision (value) VALUES (3.141592653589793), (2.718281828459045); 
SELECT * FROM example_float; SELECT * FROM example_double_precision;

numeric (decimal)

CREATE TABLE example_numeric ( id serial PRIMARY KEY, value numeric(10, 2) ); 
INSERT INTO example_numeric (value) VALUES (12345.67), (98765.43); 
SELECT * FROM example_numeric;
 

활용 방안

  1. real: 센서 데이터, 간단한 계산 등 정밀도가 크게 필요 없는 경우에 사용합니다.
  2. float (float8), double precision: 과학 계산, 통계 분석 등 높은 정밀도가 필요한 경우에 사용합니다. float8과 double precision은 동일한 타입이므로 동일한 용도로 사용됩니다.
  3. numeric (decimal): 금액, 금융 데이터 등 매우 높은 정밀도와 정확성이 필요한 경우에 사용합니다. 특히, 소수점 이하 자릿수가 중요한 경우 유용합니다.

요약

  • real은 4바이트 단정밀도 부동 소수점으로, 정밀도가 크게 필요 없는 경우에 사용됩니다.
  • float와 double precision은 8바이트 배정밀도 부동 소수점으로, 높은 정밀도가 필요한 경우에 사용됩니다.
  • numeric은 고정 소수점으로, 정밀도가 매우 중요한 경우에 사용됩니다.
728x90
반응형
반응형

1년에 한두번 방문하는 코엑스 팝마트

들리면 무조건 한두개의 피규어를 사서 나오는데 이번에 피치라이엇이라는 시리즈가 맘에 들어 픽업해왔습니다.

 

팝마트 피규어는 가챠처럼 랜덤이라 뜯어서 확인할때 은근 기대와 긴장감이 있습니다. 

하지만 이번에 바로 뜯지 않고 알리익스프레스에서 같은 제품을 구매해 비교해 보기로 했습니다.

알리익스프레스와 테무가 한창 인기가 있어 국내 커머스업계도 긴장하게 했지만 짝퉁 이슈가 많기에 비교가 해보고 싶어졌습니다.

 

그래서 검색 후 바로 구매해 봤습니다.

가격은 요즘 달러가 강세라 환율탓에 국매에서 사는게 더 쌌어요. ㅠㅠ 그런데 만약 짝퉁이라면.......

중국제 피규어는 자체 퀄리티보단 도색이 많이 떨어지는지라 많이 싸보이는 단점이 있죠.

 

왼쪽은 국매 팝마트에서 구매한 상품이고 오른쪽이 알리익스프레스에서 구매한 제품입니다.

 

 

박스는 어디를 봐도 완전 동일했습니다.  알리익스프레스에서 온 제품은 조금 찌그러졌지만요.

박스만 봐선 동일한 제품이라고 판단이 되더라구요. 그래도 내용물은 확인해봐야겠죠.

 

국내에서 구매한 제품은 Frankie The Rhythm이 나왔네요. 원하는 모델은 아니네요.

 

하지만 실물은 맘에 드네요. 퀄리티도 좋고 흔들림없이 균형도 잘 맞았어요. 드럼치는 멤버입니다.제가 원하는건 기타리스트였지만 만족합니다. 고양

 

알리에서 구매한 제품을 은근 기대하게 됐는데 전혀 관심없던 모델이 나왔네요. Frankie The Boss라고 하네요. 

이전에 열어본 아이도 Frankie인데 머리색도 같은걸 보니 포지션만 다르고 같은 아이인가봐요. 

 

도색이 동일하게 잘 되어 있네요. 이 아이는 스텐드 없이 세워야 하기에 균형이 중요한데 제품은 깔끔하게 잘 만들어진거 같아요. 팝마트 제품은 국내판과 동일한 듯 합니다. 결국엔 같은 제품이라는거겠죠. 팝마트는 중국에 본사가 있어서 짝퉁을 팔지는 않는거 같아요. 

 

알리익스프레스에서 가장 저렴한 제품을 구매했지만 결국엔 국내판보다 비싸게 샀다는게 가장 큰 단점이네요.  카드 수수료 무시 못합니다.

 

국내 팝마트에서 제품을 더 이상 구할 수 없다면 알리익스프레스를 이용하는것도 괜찮겠지만 제품이 있다면 국내에서 구매하는걸 추천합니다. 

 

 

728x90
반응형
반응형

스타워즈 레고만 종종 사곤 했는데 뭐가 씌었는지 스피드 챔피언 시리즈가 눈에 들어와 처음으로 구매해봤습니다.

 

모델들이 몇가지 있었는데 영화 분노의 질주를 좋아하기도 하고 브라이언 오코너 (폴워커) 피규어가 들어있는 GT-R 선택 했습니다.

 

폴워커가 미소짓고 있는 모습을 보니 울컥하네요.

 

[ 구성 ]

 

자동차 하부 파츠는 커서 그런지 따로 들어있네요. 하나라서 그런지 비닐 포장은 없었어요.

 

블럭이 2개로 나누어져 포장되어 있습니다. 설명서를 보시면 각 번호 순서대로 조립하게 되어 있으니 한번에 뜯지 마세요.

전 뜯어서 했는데 블럭 찾느라 힘들었어요. 은근 많은 블럭....

 

스티커도 들어있어요. 스티커는 블럭 사이즈에 딱 맞게 나오는게 아니라 블럭 보다 조금 작은 사이즈로 나오기때문에 붙일때 은근 신경이 쓰이더라구요.

 

당연히 설명서가 들어 있어요. 레고의 설명서는 한페이지에 도면은 적고 여백이 많아서 그런지 전체적으로 두꺼운 느낌이 있어요. 대상연령이 낮아서 그런걸까요? 건프라설명서처럼 빽빽한 느낌은 아닙니다.

 

[ 조립 ]

 

스페너를 들고 있는 오코너에요. 비슷한가요? 스페너는 도미닉 토레가 더 어울리는데 말이죠.

 

설명서에 보이는 1번과 2번 블럭들을 조립하면 나오는 결과물이에요. 각 과정에 필요한 블럭은 다른 포장에 없으니 절대 다 뜯지 마세요.

 

다 뜯으면 이렇게 되거든요. ㅠㅠ

 

브레이크 패드는 메탈느낌나게 도색 해줬으면 하는 아쉬움이 있네요. 

 

운전석이에요. 부스터계기판과 니트로 연료통 표현이 꽤나 디테일하네요.

 

 

완성된 GT-R과 오코너에요. 휠을 장착해도 브레이크 패드가 강조되지 않은 점은 역시 아쉽네요. 저만 그럴지도...

 

총 부품수는 319개로 되어 있어요. 차 하나 만드는거라 금방 만들 줄 알았는데 생각보다 오래 걸리더라구요.

 

자동차를 좋아하는 분이라면 스피드 챔피언 시리즈를 수집해 보는것도 괜찮은거 같아요.

 

스타워즈 시리즈는 조금 비싼감이 있어서 항상 머뭇하게 되는데 스피드 챔피언이나 시티 시리즈는 가격대비 부품수도 많고 만족감이 높아서 좋았습니다.

 

 

728x90
반응형
반응형

알리익스프레스에서 할인과 5일내 배송 보장 이벤트가 있어 구매하게된 파가니 디자인의 PD1751 

 

중국의 마이크로 브랜드로 꽤 괜찮은 평을 받고 있는 듯 합니다. 

발타니의 더티더즌을 구매할깨 고민하고 있었는데 마침 유튜브에서 소개하는걸 보고 구매 결정하게 되었네요.

 

마이크로 브랜드의 시계가 대부분 오마주 제품인것럼 해당 제품도 오마주를 하고 있는데요

그 대상은 튜더의 레인저라고 합니다.

튜더 다이버시계는 알고 있지만 레인저는 이번에 처음 알게 되었네요 오마주라고는 하지만 디자인 자체는 거의 카피캣이지 않을까 싶네요

큰 차이라면 튜더는 39mm 사이즈이고 PD1751은 36mm 입니다.

 

알리익스프레스 파가니 디자인 PD1751

 

PAGANI 디자인 2024 새로운 36MM 남성 자동 기계 시계 NH35 사파이어 스테인레스 스틸 AR 코팅 20Bar 시계

Smarter Shopping, Better Living! Aliexpress.com

ko.aliexpress.com

 

 

그럼 받았으니 상품을 살펴 봐야겠네요.

 

포장 박스와 구성품 입니다.

박스는 그냥 심플하고 구성품은 시계와 사용자 설명서, 보증카드, 닦을 수 있는 극세사 천 그리고 브레이슬릿용 일자 드라이버로 되어 있습니다. 근래에 구매했던 스피나커의 브래드너보단 훨 싸지만 좀 더 성의 있는 구성인거 같네요.

디자인은 깔끔합니다. 핸즈도 문제는 없어보이네요.

예전에 파니스 제품을 구매했을때 시계를 기울이면 초침이 옆으로 움직이는 문제가 있어서 은근 신경쓰이더라구요.

용두에 파란색 테이프가 붙어 있는데 처음에 엄청 안떨어져서 색칠이 되어 있는건가란 착각도 했는데요

몇번 시도하다보니 떨어졌네요. 파가니 디자인 엠블럼이 잘 각인되어 있습니다.

무브먼트는 NH35를 사용하고 있구요 케이스백이 사파이어 글래스로 되어 있어 무브먼트 구경을 할 수 있으나 저가의 무브먼트이기도 하고 예쁘지도 않은데 굳이 그랬어야 하나 싶네요. 그리고 찾아보니 NH35무브먼트는 날짜를 포함하고 있기때문에 시간을 맞추기 위해 용두를 당기면 첫번째에 날짜 두번째에 시간인데 PD1751은 날짜 창이 없는 시계이기 때문에 사실 맞지 않는 무브먼트 인거죠. NH38무브먼트라고 날짜를 뺀 무브먼트가 있는데 그걸 사용하지 않은 이유가 궁금하네요.

브레이슬릿은 엄청 가볍기도 하고 저렴해 보이기도 합니다. 버클은 조금 뻑뻑한 느낌이 있네요.

차피 줄질 할 계획이니 상관은 없지만 메탈 브레이슬릿을 그대로 쓴다고 하면 거슬릴거 같아요.

브레이슬릿은 저렴해 보였지만 링크를 분리는 쉽도록 나사로 되어 있습니다. 

나사로 되어 있는 브레이슬릿은  핀으로 되어 있는 경우보다 줄 길이 조절할때 상당히 편합니다. 

이건 소소한 장점이 되겠네요.

이리저리 둘러 보는데 한가지 큰 거슬림이 발생했는데요.

브레이슬릿의 엔드링크에 걸린 링크가 엄청 뻑뻑하게 걸립니다. 위아래로 움직여보면 자연스럽게 움직이고 놓으면 아래로 내려 가야 하는데 걸려서 멈춰 있습니다.

아래 사진에 보면 아래로 내렸을때와 위로 올려봤을때 인데 그대로 멈춰 있네요.

글래스는 사파이어 글래스로 되어 있고 위로 상당히 올라와있습니다. 사진상으로는 두꺼워보이는데 체감상으로는 그리 두꺼워 보이진 않습니다. 브래드너에서 받은 느낌은 확실히 덜 하네요.

대충 다 둘러봤으니 손묵에 올려봐야죠

저는 여분 링크를 전부 떼어내니까 손목에 딱 맞았습니다.

36mm면 엄청 작을거 같았는데 손목에 올려보니 생각보다 작은 느낌은 아니고 처음 경험하는 사이즈지만 시간을 보는데도 불편함은 없네요.

스피나커 브래드너랑 같이 놓고 보면 상당히 작은 느낌이네요.

저렴하게 산 시계이고 소소한 거슬림은 있지만 시계 자체는 볼수록 예쁘네요.

그래서 오마주를 하는걸테지만 말이죠

파가니 디자인의 다른 시계들을 보면 다이얼에 써있는 PAGANI DESIGN이라는 영문이 거슬려서 디자인이 예뻐도 관심을 갖지 않았는데 

PD1751은 엠블럼만 있는것도 맘에 드네요.

그리고 이번에 느낀건 중국 마이크로 브랜드도 상품성이 나쁘지 않다는걸 느꼈네요

카피켓이든 오마주든 많이 만들어봐야 기술력도 좋아지고 새로운 디자인도 나오는게 아닐까 싶네요.

최근에 국내 마이크로 브랜드들도 속속 등장하고 있는데 기회가 되면 구매해봐야겠습니다.

728x90
반응형
반응형

어느날 부터인가 intellij에서 종종 뜨는 에러!!

git install하라는 해결책을 제공해주지만 설치해도 문제가 해결되지 않고 동일한 메시지가 계속 노출이 됩니다.

설치해도 계속 나오는 에러 메시지!!! 원인은 intellij에 설정되어 있는 git 설치 주소를 제대로 인식하지 못하여 방생하는 문제라고 하네요. 

해당 문제가 발생하게 되면 수정된 파일이  project file tree에 표시가 제대로 되지 않고 git diff도 제대로 동작하지 않게 됩니다. 

 

해결 방법

  1. 터미널에서 which git 명령어로 위치를 확인
  2. Preference -> Version Control -> Git -> Path to Git executable에 등록되어 있는 주소를 변경해줌
  3.  Path to Git executable 입력 창 옆에 Test를 실행해보면 설정한 경로에 있는 깃의 버전을 알려줌

해결하면서 확인한것 중  터미널에서 확인한 git의 경로와  이전 설정경로의 git 둘다 버전이 출력된다는 것입니다. 버전이 다르긴 하지만 git을 실행하는데는 문제가 없다는것인데 intellij가 제대로 인식하지 못하는 이유는 의문이네요.

 

 

728x90
반응형
반응형

 

1. Firebase App Check

- 앱의 보안성을 강조하기 위한 서비스 입니다. 앱의 무단 접근, 자동화 봇 등에 의한 보안 위협으로부터 앱을 보호하면, 신뢰할 수 있는 사용자만이 앱에 액세스 할 수 있도록 보장합니다.

- Firebase App Check는 클라이언트-서버 인증 방식을 사용하여 동작합니다. 앱 클라이언트는 인증된 앱으로 등록되어 있는지 확인하기 위해 Firebase App Check SDK를 사용하여 앱 서버에 요청을 보내고, 서버는 이 요청에 대해 Firebase App Check API를 사용하여 요청을 검증합니다. 이를 통해 클라이어트가 신뢰할 수 있는 Firebase 프로젝트에 속하는 앱인지 확인하고, 무단 액세스를 차단할 수 있습니다.

 

2. Flutter에 적용하기

  • Firebase Console에서 Firebase 프로젝트를 생성하고, 해당 프로젝트에 Firebase App Check를 활성화합니다.
  • Flutter 프로젝트의 pubspec.yaml 파일에  Firebase App Check Flutter 패키지를 추가합니다. 
dependencies:
  firebase_app_check: ^0.7.0
  • Flutter 프로젝트의 main.dart 파일에 Firebase App Check를 구성합니다. 
import 'package:firebase_app_check/firebase_app_check.dart';
import 'package:flutter/material.dart';

void main() async {
  // Firebase 초기화
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();

  // Firebase App Check 활성화
  FirebaseAppCheck.instance.activate(webRecaptchaSiteKey: 'YOUR_RECAPTCHA_SITE_KEY');

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Firebase App Check Demo',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Firebase App Check Demo'),
        ),
        body: Center(
          child: Text('Hello World!'),
        ),
      ),
    );
  }
}
  • Firebase App Check를 사용하여 네트워크 요청을 검증하기 위해 package:http 패키지를 사용하여 네트워크 요청을 보낼 때, FirebaseAppCheckToken을 추가합니다.
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:firebase_app_check/firebase_app_check.dart';

final _httpClient = http.Client();

Future<String> fetchData() async {
  // Firebase App Check 토큰 가져오기
  final FirebaseAppCheckToken appCheckToken = await FirebaseAppCheck.instance.getToken();

  // 네트워크 요청 보내기
  final response = await _httpClient.get(
    Uri.parse('https://example.com/data.json'),
    headers: {
      // Firebase App Check 토큰 헤더 추가
      'X-Firebase-AppCheck': 'Bearer ${appCheckToken.token}',
    },
  );

  // 데이터 반환
  return utf8.decode(response.bodyBytes);
}

 

728x90
반응형
반응형

flutter에서 클래스 내부에 선언된 변수와 메소드를 의미하며 클래스 멤버는 다음과 같이 분류됩니다.

  1. 인스턴스 변수 (Instance Variables) : 객체의 인스턴스에 속한 변수로, 객체를 생성할 때 초기화되며, 객체의 속성이나 상태를 나타냅니다.
  2. 정적 변수 (Static Variables) : 클래스에 속한 변수로, 클래스를 로드할 때 초기화되며, 클래스와 관련된 정보를 나타냅니다.
  3. 인스턴스 메소드 (Instance Methods) : 객체의 인스턴스에 속한 메소드로, 객체를 통해 호출됩니다. 객체의 속성이나 상태를 조작하거나, 객체와 관련된 행동을 나타냅니다.
  4. 정적 메소드 (Static Methods) : 클래스에 속한 메소드로, 클래스를 통해 호출됩니다. 클래스와 관련된 행동을 나타냅니다.

다음은 간단한 Flutter  클래스의 예시입니다.

class Person {
  String name;
  int age;

  Person(this.name, this.age);

  void sayHello() {
    print("Hello, my name is $name and I am $age years old.");
  }

  static String hello() {
    return "Hello from Person class!";
  }
}

위의 코드에서 name과 age는 인스턴스 변수

say Hello()는 인스턴스 메소드

hello()는 정적 메소드 입니다.

728x90
반응형
반응형

인스타그램과 같은 UI를 만들기 위해서 ListView.builder를 사용하여 상하 스크롤을 기본적으로 배치하고 각 페이지를 PageView.builder로  좌우 스크롤이 가능하게 구현을 했다.

실제로는 Firebase의 데이터를 불러서 동적으로 구현하지만 예제 소스는 텍스트 값을 리스트에 넣어서 정리했다.

class _HomePageState extends State<HomePage> {
  final ScrollController _scrollController = ScrollController();
  final PageController _pageController = PageController(initialPage: 1);

  List verticalList = ["1", "2"];
  List horizontalList = ["1", "2", "3"];

  @override
  Widget build(BuildContext context) {
    var width = MediaQuery.of(context).size.width;

    return Scaffold(
      appBar: AppBar(
        title: const Text('Photo Manager'),
      ),
      body: SafeArea(
        child: ListView.builder(
          controller: _scrollController,
          scrollDirection: Axis.vertical,
          shrinkWrap: true,
          itemCount: verticalList.length,
          itemBuilder: (context, index) =>
              SizedBox(
                  width: width,
                  height: width * 1.35,
                  child: PageView.builder(
                    controller: _pageController,
                    itemCount: horizontalList.length,
                    itemBuilder: (context, index) =>
                        Text(horizontalList[index])
                ),
              ))
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {},
        child: const Icon(Icons.add),
      ),
    );
  }
}

해당 소스를 실행해보면 화면 상하 2개의 위젯과 각 위젯 안에 3개씩의 위젯으로 구성된 결과가 보여지게 된다.

대충 이런 느낌....

상하좌우 스크롤을 해보면 문제없이 잘 동작한다. 화면상으로만 콘솔을 보지 않는다면 말이다.

콘솔을 확인해보면 아래와 같은 메시지를 볼수가 있다.

위의 메세지는 좌우 스크롤을 끝까지 한상태에서 한번더 스크롤을 해보면 발생한다.

'package:flutter/src/widgets/overscroll_indicator.dart': Failed assertion: line 243 pos 14: 'notification.metrics.axis == widget.axis': is not true.

overscroll_indicator.dart 에서 발생한다고 하니 스크롤이 범위를 벗어났다고 하는거 같긴한데 지금까지 해본결과 좌우던 상하던 오버스크롤이 되도 문제가 없었는데 느닷없는 오류에 많이 당황했다.

 

해당 메시지로 구글링을 해봐도 문제를 해결하기 위한 답변을 찾지 못하고 NotificationListener라는 힌트만 얻게 되었다.

그리고 NotificationListener에 대해서 찾아보기 시작한 결과

위와 같은 중첩구조에서  scroll event가 발생할 경우 상위의 위젯(위에선 ListView.builder)에서는 단일 위젯과 같기에 문제 없으나 내부에 있는 위젯(위에선 PageView.builder)에 발생한 event를 상위 위젯에서도 잡는다는 것이다.

page_view.dart나 list_view.dart 소스를 열어보면 안에 NotificationLIstener를 return 하는것을 찾아볼수 있다.

 

그럼 상위위젯에서 listening 하지 못하게 하면 해결되는거 아닌가? 란 생각과 함께 찾아본결과

해당 이벤트를 발생시키는 위젯을 NotificationLIstener위젯으로 감싸서 직접 컨트롤 할 수 있다는걸 알게 되었다.

class _HomePageState extends State<HomePage> {
  final ScrollController _scrollController = ScrollController();
  final PageController _pageController = PageController(initialPage: 1);

  List verticalList = ["1", "2"];
  List horizontalList = ["1", "2", "3"];

  @override
  Widget build(BuildContext context) {
    var width = MediaQuery.of(context).size.width;

    return Scaffold(
      appBar: AppBar(
        title: const Text('Photo Manager'),
      ),
      body: SafeArea(
        child: ListView.builder(
          controller: _scrollController,
          scrollDirection: Axis.vertical,
          shrinkWrap: true,
          itemCount: verticalList.length,
          itemBuilder: (context, index) =>
              SizedBox(
                  width: width,
                  height: width * 1.35,
                  child: NotificationListener<ScrollNotification> (
                    onNotification: (notification) {
                      return true;
                    },
                    child: PageView.builder(
                        controller: _pageController,
                        itemCount: horizontalList.length,
                        itemBuilder: (context, index) =>
                            Text(horizontalList[index])
                    ),
                  ))
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {},
        child: const Icon(Icons.add),
      ),
    );
  }
}

위처럼 변경하고 실행해보면 더이상 에러가 발생하지 않는다.

NotificationListener로 감싸서  onNotification을 무조건 true로 던졌다. true를 쓴 이유는 notification_listener.dart에 있는 설명에 나와있다.

Return true to cancel the notification bubbling. Return false to allow the notification to continue to be dispatched to further ancestors.

번역해보면

"알림 버블링을 취소하려면 true를 반환합니다. 알림이 추가 조상에게 계속 전달되도록 하려면 false를 반환합니다." 라고 한다.

지금은 상위 위젯에 연계해서 이벤트 처리할 일이 없기에 무조건 true로 처리하지만 내부 위젯과 연계해서 상위 위젯에 어떠한 이벤트를 주고자 한다면 

onNotification: (notification) {
.
.
}

onNotification에 인자로 받은  notification은 실제로 scroll_notification.dart 객체이기 때문에 소스를 열어보면 얻을 수 있는 정보들이 존재함을 확인할 수 있다.

NotificationListener와 관련된 부분은 아직 이해가 부족하고 추측성 결론이 많아 후에 조금 더 공부해 보기로 하고 마무리 한다.

728x90
반응형

+ Recent posts