๐ฆFlutter - ๋ค์ ๋จ๊ณ ํ์ - ์ค๋ฅ ์ฒ๋ฆฌ
If you are using a dynamic class for routing in Flutter, you may be concerned about errors. How about a static error page (404) when routing fails so the user knows what's going on?!
์ด๊ฒ์ ๋ด ์๋ฆฌ์ฆ์ 4๋ถ ์ค 3๋ถ์ ๋๋ค: ๐ฆFlutter - ๋ค์ ๋ ๋ฒจ ํ์.
์์ง ์ฝ์ง ์์ผ์ จ๋ค๋ฉด ์ฝ์ด๋ณด์๊ธธ ๊ถํฉ๋๋ค.
์ฝํ ์ธ
์ค๋ฅ ์ฒ๋ฆฌ
์ฑ ๋ด์์ ํ์ํ๋ ๋์ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ๊ธฐ ์ํด ์ง๋ ๊ฒ์๋ฌผ์ ์ค๋ฅ ์ฟผ๋ฆฌ๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ์ด์ ์ฌ์ฉ์๋ฅผ ์ค๋ฅ ํ์ด์ง๋ก ๋ฆฌ๋๋ ์ ํ๋ ค๋ฉด ๊ฐ๋จํ 2๋จ๊ณ๊ฐ ํ์ํฉ๋๋ค.
1. ์ค๋ฅ ํ์ด์ง ๋ง๋ค๊ธฐ
์ค๋ฅ ํ์ด์ง๋ฅผ ํ์ํ๋ ค๋ฉด ์ค๋ฅ ํ์ด์ง๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ์ด ์์ ์ ๋ณ๋์ ํด๋์ค์์ ์ํํ๊ฑฐ๋ ์ด์ ์ ๋ง๋ ํด๋์ค
RouteGenerator
์์ ์ง์ ์ํํ ์ ์์ต๋๋ค. ์ค๋ฅ ํ์ด์ง๊ฐ ๋จ์ํ๋ค๋ฉด ๋ง์ง๋ง ์ต์
์ ๊ถ์ฅํฉ๋๋ค.์ค๋ฅ ํ์ด์ง์ ๊ฒฝ์ฐ ์ด์ ๊ฐ์ฒด
_errorRoute
๋ฅผ ๋ฐํํ๋ ๋ด๋ถ ์ ์ฉ ํจ์Route<dynamic>
๋ฅผ ๋ง๋ญ๋๋ค. ๋ฐํ๋ ํ์ด์ง์์ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ค์ ํ๋ ์ค์บํด๋ ๊ฐ์ฒด๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ์ด๋ ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค. static Route<dynamic> _errorRoute() {
return MaterialPageRoute(builder: (_) {
return Scaffold(
appBar: AppBar(
title: Text('Error'),
),
body: Center(
child: Text('ERROR'),
),
);
});
}
2. ์ค๋ฅ ํ์ด์ง ๋งํฌ
์ด์ ๋ชจ๋ ์ค๋ฅ ์ฌ๋ก์์ ํ์ด์ง๋ก ๋ฆฌ๋๋ ์ ํ๋ ค๋ฉด ๋ชจ๋ ์ค๋ฅ์์ ํจ์
_errorRoute()
๋ฅผ ๋ฐํํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ด์ ์ ๋ง๋ switch-case ๋ธ๋ก์ ๋ค์๊ณผ ๊ฐ์ด ํ์ฅ๋ฉ๋๋ค.class RouteGenerator {
static Route<dynamic> generateRoute(RouteSettings settings) {
final args = settings.arguments;
switch (settings.name) {
case '/page2':
if (args is int) {
return MaterialPageRoute(
builder: (_) =>
IntroductionView(arguments: args));
}
return _errorRoute();
default:
return _errorRoute();
}
}
์ค๋ฅ ํ์ด์ง ๊ฐ๋ณํ
๋ฌผ๋ก ์ค๋ฅ ํ์ด์ง์์ ์ฌ์ฉ์์๊ฒ ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ค๋ฅ์ ์์ธ์ ์ ๋ฌํ์ฌ ์ค๋ฅ๋ฅผ ๋ณด๋ค ๊ตฌ์ฒด์ ์ผ๋ก ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค.
static Route<dynamic> _errorRoute({String message}) {
return MaterialPageRoute(builder: (_) {
return Scaffold(
appBar: AppBar(
title: Text('Error'),
),
body: Center(
child: Text('ERROR: ' + message),
),
);
});
}
&&
default:
return _errorRoute(message: 'wrong routing name');
์ค๋ฅ ํ์ด์ง๋ก ์ด๋ํ ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ์์ ์์์ ๊ฐ์ด ์ ๋ฌ๋ ์ค๋ฅ๋ฅผ ์ ํ ์ฌํญ์ผ๋ก ์ง์ ํด์ผ ํฉ๋๋ค. ์ผ๋ง๋ ์์ด๋ฌ๋ํ ์ผ์ด๊ฒ ์ต๋๊น! XD
๋ค์ ๊ฒ์๋ฌผ์ ๋์น์ง ์๋๋ก
Github ๋๋ Lucianojung.de์์ ๋ด ์ต์ ํ๋ก์ ํธ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
๋น์ ์ ๋ํ ์ข์ํ ์ ์์ต๋๋ค:
๐ฆFlutter - ์ ์ญ ๋ณ์ ๊ด๋ฆฌ
๋ฃจ์น์๋ ธ ์ ใป 2์ 10์ผ ใป 3 min read
๐ฆFlutter - ๋ค์ ๋จ๊ณ ํ์ - ๊ธฐ์ด
์ ๋ฃจ์น์๋ ธ ใป 4์ 4์ผ ใป 3 min read
๐ฆFlutter - ์ฑ๊ธํค ํจํด
์ ๋ฃจ์น์๋ ธ ใป 3์ 22์ผ ใป 2 min read
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ฆFlutter - ๋ค์ ๋จ๊ณ ํ์ - ์ค๋ฅ ์ฒ๋ฆฌ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/lucianojung/flutter-next-level-routing-error-handling-3nekํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค