반응형

들어가며

LayoutBuilder 위젯이란?

  • LayoutBuilder 위젯은 부모 위젯의 크기에 따라 자식 위젯의 배치를 동적으로 조절할 때 사용한다.

예제

main.dart

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Responsive Demo',
      home: MyPage(),
    );
  }
}

class MyPage extends StatefulWidget {
  const MyPage({super.key});

  @override
  State<MyPage> createState() => _MyPageState();
}

class _MyPageState extends State<MyPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Responsive Demo'),
      ),
      body: LayoutBuilder(
        builder: (context, constraints) {
          if (constraints.maxWidth < 600) {
            return const MobileBody();
          } else {
            return const DesktopBody();
          }
        },
      ),
    );
  }
}

class MobileBody extends StatelessWidget {
  const MobileBody({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Mobile'),
      ),
      backgroundColor: Colors.deepPurple,
    );
  }
}

class DesktopBody extends StatelessWidget {
  const DesktopBody({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Desktop'),
      ),
      backgroundColor: Colors.deepPurple[200],
    );
  }
}

화면

가로 사이즈 600px 미만 가로 사이즈 600px 이상

참고

반응형

'Development > Flutter' 카테고리의 다른 글

[Flutter] TextField  (0) 2024.02.23
[Flutter] StatefulWidget  (0) 2024.02.23
[Flutter] Dialog  (0) 2024.02.21
[Flutter] Drawer  (0) 2024.02.21
[Flutter] Fluttertoast  (0) 2024.02.21

+ Recent posts