์ด๋ฒ์ FutureBuilder๋ฅผ ๊ตฌํํ๋ฉด์ ํ ๊ฐ์ง ๋ฌธ์ ๋ฅผ ๋ฐ์ํ๋ค.
snapshot.hasData ์ snapshot.hasError๋ฅผ ๊ตฌํํ๋๋ฐ
Future ํจ์์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด hasError๋ก ๋๊ฒจ ์ค๋ฅ ์ํ๋ฅผ ํ์ํ๋๋ก ํ๋ ค๊ณ ํ๋ค.
๊ทธ๋ฐ๋ฐ hasData๋ ์ ๋ถ๋ฌ์๋ hasError๋ ์๋์ด ์ ๋๋ ๊ฒ์ด๋ค.
์ฐพ์๋ณด๋ StackOverflow์์ ๋๋ ๋น์ทํ ์ฌ๋ก๋ฅผ ๋ฐ๊ฒฌํ๋ค.
์๋ ์ฝ๋๊ฐ ๋์ ๊ฐ์ ์ผ์ด์ค์ด๋ค.
try {
var response = await http.get(url);
// Success
if (response.statusCode == 200) {
[...]
}
// Failure
else {
return Future.error("Error");
}
} catch (e) {
return Future.error("Error");
}
futureBuilder ๋ด๋ถ ์ฝ๋๋ ์ด๋ ๋ค.
FutureBuilder(
future: new Future(() => {Singleton().request()}),
builder: (context, snapshot) {
if (snapshot.hasData) {
// snapshot has ALWAYS data even if I return error
} else if(snapshot.hasError) {
// never reach this statement
}
});
๋ต๋ณ์ ํ์ธํด๋ณด๋
snapshot์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๋ฉด snapshot์ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๊ณ hasError์ ๋๋ฌํ์ง๊ฐ ์๋๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ค๋ ์ท์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋์ง ๋จผ์ ํ์ธ์ ํด์ผ ํ๋ค๊ณ ํ๋ค.
์๋ ์ฝ๋๊ฐ ์ ์์ด๋ค.
FutureBuilder(
future: new Future(() => {Singleton().request()}),
builder: (context, snapshot) {
if (snapshot.hasError) {
// do something
} else if(snapshot.hasData) {
// do something
}
});
hasError์ hasData๋ฅผ ์ฒดํฌํ๋ ์์๋ง ๋ค ๋ฐ๋์์ ๋ฟ์ด๋ค.
Future๋ ๋ฐ์ดํฐ ๋ก๋๊ฐ ์๋ฃ๋๋ฉด ์์์ ์ฌ๊ท๋ฅผ ํ์ง ์์ผ๋ ์ฃผ์ํ๋๋ก ํ์.