본문 바로가기

Flutter

(9)
GestureDetector에서 전체 행 클릭이 안될 때 (+ InkWell 효과 없애기) GestureDetector( onTap: () { ... }, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( '테스트', ), Icon(Icons.chevron_right), ], ), ), GestureDetector 위젯을 사용하면 다음과 같이 클릭 이벤트를 적용할 수 있다. 이 때, row의 text나 icon을 제외한 부분은 클릭할 수 없다. 전체 row를 클릭할 수 있는 첫번째 방법은 behavior: HitTestBehavior.translucent를 추가해주면 된다. GestureDetector( behavior: HitTestBehavior.translucent,// 추가 onTap: () ..
[Flutter] 이미지 크기 조절 fit 옵션 (BoxFit) 이미지 크기를 설정할 때 width, height 값을 주면 되고, BoxFit 클래스를 이용하면 설정한 크기 안에서 이미지 크기를 조절할 수 있다. Image.asset( 'test.png', width: 500, height: 250, fit: BoxFit.cover ), Boxfit.fill, Boxfit.contain, Boxfit.cover, Boxfit.fitWidth, Boxfit.fitHeight, Boxfit.none 각각의 차이를 비교해 보면 아래와 같다. 1. Boxfit.fill 설정한 크기에 맞게 비율이 변경되어 채워진다. 2. Boxfit.contain 설정한 크기 이내에서 비율이 변경되지 않고 가능한 한 크게 한다. 3. Boxfit.cover 비율이 변경되지 않고 설정한 크기..
[Flutter] Margin과 Padding의 차이 차이점 결론부터 말하면, Margin은 위젯 바깥쪽(외부여백)이고 Padding은 위젯 안쪽(내부여백)을 의미한다. Container( color: Colors.amber, width: double.infinity, margin: const EdgeInsets.only(top: 8), padding: const EdgeInsets.symmetric(vertical: 30), child: ... ) EdgeInsets란? 플러터에서는 margin, padding을 줄 때 css, js와 달리 EdgeInsets라는 클래스를 사용한다. EdgeInsets에서 margin과 padding을 주는 방법 EdgeInsets.all(5)// 전채 영역 EdgeInsets.only(top: 5)// 특정 영역 Edg..
[Flutter] No Material widget found 오류 오류 To introduce a Material widget, you can either directly include one, or use a widget that contains Material itself, such as a Card, Dialog, Drawer, or Scaffold. 해결 Material 위젯을 사용하기 위해서는 상위 트리에 Card, Dialog, Drawer 또는 Scaffold와 같은 Material 자체를 포함하는 위젯을 사용해야 한다. @override Widget build(BuildContext context) { return Scaffold(// 추가 body: SafeArea( ... ) ); }
[Flutter] Flutter 웹에서 URL의 # 제거 URL에 포함되어있는 #을 제거해보자. 1. pubspec.yaml에 flutter_web_plugins를 추가한다. dependencies: flutter_web_plugins: sdk: flutter 2. main.dart에 userPathUrlStrategy()를 추가한다. void main() { usePathUrlStrategy();// 추가 runApp(const MyApp()); } references https://docs.flutter.dev/development/ui/navigation/url-strategies
[Flutter] 위젯 사이에 간격 두기 (SizedBox vs Spacer) SizedBox 1. Row, Column 위젯에서 간격을 만들 때 사용한다. width, height 값을 지정해주는 지정된 크기의 위젯이다. Row( children: [ Text(), // Row에서는 height가 고정되고 Column에서는 width가 고정되므로 하나만 지정하면 된다. SizedBox( width: 20 ), Text(), ], ) 2. Container 등 child 위젯의 크기를 지정할 때 사용한다. SizedBox( width: 200, child: Container(), ) 참고) Container와 SizedBox의 차이 width와 height를 지정하지 않았을 경우, Container는 최대 크기로 확장되며 SizedBox는 child 크기에 맞게 적용된다. Spac..
[Flutter] SingleChildScrollView안에 ListView 스크롤 막기 SingleChildScrollView와 ListView를 같이 사용하면 스크롤 기능이 충돌해 오류가 발생한다. 이를 해결하기 위해서는 ListView의 스크롤을 비활성화해주면 된다. SingleChildScrollView( child: ListView( shrinkWrap: true, physics: NeverScrollableScrollPhysics(), ) ) - shrinkWrap: true - ListView가 전체 화면이 아닌 필요한 공간만 차지하도록 한다. - physics: NeverScrollableScrollPhysics() - ListView의 스크롤 기능을 비활성화한다. references https://api.flutter.dev/flutter/widgets/ListView-cla..
[Flutter] Flutter에 움직이는 이미지 넣기 (Lottie) Lottie란 Airbnb에서 개발한 오픈소스 모바일 라이브러리이다. JSON 기반의 애니메이션 파일로 gif 같은 다른 형식에 비해 가볍고 벡터 기반이라 확대 축소에 따른 해상도 저하가 없다. IOS, 안드로이드, 웹, React Native 같은 다양한 플랫폼을 지원한다. Flutter에 적용 1. https://lottiefiles.com/ 에서 원하는 이미지를 찾아서 저장한다. Discover > Free Ready-to-use Animations에서 무료 이미지를 찾을 수 있다. 2. 원하는 이미지를 JSON 파일로 다운로드한다. 3. 다운로드 받은 JSON 파일을 assets 디렉토리에 넣어준다. 4. pubspec.yaml에 assets 디렉토리 등록 flutter: assets: - ass..