FutureBuilder로 비동기 콜백을 해결하세요!
A Future is used to represent a potential value, or error, that will be available at some time in the future.
Future의 수신자는 사용 가능한 값이나 오류를 처리하는 콜백을 등록할 수 있습니다.
FutureBuilder가 필요한 이유!
build
메서드에서 위젯을 반환하려고 하지만 위젯에 필요한 데이터가 async
함수에서 온다고 가정합니다.
class MyWidget extends StatelessWidget {
@override
Widget build(context) {
yourAsyncFetch().then((data) {
return ...yourStuff(with the data);
});
}
}
가져오기가 HTTP 호출, SQLite에 대한 호출 또는 Future
를 반환하는 일반적인 호출일 수 있는 경우 이 접근 방식은 실제로 작동하지 않습니다.
위젯build
메서드는 동기식이며 데이터를 가져오는 동안 기다리지 않기 때문입니다.
여기에서 FutureBuilder( FutureBuilder<T>
)가 등장합니다.
수정
AFutureBuilder
는 Future와 빌더(위젯의 빌드 메서드에 의해 호출되는 대리자)를 인수로 사용합니다. 빌더는 즉시 호출되며 미래가 데이터 또는 오류로 해결될 때 다시 호출됩니다.
Future
를 구성할 때 build
중에 AFutureBuilder
를 생성하면 안 됩니다. future가 FutureBuilder
와 동시에 생성되면 FutureBuilder
의 부모가 다시 빌드될 때마다 비동기 작업이 다시 시작됩니다.
AsyncSnapshot<T>
는 단순히 해당 데이터/오류 상태를 나타냅니다.
Future<String> yourAsyncFetch() => Future.delayed(Duration(seconds: 3), () => "Text coming after 3 seconds");
class MyWidget extends StatelessWidget {
@override
Widget build(context) {
return FutureBuilder<String>(
future: yourAsyncFetch(),
builder: (context, AsyncSnapshot<String> snapshot) {
if (snapshot.hasData) {
return Text(snapshot.data); // Display the data from yourAsyncFetch() function after 3 seconds
} else {
return CircularProgressIndicator(); // Display a Circular Progress Indicator if the data is not fetched
}
}
);
}
}
짜잔! 문제 해결됨.
성능에 미치는 영향
FutureBuilder는 StatefulWidget
가 _snapshot인 state
일 뿐입니다. 초기 상태는 _snapshot = AsyncSnapshot<T>.withData(ConnectionState.none, widget.initialData);
입니다.
그것은 우리가 보내는 미래를 구독하고 그것을 기반으로 상태를 업데이트합니다.
widget.future.then<void>((T data) {
if (_activeCallbackIdentity == callbackIdentity) {
setState(() {
_snapshot = AsyncSnapshot<T>.withData(ConnectionState.done, data);
});
}
}, onError: (Object error) {
if (_activeCallbackIdentity == callbackIdentity) {
setState(() {
_snapshot = AsyncSnapshot<T>.withError(ConnectionState.done, error);
});
}
});
따라서 FutureBuilder
는 우리가 일반적으로 수행하는 래퍼일 뿐이므로 성능에 영향을 미치지 않습니다.
결론
이상입니다 여러분 👨🏫 끝까지 읽어주셔서 감사합니다. 이것이 FutureBuilder와 그 실제 응용 프로그램에 대한 더 나은 아이디어를 얻는 데 도움이 되었기를 바랍니다. 제가 놓친 것이 있으면 댓글로 알려주시면 브레인스토밍 세션을 가질 수 있습니다! 👨🏻💻
Flutter 개발을 배우고 탐구하려는 사람들을 위한 그룹입니다. 우리는 초보자와 프로 다트 영예를 모두 초대합니다. our Discord에 가입하고 우리와 함께 즐기십시오.
FutureBuilder에 대한 도움이 필요하다고 생각되는 사람과 이러한 리소스를 공유하는 것을 잊지 마십시오. 피스 아웃. ✌🏼
Reference
이 문제에 관하여(FutureBuilder로 비동기 콜백을 해결하세요!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/sayanide/solve-async-callbacks-with-futurebuilder-4djc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
class MyWidget extends StatelessWidget {
@override
Widget build(context) {
yourAsyncFetch().then((data) {
return ...yourStuff(with the data);
});
}
}
A
FutureBuilder
는 Future와 빌더(위젯의 빌드 메서드에 의해 호출되는 대리자)를 인수로 사용합니다. 빌더는 즉시 호출되며 미래가 데이터 또는 오류로 해결될 때 다시 호출됩니다.Future
를 구성할 때 build
중에 AFutureBuilder
를 생성하면 안 됩니다. future가 FutureBuilder
와 동시에 생성되면 FutureBuilder
의 부모가 다시 빌드될 때마다 비동기 작업이 다시 시작됩니다.AsyncSnapshot<T>
는 단순히 해당 데이터/오류 상태를 나타냅니다.Future<String> yourAsyncFetch() => Future.delayed(Duration(seconds: 3), () => "Text coming after 3 seconds");
class MyWidget extends StatelessWidget {
@override
Widget build(context) {
return FutureBuilder<String>(
future: yourAsyncFetch(),
builder: (context, AsyncSnapshot<String> snapshot) {
if (snapshot.hasData) {
return Text(snapshot.data); // Display the data from yourAsyncFetch() function after 3 seconds
} else {
return CircularProgressIndicator(); // Display a Circular Progress Indicator if the data is not fetched
}
}
);
}
}
짜잔! 문제 해결됨.
성능에 미치는 영향
FutureBuilder는 StatefulWidget
가 _snapshot인 state
일 뿐입니다. 초기 상태는 _snapshot = AsyncSnapshot<T>.withData(ConnectionState.none, widget.initialData);
입니다.
그것은 우리가 보내는 미래를 구독하고 그것을 기반으로 상태를 업데이트합니다.
widget.future.then<void>((T data) {
if (_activeCallbackIdentity == callbackIdentity) {
setState(() {
_snapshot = AsyncSnapshot<T>.withData(ConnectionState.done, data);
});
}
}, onError: (Object error) {
if (_activeCallbackIdentity == callbackIdentity) {
setState(() {
_snapshot = AsyncSnapshot<T>.withError(ConnectionState.done, error);
});
}
});
따라서 FutureBuilder
는 우리가 일반적으로 수행하는 래퍼일 뿐이므로 성능에 영향을 미치지 않습니다.
결론
이상입니다 여러분 👨🏫 끝까지 읽어주셔서 감사합니다. 이것이 FutureBuilder와 그 실제 응용 프로그램에 대한 더 나은 아이디어를 얻는 데 도움이 되었기를 바랍니다. 제가 놓친 것이 있으면 댓글로 알려주시면 브레인스토밍 세션을 가질 수 있습니다! 👨🏻💻
Flutter 개발을 배우고 탐구하려는 사람들을 위한 그룹입니다. 우리는 초보자와 프로 다트 영예를 모두 초대합니다. our Discord에 가입하고 우리와 함께 즐기십시오.
FutureBuilder에 대한 도움이 필요하다고 생각되는 사람과 이러한 리소스를 공유하는 것을 잊지 마십시오. 피스 아웃. ✌🏼
Reference
이 문제에 관하여(FutureBuilder로 비동기 콜백을 해결하세요!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/sayanide/solve-async-callbacks-with-futurebuilder-4djc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
widget.future.then<void>((T data) {
if (_activeCallbackIdentity == callbackIdentity) {
setState(() {
_snapshot = AsyncSnapshot<T>.withData(ConnectionState.done, data);
});
}
}, onError: (Object error) {
if (_activeCallbackIdentity == callbackIdentity) {
setState(() {
_snapshot = AsyncSnapshot<T>.withError(ConnectionState.done, error);
});
}
});
이상입니다 여러분 👨🏫 끝까지 읽어주셔서 감사합니다. 이것이 FutureBuilder와 그 실제 응용 프로그램에 대한 더 나은 아이디어를 얻는 데 도움이 되었기를 바랍니다. 제가 놓친 것이 있으면 댓글로 알려주시면 브레인스토밍 세션을 가질 수 있습니다! 👨🏻💻
Flutter 개발을 배우고 탐구하려는 사람들을 위한 그룹입니다. 우리는 초보자와 프로 다트 영예를 모두 초대합니다. our Discord에 가입하고 우리와 함께 즐기십시오.
FutureBuilder에 대한 도움이 필요하다고 생각되는 사람과 이러한 리소스를 공유하는 것을 잊지 마십시오. 피스 아웃. ✌🏼
Reference
이 문제에 관하여(FutureBuilder로 비동기 콜백을 해결하세요!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sayanide/solve-async-callbacks-with-futurebuilder-4djc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)