सार्वजनिक जानकारी से बना चयन मार्गदर्शन। केवल संदर्भ हेतु।
Brick_SQLite Brick का एक SQLite कनेक्टर है, जो Flutter एप्लिकेशन के लिए डेटा पर्सिस्टेंस लाइब्रेरी के रूप में डिज़ाइन किया गया है। यह Android, iOS, Web, macOS, Windows और Linux जैसे कई प्लेटफॉर्म पर SQLite का उपयोग करके कुशल, टाइप-सुरक्षित और प्रतिक्रियाशील डेटा स्टोरेज सुविधा प्रदान करता है। Brick के शक्तिशाली ORM-जैसे फीचर्स के साथ एकीकरण के माध्यम से, यह प्रश्नों, डेटा डालने, अद्यतन करने और न्यूनतम बॉयलरप्लेट के साथ डेटा सिंक करने जैसे डेटाबेस ऑपरेशन को सरल बनाता है। पैकेज माइग्रेशन, ट्रांजैक्शन और स्ट्रीम के माध्यम से रियल-टाइम अपडेट्स का समर्थन करता है, जो विश्वसनीय स्थानीय डेटा प्रबंधन की आवश्यकता वाले ऐप्स के लिए आदर्श है।
उपयोग
ऑफलाइन-प्रथम मोबाइल एप्लिकेशन्स
रियल-टाइम डेटा सिंक्रनाइज़ेशन
क्रॉस-प्लेटफॉर्म डेटा स्थायित्व
संबंधों के साथ जटिल डेटा मॉडलिंग
स्थानीय स्टोरेज के साथ ऐप स्थिति प्रबंधन
मुख्य विशेषताएँ
प्रकार सुरक्षित डेटाबेस संचालन
निर्मित अभियान समर्थन
स्ट्रीम के माध्यम से प्रतिक्रियाशील क्वेरी
लेनदेन का समर्थन
Brick ORM के साथ निरंतर एकीकरण
इनके लिए उपयुक्त
डेटा स्थायित्व के लिए Brick का उपयोग करने वाले डेवलपर्स
ऑफलाइन क्षमता की आवश्यकता वाले ऐप्स
कई प्लेटफॉर्म के लक्षित प्रोजेक्ट्स
रखरखाव डेटाबेस कोड प्राथमिकता देने वाली टीमें
जटिल डेटा संबंधों वाले एप्लिकेशन
विचार योग्य बातें
Brick फ्रेमवर्क के साथ परिचित होना आवश्यक है
SQLite बैकएंड पर सीमित
माइग्रेशन प्रबंधन की ध्यान से योजना बनाने की आवश्यकता होती है
प्रदर्शन क्वेरी कठिनाई और डेटा आयतन पर निर्भर करता है
वेब सुसंगतता के लिए अतिरिक्त सेटअप की आवश्यकता है
मूल README
संबंधित सोर्स रिपॉज़िटरी के मूल README का स्नैपशॉट। नवीनतम सामग्री के लिए रिपॉज़िटरी देखें।
An intuitive way to work with persistent data in Dart.
Brick is an extensible query interface for Dart applications. It's an all-in-one solution responsible for representing business data in the application, regardless of where your data comes from. Using Brick, developers can focus on implementing the application, without concern for where the data lives. Brick was inspired by the need for applications to work offline first, even if an API represents your source of truth.
Quick Start
Add the packages:
dependencies:# Or brick_offline_first_with_graphql# Or brick_offline_first_with_supabasebrick_offline_first_with_rest:sqflite:# optionaldev_dependencies:# Or brick_offline_first_with_graphql_build: any# Or brick_offline_first_with_supabase_build: anybrick_offline_first_with_rest_build:build_runner:
Configure your app directory structure to match Brick's expectations:
mkdir -p lib/brick/adapters lib/brick/db;
Add models that contain your app logic. Models must be saved with the .model.dart suffix (i.e. lib/brick/models/person.model.dart).
Run dart run build_runner build to generate your models and sometimes migrations. Rerun after every new model change or dart run build_runner watch for automatic generations. You'll need to run this again after your first migration.
And generate (de)serializing code to fetch to and from multiple providers:
$ (flutter) pub run build_runner build
Fetching Data
A repository fetches and returns data across multiple providers. It's the single access point for data in your app:
classMyRepositoryextendsOfflineFirstWithRestRepository{
MyRepository();
}
final repository = MyRepository();
// Now the models can be queried:final users = await repository.get<User>();
Behind the scenes, this repository could poll a memory cache, then SQLite, then a REST API. The repository intelligently determines how and when to use each of the providers to return the fastest, most reliable data.
// Queries can be general:final query = Query(where: [Where('lastName').contains('Muster')]);
final users = await repository.get<User>(query: query);
// Or singular:final query = Query.where('email', 'user@example.com', limit1: true);
final user = await repository.get<User>(query: query);
Queries can also receive reactive updates. The subscribed stream receives all models from its query whenever the local copy is updated (e.g. when the data is hydrated in another part of the app):
final users = repository.subscribe<User>().listen((users) {})
Mutating Data
Once a model has been created, it's sent to the repository and back out to each provider:
final user = User();
await repository.upsert<User>(user);
Associating Data
Repositories can support associations and automatic (de)serialization of child models.
classHatextendsOfflineFirstWithRestModel{
finalString color;
Hat({this.color});
}
classUserextendsOfflineFirstWithRestModel{
// user has many hatsfinalList<Hat> hats;
}
final query = Query.where('hats', Where('color').isExactly('brown'));
final usersWithBrownHats = repository.get<User>(query: query);