Orientação gerada a partir de informações públicas. Apenas para referência.
Flutter Data oferece uma abordagem simplificada para gerenciar modelos de dados persistentes em aplicativos Flutter, inspirado no Ember Data e no ActiveRecord. Ele simplifica operações CRUD, gerenciamento de estado e sincronização de dados entre dispositivos ao fornecer uma API unificada para trabalhar com fontes de dados locais e remotas. O pacote se integra perfeitamente ao ecossistema do Flutter, suportando modelos seguros por tipo, serialização automática e cache embutido. Os desenvolvedores podem definir facilmente modelos de dados e relacionamentos, permitindo um manuseio eficiente de dados sem código boilerplate.
Casos de uso
Gerenciando fluxos de trabalho de dados com foco em offline
Sincronizando dados entre armazenamento local e APIs
Construindo aplicativos CRUD escaláveis
Gerenciamento de relações de dados complexas
Implementando atualizações de dados reativas
Principais recursos
Serialização automática de modelo
Persistência embutida com SQLite
gerenciamento de estado reativo
Suporte a APIs REST e GraphQL
Modelos de dados e consultas seguras por tipo
Indicado para
Aplicativos que exigem acesso a dados offline
Projetos usando backends REST ou GraphQL
Desenvolvedores que buscam reduzir o código boilerplate
Equipes que adotam arquitetura de dados semelhante ao MVC
Aplicações com relações de dados complexas
Considerações
Curva de aprendizado para novos usuários
Documentação limitada em comparação com alternativas maduras
Pode exigir configuração adicional para pontos de extremidade personalizados
Não ideal para aplicativos muito simples com necessidades mínimas de dados
Depende de dependências externas, como json_serializable
README original
Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.
Flutter Data
Persistent reactive models in Flutter with zero boilerplate
Flutter Data is a local-first data framework with a customizable REST client and powerful model relationships, built on Riverpod.
In Flutter Data, every model gets its default adapter. These adapters can be extended by mixing in custom adapters.
Annotate a model with @DataAdapter and pass a custom adapter:
@JsonSerializable()
@DataAdapter([MyJSONServerAdapter])
classUserextendsDataModel<User> {
@overridefinalint? id; // ID can be of any typefinalString name;
User({this.id, requiredthis.name});
// `User.fromJson` and `toJson` optional
}
mixinMyJSONServerAdapteronRemoteAdapter<User> {
@overrideStringget baseUrl => "https://my-json-server.typicode.com/flutterdata/demo/";
}
After code-gen, Flutter Data will generate the resulting Adapter<User> which is accessible via Riverpod's ref.users or container.users.
@overrideWidgetbuild(BuildContext context, WidgetRef ref) {
final state = ref.users.watchOne(1);
if (state.isLoading) {
returnCenter(child: constCircularProgressIndicator());
}
final user = state.model;
returnText(user.name);
}
ref.users.watchOne(1) will make a background HTTP request (to https://my-json-server.typicode.com/flutterdata/demo/users/1 in this case), deserialize data and listen for any further local changes to the user.
state is of type DataState which has loading, error and data substates.
In addition to the reactivity, models have ActiveRecord-style extension methods so the above becomes:
Appwrite Offline. A Flutter Data adapter for Appwrite that provides offline support, real-time updates, and seamless integration with Flutter Data's powerful features.
🚨 BREAKING CHANGES IN 2.0
All methods are now directly on Adapter, there is no Repository, RemoteAdapter or LocalAdapter. Any method you are looking for is probably on Adapter, for example, findAll from LocalAdapter is now called findAllLocal
For initialization we no longer call the configure... method on the Riverpod overrides, we just do localStorageProvider.overrideWithValue and pass a LocalStorage instance; the actual initialization is done via initializeFlutterData which needs an adapter map. An adapterProvidersMap is conveniently code-generated and available on main.data.dart
Offline operations are still supported, but retries are not, it is up to clients to implement them
📚 Public API
Initialization
First you need to supply a local storage provider, via Riverpod configuration. A popular option for the base directory is using the path_provider package.