
2026.02.02 (월)
GoRouter Path Parameter 데이터 타입
Troble Shooting
GoRouter 를 사용하여 상세 페이지(DetailPage)로 이동하는 라우팅을 설정하던 중, URL 파라미터인 id값을 int.parse()를 이용해 숫자로 변환하려고 시도했다. 하지만 시뮬레이터 화면에 FormatException: Invalid radix-10 number라는 레드 스크린(에러 화면)이 출력되었다..

이때까지만 해도 git graph를 확인 시에 바꾼 것이 GoRouter 기능 추가한 것 밖에 없는데 id 값을 만져서 일어난 문제 같아서 id 값을 바꾼 곳을 유심히 살펴보았다. 🤔
그리고 에러를 확인해보니, state.pathParameters['id']를 통해 들어온 값이 "nHy0mO..."와 같은 문자열 String 형태였다.
int.parse() 함수는 숫자로 바꿀 수 없는 문자(알파벳 등)가 포함되어 있으면 즉시 에러를 발생시키며 앱의 흐름을 끊겨버린다.
그리고 의문,,🤔 처음에는 에러가 발생했을 때 설정한 errorBuilder의 ErrorPage
가 보이지 않고 시스템 에러 화면이 떴댜.?
자세히 보니, 이유는 라우팅 자체의 실패가 아니라, builder 내부의 로직(Dart 코드)에서 예외가 발생했기 때문인 것으로 확인되었다.

혹시 몰라서 이것을 확인하기 위해 코드를 수정해보았다.
final id = int.tryParse(state.pathParameters['id'] ?? '');
if (id == null) {
return ErrorPage();
}
int.tryParse()의 역할: 문자열을 숫자로 바꿀 수 없더라도 에러를 내지 않고 null을 반환
결과: 숫자가 아닌 값이 들어왔을 때 id가 null이 되어, 명시적으로 ErrorPage()를 리턴하게 되는 것을 확인.!
이 과정을 통해 "현재 들어오는 데이터가 숫자가 아니어서 발생하는 문제"임을 정확히 확신할 수 있었다
id 값을 굳이 int로 변환할 필요가 있는지 다시 검토해봤다 ,,🤔
DetailPage에서 해당 id를 단순히 식별자나 텍스트로만 사용한다면, 굳이 위험하게 형변환(Parsing)을 할 필요가 없는 것 같아서 String 타입으로 변환 받기로 하고 다시 수정했더니 에러 해결!

[최종 수정 코드]
GoRoute(
path: 'detail/:id',
builder: (context, state) {
// 문자열 그대로 전달하여 에러 발생 가능성을 원천 차단
final id = state.pathParameters['id'] ?? '';
return DetailPage(todoId: id);
},
),
🌟 해결 로직:pathParameters에서 받은 데이터를 그대로 String타입으로 사용.
🌟 결과: 복잡한 문자열로 된 ID 값도 정상적으로 전달되어 상세 페이지가 에러 없이 출력 확인.
데이터 타입의 엄격함
Dart는 정적 타입 언어이므로 String을 int로 바꿀 때는 항상 데이터의 형식을 확인하자
parse 보다는 tryParse
입력값이 확실한 숫자가 아니라면, 앱이 멈추는 것을 방지하기 위해 tryParse를 사용하는 것이 안전하다!
불필요한 형변환 지양
전달받은 데이터를 그대로 사용할 수 있다면, 가급적 원래의 타입(String)을 유지하는 것이 코드의 안정성을 높인다.