ready_view
Flutter로 개발할 때 네트워크나 데이터베이스에서 정보를 가져올 때 비동기 작업을 자주 사용해야 합니다. 이러한 경우 페이지에 로딩 위젯을 포함하고 로딩 완료 상태를 추적하며, 로딩이 완료되면 원래 뷰를 표시해야 합니다. 이러한 코드 시리즈를 포함하면 뷰 코드가 매우 복잡하고 혼란스러워질 수 있습니다. 따라서 ready_view 라이브러리는 비동기 작업을 처리하기 위한 간단하고 우아한 솔루션을 제공합니다.
melodysdreamj/ready_view open-source repository details.
아래는 영문 원문 스냅샷입니다. 최신 내용은 GitHub에서 확인하세요.
When developing with Flutter, it is often necessary to use asynchronous operations when fetching information from networks or databases. In such cases, we need to include loading widgets on our pages, track the completion of loading, and display the original view once the loading is complete. Including this series of code can make the view code quite complex and messy.
Therefore, the ready_view library offers a simple and elegant solution for handling asynchronous actions.
flutter pub add ready_view
// replace
StatelessWidget => ReadyStatelessWidget
build(BuildContext context) => buildWhenReady(BuildContext context)
// replace
extends State<.. => extends ReadyState<..
build(BuildContext context) => buildWhenReady(BuildContext context)
When asynchronous actions are required, you can override the readyState() to perform the necessary tasks.
// handle async operation here if needed
@override
Function? readyState(BuildContext context) {
return () async {
// your async code here
await Future.delayed(const Duration(seconds: 2));
};
}
You can customize the loading widget by overriding the loadingWidget() if you want.
// custom loading widget if needed
@override
Widget loadingWidget() {
return Scaffold(
body: Center(
child: Container(
width: 100,
height: 100,
color: Colors.red,
)));
}
import 'package:flutter/material.dart';
import 'package:ready_view/ready_view.dart';
class StatelessExample extends ReadyStatelessWidget {
const StatelessExample({super.key});
// handle async operation here if needed
@override
Function? readyState(BuildContext context) {
return () async {
await Future.delayed(const Duration(seconds: 2));
};
}
// custom loading widget if needed
// @override
// Widget loadingWidget() {
// return Scaffold(
// body: Center(
// child: Container(
// width: 100,
// height: 100,
// color: Colors.red,
// )));
// }
@override
Widget buildWhenReady(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('StatelessExample'),
),
body: const Center(
child: Text('Content is ready!'),
),
);
}
}
void main() {
runApp(const MaterialApp(
home: StatelessExample(),
));
}
import 'package:flutter/material.dart';
import 'package:ready_view/ready_view.dart';
class StatefulExample extends StatefulWidget {
const StatefulExample({super.key});
@override
ReadyState<StatefulExample> createState() => _StatefulExampleState();
}
class _StatefulExampleState extends ReadyState<StatefulExample> {
// handle async operation here if needed
@override
Function? readyState(BuildContext context) {
return () async {
await Future.delayed(const Duration(seconds: 2));
};
}
// custom loading widget if needed
// @override
// Widget loadingWidget() {
// return Scaffold(
// body: Center(
// child: Container(
// width: 100,
// height: 100,
// color: Colors.red,
// )));
// }
@override
Widget buildWhenReady(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('StatefulExample'),
),
body: const Center(
child: Text('Content is ready!'),
),
);
}
}
void main() {
runApp(const MaterialApp(
home: StatefulExample(),
));
}
Although similar to FutureBuilder, using FutureBuilder asynchronously when the view is first created requires setting up related state, including calling asynchronous functions in initState, and placing the FutureBuilder in the build function along with a separate loading widget. In contrast, ready_view allows you to keep your existing code as it is, while providing a cleaner and more intuitive way to handle asynchronous actions by separately calling the readyState and loadingWidget functions when needed.
사용 목적에 따라 검색하고 개발 활동을 비교한 뒤 원본 저장소에서 요구 사항을 확인하세요.
“A repository is the most basic element of GitHub.”
GitHub Docs — About repositories ↗