Need help with flutter_data?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

flutterdata
148 Stars 10 Forks MIT License 363 Commits 16 Opened issues

Description

Seamlessly manage persistent data in your Flutter apps

Services available

!
?

Need anything else?

Contributors list

# 167,023
psr
php7
jsonapi
Dart
1 commit

Flutter Data

tests codecov pub.dev license

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

Inspired by Ember Data and ActiveRecord.


⚠️ DOCUMENTATION IS OUT OF DATE. I'm working on it, please bare with me!

Refer to https://github.com/flutterdata/flutter_data_setup_app and https://github.com/flutterdata/flutter_data_todos


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 {
  @override
  final int id;
  final String name;
  User({this.id, this.name});
}

mixin MyJSONServerAdapter on RemoteAdapter { @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
:
// obtain it via Provider
final repository = context.watch>();

return DataStateBuilder>( 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 | | jsonserializable |   ✅ | 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.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.