remote_data_provider 2.4.3 copy "remote_data_provider: ^2.4.3" to clipboard
remote_data_provider: ^2.4.3 copied to clipboard

Help implementing providers easier with predefined abstract classes, special is for working with remote data.

example/README.md

Define a model #

Assume we have a Post model as following:

class Post {
    static Future<List<Post>> getAll();
    static Future<Post> getDetail(int id);
    static Future<Post> create(Post newPost);
    static Future<Post> update(Post post);
    static Future<bool> delete(int id);
}

Work with the list of posts #

Step 1. Define a provider

class PostListProvider extends DataListProvider<Post> {@override

  PostListProvider() : super(isInfinity: true);

  @override
  Future<List<Post>> onFetch() {
    return Post.getAll(
      page: page,
      pageSize: pageSize,
      search: search,
      sortOptions: sortOptions,
    );
  }

  @override
  Future<String> onUpdate(String newData) async {
    await Future.delayed(Duration(milliseconds: 100));
    return newData;
  }

  @override
  Future<Post> onCreate(Post newItem) {
    return Post.create(newItem);
  }

  @override
  Future<bool> onDelete(Post item) async {
    return Post.delete(item.id!);
  }
}

Step 2. In the parent widget

ChangeNotifierProvider(
  create: (context) => PostListProvider(),
  child: YourChildWidget()
)

Step 3. In the build function of the child widget

final postList = Provider.of<PostListProvider>(context);

bool isLoading = postList.isLoading;
bool isError = postList.error;
bool isEmpty = postList.isEmpty;
bool isAdding = postList.isAdding;
bool isRemoving = postList.isRemoving;

List<Post> data = postList.data;

Future<void> refresh = postList.refresh;
Future<void> add = postList.add;
Future<void> removeAt = postList.removeAt;

Work with a single post #

Step 1. Define your provider

class PostDetailProvider extends BasicDataProvider<Post> {
  final int _id;

  PostDetailProvider({required int id})
      : _id = id,
        super();

  @override
  Future<Post> onFetch() async {
    return Post.getDetail(_id);
  }

  @override
  Future<Post> onUpdate(Post newData) async {
    return Post.update(newData);
  }

  @override
  Future<bool> onDelete() {
    return Post.delete(_id);
  }

}

Step 2. In the parent widget

ChangeNotifierProvider(
  create: (context) => PostDetailProvider(),
  child: YourChildWidget()
)

Step 3. In the build function of the child widget

final postDetail = Provider.of<PostDetailProvider>(context);

bool isLoading = postDetail.isLoading;
bool isError = postDetail.error;
bool isEmpty = postDetail.isEmpty;

Post data = postDetail.data;

Future<void> refresh = postDetail.refresh;
Future<void> update = postDetail.update;
10
likes
140
points
83
downloads

Documentation

API reference

Publisher

verified publisherbesoft.vn

Weekly Downloads

Help implementing providers easier with predefined abstract classes, special is for working with remote data.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

flutter

More

Packages that depend on remote_data_provider