입문

실생활 앱 (계산기)

수식란과 답란을 분리하고 사칙연산, 괄호, 거듭제곱, 제곱근을 처리하는 계산기 앱을 만듭니다.

동작

실생활 앱 (계산기) 실행 화면

숫자와 연산 기호를 누르면 수식란에 그대로 이어서 표시됩니다. = 버튼을 누르면 수식은 유지하고 답란에 계산 결과만 표시합니다. 사칙연산, 괄호, 거듭제곱, 제곱근 버튼을 함께 제공합니다.

예제 코드

계산기

계산기 입문
수식란0
답란0

예제 코드 기능별 설명

코드를 나누어 읽기

import

dart:math는 제곱근 같은 수학 연산을 확장할 때 사용합니다. material.dart는 TextField, 버튼, GridView, 레이아웃 위젯을 만들기 위해 필요합니다.

import 'dart:math';
import 'package:flutter/material.dart';

클래스 구조

CalculatorApp은 StatefulWidget입니다. 수식과 답이 버튼 입력에 따라 계속 바뀌므로 State 클래스에서 expression과 answer를 관리합니다.

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

버튼 목록

keys는 화면에 표시할 계산기 버튼의 순서입니다. 버튼 배열을 하나로 두면 GridView에서 같은 방식으로 반복 렌더링할 수 있습니다.

final keys = ['7', '8', '9', '+', '4', '5', '6', '-', ...];

수식란과 답란 분리

연산 기호를 누를 때 숫자가 0으로 바뀌던 문제를 없애기 위해 입력 중인 expression과 계산 결과 answer를 따로 둡니다.

String expression = '';
String answer = '0';

연산 버튼 입력

숫자와 기호는 모두 수식란에 이어 붙입니다. =을 눌렀을 때만 계산해서 답란을 갱신합니다.

if (key == '=') {
  answer = calculate(expression);
} else {
  expression += key;
}

연산 버튼 구분

기본 사칙연산에 곱셈, 나눗셈, 괄호, 거듭제곱, 제곱근 버튼을 추가했습니다. C와 =은 실수로 누르면 영향이 큰 버튼이라 결과 화면에서 다른 색으로 구분했습니다.

final keys = ['7', '8', '9', '+', '4', '5', '6', '-', '1', '2', '3', '×', 'C', '0', '=', '÷', '(', ')', '^', '√'];