Quick introduction to Flutter Data
masterFlutter Data is a local-first data framework built on Riverpod. It uses adapters to manage data synchronization between local storage (like SQLite3) and remote endpoints.
Every model extends DataModel<T> and can be annotated with @DataAdapter to specify custom logic. After running code generation, an Adapter<T> is automatically created and made available via Riverpod providers (e.g., ref.users or container.users).
Key workflows:
- Watching data: Use
ref.users.watchOne(id)to get aDataState<T?>. This triggers a background HTTP request and listens for local changes. - Updating data: Use
ref.users.save(model)or the ActiveRecord-style extension methodmodel.save()on the model instance itself.
@JsonSerializable()
@DataAdapter([MyJSONServerAdapter])
class User extends DataModel<User> {
@override
final int? id;
final String name;
User({this.id, required this.name});
}
mixin MyJSONServerAdapter on RemoteAdapter<User> {
@override
String get baseUrl => "https://my-json-server.typicode.com/flutterdata/demo/";
}
// Usage in a Widget
@override
Widget build(BuildContext context, WidgetRef ref) {
final state = ref.users.watchOne(1);
if (state.isLoading) {
return Center(child: const CircularProgressIndicator());
}
final user = state.model;
return Text(user.name);
}