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
120
pub points
4%
popularity

Publisher

verified publisherbesoft.vn

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

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (LICENSE)

Dependencies

flutter

More

Packages that depend on remote_data_provider