inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Flutter 앱 개발 기초

Flutter 이해하기

앱을 다운로드한 기기 OS에 맞는 스타일로 보여주는 방법

해결된 질문

308

채채

작성한 질문수 2

1

안녕하세요!

만약 하나의 앱을 안드로이드 기기에서 다운받았을 때는 안드로이드 스타일로 보여주고 iOS 기기에서 다운받았을 때는 iOS 스타일로 보여주고 싶은 경우 모든 UI를 Material Widget과 Cupertino Widget 양벌로 구현해야 하나요?

flutter

답변 1

1

DevStory

안녕하세요.

 

Flutter에는 다양한 플랫폼에 맞추어 자동으로 구현되는 일부 요소들이 있습니다. 해당 항목들에 대한 자세한 사항들은 공식 문서에서 확인하실 수 있습니다. 그 외에 기본적으로 플랫폼에 따라 다르게 구현되지 않는 요소들을 직접 구현하는 여러가지 방법이 있습니다.

1. Flutter의 Platform 클래스를 이용하여 모든 UI 요소를 플랫폼 별로 분리하여 구현한다.

import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

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

  @override
  Widget build(BuildContext context) {
    if (Platform.isAndroid) {
      /// Android
      return const AndroidHome();
    } else {
      /// iOS
      return const IOSHome();
    }
  }
}
  • UI를 2벌 만드는 공수가 들어가므로, 유지보수 공수도 2배로 들어갑니다.

  • Android와 iOS UI가 완전히 달라 공통 요소가 없는 경우 사용하는 것을 권장합니다.

     

 

2. 기본적으로 Material 기반으로 구현하고, iOS에서만 다르게 보이는 일부 위젯들만 부분적으로 분리하기

import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      /// 일부 요소만 플랫폼에 따라 분기
      body: Platform.isAndroid
          ? ElevatedButton(
              onPressed: () {},
              child: const Text("Android 버튼"),
            )
          : CupertinoButton(
              onPressed: () {},
              child: const Text("IOS 버튼"),
            ),
    );
  }
}
  • 공통 요소들은 한 번만 사용되므로 보다 적은 유지보수 비용으로 서비스를 운영할 수 있습니다.

     

     

상황, 기획, 가진 자원에 따라 구현 방법이 다를 것 같습니다. 제 3의 선택지로 2번으로 시작하고, 플랫폼별 구현이 완전히 다른 화면에 대해서만 1번으로 구현하시는 방법도 있을 듯 합니다.

 

감사합니다 :)

회차마다 있는 실습

1

38

2

user-not-found, wrong-password 코드가 더 이상 반환되지 않습니다

1

70

2

SharedPreferences prefs 초기화 시기 문제

1

84

2

index로 삭제하게 되면, index가 고정되어 있으니 문제가 발생하지 않나요?

1

62

2

API 사이트가 안되네요

1

77

2

잘 되다가 sharedPreferences부터 에러

1

63

2

기존의 프로젝트

1

63

2

I/O라는 창이 윈도우에서는 없어요

1

61

2

수강 기간 연장 부탁드립니다.

1

59

2

설정 질문

1

55

2

수강 기간 연장 신청 요청드립니다.

1

49

2

수강기간 연장 부탁드립니다.

1

54

2

수강기간 연장 부탁드립니다.

1

55

2

수강기간 연장 부탁 드립니다.^^

1

66

3

강의계획 문의

1

63

2

안녕하세요. 강의 연장 문의드립니다..

1

72

2

수강기간 연장 부탁드립니다!

1

78

2

2회차 StatefulWidget 예제 dartpad 코드와 영상에서의 코드가 다릅니다.

2

95

2

dartpad 에러

1

103

2

cmd에 flutter doctor 입력하면 바로 튕겨버립니다...

1

108

2

애뮬레이터 실행시 무한로딩

1

132

2

저는 강사님 처럼 화면이 안뜨는데 머테리얼 버전이 다른걸까요??

1

64

2

수강기간 연장 부탁드립니다!

1

58

2

수강기간 연장 부탁드립니다.

1

67

2