flutter_data 0.4.1
flutter_data: ^0.4.1

Dart native
Flutter Android iOS

Flutter Data is a library for seamlessly managing persistent data in Flutter apps

Flutter Data

tests pub.dev license

Flutter Data is a library for seamlessly managing persistent data in Flutter apps.

Inspired by Ember Data and ActiveRecord, it enables the use and creation of persistent business models in the reactive Flutter environment.

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 configured Providers
    • 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([StandardJSONAdapter, JSONPlaceholderAdapter])
class User extends DataSupport<User> {
  final int id;
  final String name;
  User({this.id, this.name});
}

mixin JSONPlaceholderAdapter on RemoteAdapter<User> {
  @override
  get baseUrl => "http://jsonplaceholder.typicode.com/";
}

(User.fromJson and toJson are not required! id can be of any type.)

Flutter Data will generate a Repository<User> (after a source gen build):

// obtain it via Provider
final repository = context.read<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 http://jsonplaceholder.typicode.com/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').save();
// POST http://jsonplaceholder.typicode.com/todos/
print(todo.id); // 201

final user = await repository.findOne(1, params: { '_embed': 'todos' });
// GET http://jsonplaceholder.typicode.com/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:

Compatible
FlutterIt can also be used with pure Dart
json_serializableNot required! Other fromJson/toJson can be supplied
Chopper/RetrofitNot needed: Flutter Data generates its own REST clients (**)
JSON REST APIGreat support
JSON:APIGreat support
FirebaseAdapter coming soon 🎉 as well as Firebase Auth
ProviderNot required! It can be automatically wired up
get_itNot required! Very easy to integrate
Streams / BLoCGreat support
FreezedGreat support
Flutter WebFull support coming soon!
HiveFlutter Data uses Hive internally for local storage

(**) That said, Chopper/Retrofit and OpenAPI adapters are being considered too!

📲 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.

138
likes
70
pub points
72%
popularity

Publisher

flutterdata.dev

Flutter Data is a library for seamlessly managing persistent data in Flutter apps

Repository (GitHub)
View/report issues

Documentation

Documentation
API reference

License

MIT (LICENSE)

Dependencies

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

More

Packages that depend on flutter_data