패키지, 저장소 및 앱 카테고리 검색

패키지 상세v1.0.0+4

ready_view

Flutter로 개발할 때 네트워크나 데이터베이스에서 정보를 가져올 때 비동기 작업을 자주 사용해야 합니다. 이러한 경우 페이지에 로딩 위젯을 포함하고 로딩 완료 상태를 추적하며, 로딩이 완료되면 원래 뷰를 표시해야 합니다. 이러한 코드 시리즈를 포함하면 뷰 코드가 매우 복잡하고 혼란스러워질 수 있습니다. 따라서 ready_view 라이브러리는 비동기 작업을 처리하기 위한 간단하고 우아한 솔루션을 제공합니다.

AndroidiOSWebmacOSWindowsLinux
30일 다운로드
2
좋아요
4
Pub 점수
145

패키지 설치

flutter pub add ready_view

패키지 개요

공개 정보를 바탕으로 생성한 선택 가이드입니다.

ReadyView는 UI 개발에서 비동기 작업을 처리하는 것을 단순화하기 위해 설계된 Flutter/Dart 패키지입니다. 네트워크 또는 데이터베이스에서 데이터를 가져올 때 로딩 상태, 성공 결과 및 오류를 관리하는 깔끔하고 선언적인 방법을 제공합니다. ReadyView로 콘텐츠를 감싸면 로딩 인디케이터와 상태 추적을 위한 반복 코드를 피할 수 있어 더 깔끔하고 유지보수 용이한 위젯 트리가 만들어집니다. 이 패키지는 모든 주요 플랫폼을 지원하며 기존의 Flutter 프로젝트에 원활하게 통합됩니다.

사용 사례

  • API 응답 처리
  • 로딩 상태 표시
  • 오류 조건 관리
  • 비동기 UI 로직 간소화
  • 수동 상태 관리 대체

주요 기능

  • 선언적 로딩 상태
  • 내장 오류 처리
  • 최소한의 보일러플레이트
  • 크로스 플랫폼 지원
  • Future 기반 작업과의 간편한 통합

적합한 대상

  • 클린한 비동기 UI 패턴을 찾는 개발자
  • 자주 네트워크/데이터베이스 호출을 하는 프로젝트
  • 위젯 복잡성을 줄이려는 팀
  • Flutter 초보자가 비동기 워크플로우를 배우고 있습니다
  • 반응형 로딩 피드백이 필요한 앱

고려 사항

  • 선물에 대한 이해가 필요합니다
  • 비동기 작업 래퍼에 한정
  • 복잡한 상태 기계에 적합하지 않습니다
  • 재시도 메커니즘을 위한 추가 로직이 필요할 수 있습니다
  • 간단한 가져오기 및 표시 시나리오와 함께 가장 잘 사용됩니다

원본 README

연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.

pub package GitHub

ready_view

Motivation

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.

Installation

flutter pub add ready_view

Usage

1. Change Code
When Stateless Widget
// replace
StatelessWidget => ReadyStatelessWidget

build(BuildContext context) => buildWhenReady(BuildContext context)
Stateful Widget
// replace
extends State<.. => extends ReadyState<..

build(BuildContext context) => buildWhenReady(BuildContext context)
2. Add readyState(Optional)

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));
  };
}
3. Custom Loading Widget(Optional)

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,
    )));
  }

Example

Stateless Widget
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(),
  ));
}
Stateful Widget
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(),
  ));
}
Comparison with FutureBuilder

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.

카테고리

소스 저장소

이 패키지를 사용하는 프로젝트

아직 데이터가 없습니다.