관리 메뉴

막내의 막무가내 프로그래밍 & 일상

[Flutter] Hot Reload 시 null error 주의사항 본문

플러터(Flutter) & Dart

[Flutter] Hot Reload 시 null error 주의사항

막무가내막내 2022. 4. 12. 21:05
728x90

 

 

 

 

[에러내용]

A non-null String must be provided to a Text widget.
'package:flutter/src/widgets/text.dart':
Failed assertion: line 370 pos 10: 'data != null'

 

말그대로 null 에러가 났다. 근데 null 에러가 날 수가 없는 상황이고 앞에 null체크를 해줘도 같은 에러가 났다.

이걸로 삽질을 한거에 대해 포스팅을 한다. (별거아니지만 헿)

 

import 'package:bmi_calculator/components/bottom_button.dart';
import 'package:flutter/material.dart';

import '../components/reusable_card.dart';
import '../constants.dart';

class ResultsPage extends StatelessWidget {
  final String bmiResult;
  final String resultText;
  final String interpretation;

  ResultsPage(
      {@required this.bmiResult,
      @required this.resultText,
      @required this.interpretation});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('BMI CALCULATOR'),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        crossAxisAlignment: CrossAxisAlignment.stretch,
        children: <Widget>[
          Expanded(
              child: Container(
            padding: EdgeInsets.all(15.0),
            alignment: Alignment.bottomLeft,
            child: Text(
              'Your Result',
              style: kTitleTextStyle,
            ),
          )),
          Expanded(
            flex: 5,
            child: ReusableCard(
              colour: kActiveCardColour,
              cardChild: Column(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                crossAxisAlignment: CrossAxisAlignment.center,
                children: <Widget>[
                  Text(
                    resultText,
                    style: kResultTextStyle,
                  ),
                  Text(
                    bmiResult,
                    style: kBMITextStyle,
                  ),
                  Text(
                    interpretation,
                    style: kBodyTextStyle,
                    textAlign: TextAlign.center,
                  )
                ],
              ),
            ),
          ),
          BottomButton(
              onTap: () {
                Navigator.pop(context);
              },
              buttonTitle: 'RE-CALCULATE')
        ],
      ),
    );
  }
}

 

 

 

 

BottomButton(
  buttonTitle: 'CALCULATE',
  onTap: () {
    CalculatorBrain calc = CalculatorBrain(height: height, weight: weight);
    Navigator.push(
        context,
        MaterialPageRoute(
            builder: (context) => ResultsPage(
                  bmiResult: calc.calculateBMI(),
                  resultText: calc.getResult(),
                  interpretation: calc.getInterpretation(),
                )));
  },

원인은 이 ResutsPage 위젯 이전에 InputPage에서 생성자를 위와 같이 넘겨주고 

 

 

class ResultsPage extends StatelessWidget {
  final String bmiResult;
  final String resultText;
  final String interpretation;

  ResultsPage(
      {@required this.bmiResult,
      @required this.resultText,
      @required this.interpretation});
children: <Widget>[
  Text(
    resultText,
    style: kResultTextStyle,
  ),
  Text(
    bmiResult,
    style: kBMITextStyle,
  ),
  Text(
    interpretation,
    style: kBodyTextStyle,
    textAlign: TextAlign.center,
  )

ResultPage는 매개변수로 받은 값을 Text에 세팅해주는 로직을 추가로 구현하고 HotReload를 돌렸는데 

ResultPage에서 HotReload 가 되어서 생성자로 값을 못받은 상태이므로 Text에 세팅할때 null 에러가 나는게 원인이었다.

 

HotReload 는 플러터에서 매우 좋은 기능이지만 단순 화면갱신말고 로직이 바뀔때는 재컴파일 시작을 해주는 습관도 필요할 것 같다.

728x90
Comments