flutter_data 0.5.1 copy "flutter_data: ^0.5.1" to clipboard
flutter_data: ^0.5.1 copied to clipboard

outdated

The seamless way to work with persistent data models in Flutter. Inspired by Ember Data and ActiveRecord.

Flutter Data

tests codecov pub-web.flutter-io.cn license

Flutter Data is the seamless way to work with persistent data models in Flutter.

Inspired by Ember Data and ActiveRecord.

Features #

  • Auto-generated repositories (REST clients) for all models 🚀
    • CRUD and custom actions on remote API
    • StateNotifier, Future and Stream APIs
  • Built for offline-first 🔌
    • uses Hive at its core for caching & local storage
    • included read/write retry offline adapter
  • Effortless setup
    • Automatically pre-configured for provider, riverpod and get_it
    • Convention over configuration powered by Dart mixins
  • Exceptional relationship support ⚡️
    • Automatically synchronized, traversable relationship graph
    • Reactive relationships
  • Clean, intuitive API and minimal boilerplate 💙
    • Truly configurable and composable
    • Scales very well (both up and down)

Check out the Documentation or the Tutorial 📚 where we build a CRUD app from the ground app in record time.

Getting started #

See the quickstart guide in the docs.

👩🏾‍💻 Usage #

For a given User model annotated with @DataRepository...

@JsonSerializable()
@DataRepository([MyJSONServerAdapter])
class User with DataModel<User> {
  @override
  final int id;
  final String name;
  User({this.id, this.name});
}

mixin MyJSONServerAdapter on RemoteAdapter<User> {
  @override
  String get baseUrl => "https://my-json-server.typicode.com/flutterdata/demo/";
}
  • id can be of int, String, etc
  • User.fromJson and toJson are not required!

After a code-gen build, Flutter Data will generate a Repository<User>:

// obtain it via Provider
final repository = context.watch<Repository<User>>();

return DataStateBuilder<List<User>>(
  notifier: () => repository.watchAll();
  builder: (context, state, notifier, _) {
    if (state.isLoading) {
      return CircularProgressIndicator();
    }
    // state.model is a list of 10 user items
    return ListView.builder(
      itemBuilder: (context, i) {
        return UserTile(state.model[i]);
      },
    );
  }
}

repository.watchAll() will make an HTTP request (to https://my-json-server.typicode.com/flutterdata/demo/users in this case), parse the incoming JSON and listen for any further changes to the User collection – whether those are local or remote!

state is of type DataState which has loading/error/data substates. Moreover, notifier.reload() is available, useful for the classic "pull-to-refresh" scenario.

In addition to the reactivity, a User now gets extensions and automatic relationships, ActiveRecord-style:

final todo = await Todo(title: 'Finish docs').init(context).save();
// POST https://my-json-server.typicode.com/flutterdata/demo/todos/
print(todo.id); // 201

final user = await repository.findOne(1, params: { '_embed': 'todos' });
// GET https://my-json-server.typicode.com/flutterdata/demo/users/1?_embed=todos
print(user.todos.length); // 20

await user.todos.last.delete();

For an in-depth example check out the Tutorial.

Fully functional app built with Flutter Data? See the code for the finished Flutter Data TO-DOs Sample App.

Compatibility #

Fully compatible with the tools we know and love:

             
Flutter   ✅ It can also be used with pure Dart
json_serializable   ✅ Not required! Other fromJson/toJson can be supplied
JSON REST API   ✅ Great support
JSON:API   ✅ Great support
Firebase   ✅ Adapter coming soon 🎉 as well as Firebase Auth
Provider   ✅ Not required! Configure in a few lines of code
Riverpod   ✅ Not required! Configure in a few lines of code
get_it   ✅ Not required! Configure in a few lines of code
BLoC   ✅ Great support
Freezed   ✅ Good support
Flutter Web   ✅ Great support
Hive   ✅ Flutter Data uses Hive internally for local storage
Chopper/Retrofit Not required: Flutter Data generates its own REST clients

📲 Apps using Flutter Data #

The new offline-first Scout Flutter app is being developed in record time with Flutter Data.

➕ Questions and collaborating #

Please use Github to ask questions, open issues and send PRs. Thanks!

You can also hit me up on Twitter @thefrank06

Tests can be run with: pub run test

📝 License #

See LICENSE.

347
likes
0
pub points
85%
popularity

Publisher

verified publisherflutterdata.dev

The seamless way to work with persistent data models in Flutter. Inspired by Ember Data and ActiveRecord.

Repository (GitHub)
View/report issues

Documentation

Documentation

License

unknown (LICENSE)

Dependencies

analyzer, async, build, build_resolvers, data_state, glob, hive, http, inflection2, meta, path, pubspec_parse, riverpod, source_gen, state_notifier, uuid

More

Packages that depend on flutter_data