یکی از دغدغههای اصلی توسعهدهندگان اپلیکیشنهای موبایل، مدیریت دادهها بهصورت محلی (Local) و بدون نیاز به اتصال مداوم اینترنت است. در اکوسیستم Flutter، گزینههای مختلفی برای ذخیرهسازی دادهها وجود دارد که Hive به عنوان یک دیتابیس سبک، سریع و کارآمد شناخته میشود. Hive برخلاف دیتابیسهای سنتی مانند SQLite، نیازی به موتور SQL ندارد و دادهها را به شکل Key-Value ذخیره میکند. همین موضوع باعث میشود که توسعهدهندگان بتوانند با سرعت و پیچیدگی کمتر، عملیات CRUD (ایجاد، خواندن، ویرایش و حذف) را پیادهسازی کنند.
Hive یک دیتابیس مبتنی بر Dart است که به صورت کامل با Flutter سازگاری دارد. این دیتابیس اطلاعات را داخل «Box» ذخیره میکند که میتوان آن را با جدول در دیتابیس سنتی مقایسه کرد، اما بسیار سادهتر و بهینهتر عمل میکند. سادگی Hive باعث شده است تا برنامهنویسان برای اپلیکیشنهایی که نیاز به ذخیرهسازی آفلاین و سریع داده دارند، آن را به SQLite ترجیح دهند.
از ویژگیهای مهم Hive میتوان به موارد زیر اشاره کرد:
hive_flutter برای مدیریت سادهتر در Flutter
Hive تنها برای ذخیره دادههای ساده مورد استفاده قرار نمیگیرد؛ بلکه میتوان آن را برای سناریوهای متنوعی به کار گرفت. به عنوان مثال:
هرچند گزینههایی مانند SQLite در Flutter قابل استفاده هستند، اما Hive مزایایی دارد که آن را برای پروژههای کوچک و متوسط بسیار جذاب میکند:
hive_flutter دادهها به صورت زنده و خودکار در رابط کاربری بهروزرسانی میشوند.
یکی از دلایلی که Hive در میان توسعهدهندگان Flutter محبوب شده است، هماهنگی آسان آن با معماریهای مدرن اپلیکیشن است. به کمک Hive میتوان لایه Data را بسیار ساده پیادهسازی کرده و مدیریت آن را به یک کنترلر اختصاص داد. استفاده از کلاسهای مدل (Model Classes) در کنار Hive باعث میشود تا عملیات CRUD به شکل سازمانیافته و تمیز در کدها اجرا شود. این معماری ماژولار کمک میکند اپلیکیشن در آینده به راحتی توسعه و نگهداری شود.
در بسیاری از اپلیکیشنها نیاز داریم دادههایی مانند لیست خرید، لیست کارها، یا موجودی انبار را ذخیره و مدیریت کنیم. این دادهها معمولا ساختار سادهای دارند و نیازی به جداول پیچیده SQL ندارند. Hive با رویکرد Key-Value و ذخیره دادهها در Box به راحتی این نیازها را برطرف میکند. به همین دلیل انتخابی عالی برای اپلیکیشنهای کوچک تا متوسط است که نیازمند سرعت، سادگی و پایداری دادهها هستند.
Hive به عنوان یک دیتابیس سبک و سریع در اکوسیستم Flutter، گزینهای فوقالعاده برای ذخیرهسازی دادههای محلی محسوب میشود. سادگی در راهاندازی، سرعت بالا و سازگاری با معماری ماژولار اپلیکیشنها، دلایلی هستند که توسعهدهندگان زیادی آن را به جای SQLite ترجیح میدهند. چه بخواهید یک اپلیکیشن یادداشت، لیست خرید یا حتی یک اپلیکیشن مدیریت موجودی ایجاد کنید، Hive ابزاری است که هم توسعه سریع و هم تجربه کاربری روانتری را برای شما فراهم میکند.
قبل از آنکه وارد پیادهسازی اپلیکیشن مبتنی بر Flutter و پایگاه داده Hive شویم، لازم است با پیشنیازها و مراحل ابتدایی راهاندازی پروژه آشنا شوید. بدون رعایت این موارد احتمال دارد هنگام اجرای پروژه با خطا مواجه شوید یا ساختار پروژهتان از همان ابتدا غیر استاندارد پیش برود. در این بخش سعی میکنیم به صورت کامل و مرحله به مرحله پیشنیازهای لازم را معرفی کرده و نحوه ایجاد و راهاندازی اولیه پروژه را توضیح دهیم.
اولین پیشنیاز شما برای شروع این پروژه، نصب Flutter SDK است. پیشنهاد میشود از نسخه ۳.۰ به بالا استفاده کنید تا از آخرین قابلیتها و بهبودهای عملکردی بهرهمند شوید. Flutter یک فریمورک متنباز است که امکان توسعه اپلیکیشنهای چندسکویی (Cross-platform) را فراهم میکند، به این معنا که با یک بار کدنویسی میتوانید خروجی برای Android، iOS، وب و دسکتاپ داشته باشید.
پس از نصب Flutter، با اجرای دستور flutter doctor در ترمینال، وضعیت نصب و ابزارهای مورد نیاز (مانند Android SDK یا Xcode) را بررسی کنید. این دستور خطاها و کمبودهای سیستم را نمایش میدهد و باید مطمئن شوید همه بخشها تیک سبز دریافت کردهاند.
برای توسعه پروژه نیاز به یک محیط برنامهنویسی مناسب دارید. VS Code و Android Studio دو انتخاب پرکاربرد در بین توسعهدهندگان Flutter هستند. اگر به یک محیط سبک و سریع علاقه دارید، VS Code گزینه بهتری است. در صورتی که قصد توسعه سنگین و استفاده از امکانات کامل اندروید مانند شبیهساز یا ابزارهای Gradle را دارید، Android Studio انتخاب مناسبی خواهد بود.
اطمینان حاصل کنید افزونههای مربوط به Flutter و Dart را در ویرایشگر خود نصب کرده باشید تا از امکاناتی مانند تکمیل خودکار کد، هایلایت نحو و اجرای مستقیم پروژه استفاده کنید.
چون Flutter مبتنی بر زبان Dart است، لازم است با مفاهیم پایهای این زبان آشنا باشید. به ویژه برای کار با Hive باید مدیریت داده در Dart، ساخت کلاسها، استفاده از Map و همچنین بهکارگیری enum را به خوبی بلد باشید. این دانش کمک میکند بتوانید دادهها را به راحتی به ساختار مورد نظر Hive تبدیل کنید و برعکس.
پس از نصب ابزارها، وقت آن است که یک پروژه جدید بسازید. برای این کار در مسیر دلخواه خود در ترمینال دستور زیر را وارد میکنید:
flutter create hive_crud_app
این دستور یک پروژه جدید ایجاد میکند که شامل ساختارهای ابتدایی Flutter مانند پوشه lib، فایل main.dart و تنظیمات پیکربندی است. پس از ایجاد پروژه وارد پوشه آن شوید:
cd hive_crud_app
سپس پروژه را در ویرایشگر کد دلخواه خود باز کنید.
برای این پروژه، نیاز داریم کتابخانههایی به پروژه اضافه کنیم تا بتوانیم دادهها را در Hive ذخیره و مدیریت کنیم. برای این کار فایل pubspec.yaml را باز کرده و وابستگیهای زیر را در قسمت dependencies اضافه کنید:
پس از ذخیره تغییرات، دستور flutter pub get را اجرا کنید تا وابستگیها دریافت و نصب شوند.
سازماندهی درست فایلها و پوشهها از همان ابتدا باعث میشود پروژهتان مقیاسپذیر و قابل نگهداری باشد. پیشنهاد میشود ساختار پروژه به صورت زیر سازماندهی شود:
lib/models – شامل مدلهایی مانند item.dart.lib/controllers – شامل کنترلرها مانند hive_controller.dart برای مدیریت عملیات CRUD.lib/utils – شامل ابزارهایی مانند toast.dart و string_constants.dart.lib/widgets – شامل ویجتهای UI مانند single_list_tile.dart.lib/screens – شامل صفحات رابط کاربری اصلی مانند main_screen.dart.
با پیروی از این ساختار، کد شما سازمانیافته باقی میماند و در آینده هنگام افزودن قابلیتهای بیشتر دچار آشفتگی نخواهید شد.
آخرین مرحله در راهاندازی پروژه، پیکربندی Hive است. برای این کار فایل main.dart را باز کرده و مراحل زیر را پیادهسازی کنید:
WidgetsFlutterBinding.ensureInitialized() تا اطمینان حاصل شود ویجتهای Flutter آماده استفاده هستند.Hive.initFlutter() برای آغاز به کار پایگاه داده Hive.Box جدید با استفاده از Hive.openBox('items') برای ذخیره دادهها.runApp و نمایش صفحه اصلی.
با این کار، پروژه شما آماده انجام عملیات CRUD خواهد بود و بستر لازم برای کار با دادهها فراهم شده است.
در این بخش پیشنیازهای لازم برای شروع پروژه Flutter و Hive را بررسی کردیم. این پیشنیازها شامل نصب Flutter SDK، انتخاب ویرایشگر کد مناسب، آشنایی با زبان Dart، ایجاد پروژه جدید Flutter، افزودن وابستگیها در pubspec.yaml و تنظیم ساختار پوشهها میشود. همچنین نحوه مقداردهی اولیه Hive در پروژه را مرور کردیم. پس از اتمام این مرحله، شما یک پروژه آماده و ساختارمند دارید که میتوانید در مراحل بعدی عملیات CRUD را پیادهسازی کنید.
یکی از بخشهای کلیدی در توسعه اپلیکیشنهای موبایل، طراحی صحیح مدل داده و سازماندهی مناسب ساختار پوشهها است. انتخاب درست مدل داده باعث میشود عملیات CRUD (ایجاد، خواندن، ویرایش و حذف) به شکلی بهینه و قابل نگهداری انجام شود. همچنین یک ساختار پوشهای مناسب، پروژه را منظم نگه میدارد و امکان توسعه در مقیاس بزرگتر را فراهم میکند. در یک پروژه فلاتر که از Hive برای ذخیرهسازی دادهها استفاده میکند، این دو موضوع اهمیت ویژهای دارند.
مدل داده در واقع نقشهای برای مدیریت اطلاعات است. در اپلیکیشنهای ساده مثل لیست خرید یا برنامه مدیریت وظایف، هر آیتم میتواند شامل خصوصیات سادهای چون عنوان و تعداد باشد. برای مدیریت این دادهها، بهتر است یک کلاس Dart تعریف کنیم؛ چرا که این کار باعث میشود دادهها تایپ ایمن (Type-safe) باشند و بتوانیم آنها را راحتتر در Hive ذخیره و بازیابی کنیم.
به عنوان مثال، کلاس Item میتواند شامل خصوصیات زیر باشد:
این مدل علاوه بر سهولت در کدنویسی، با کمک توابع toMap() و fromMap() قابلیت تبدیلپذیری به دادههای قابل ذخیرهسازی در Hive را نیز خواهد داشت. چنین ساختاری نه تنها مدیریت دادهها را سادهتر میکند، بلکه در صورت گسترش پروژه نیز انعطاف لازم را فراهم میآورد.
Hive بر خلاف SQLite نیازی به موتور سنگین SQL ندارد و دادهها را در قالب Box ذخیره میکند. هر باکس مشابه یک جدول در پایگاه داده عمل میکند اما با پیچیدگی کمتر. این موضوع زمانی که اپلیکیشن شما یک مدل ساده داده دارد، بسیار کارآمد است. سرعت بالای Hive در ذخیرهسازی و خواندن دادهها، آن را به گزینهای عالی برای اپلیکیشنهای کوچک و متوسط تبدیل میکند.
به این ترتیب، مدل داده ما میتواند به صورت مستقیم با Hive یکپارچه شود و عملیات زیر را به شکلی آسان فراهم سازد:
داشتن یک ساختار پوشهای منظم برای هر پروژه نرمافزاری اهمیت بسیار زیادی دارد. در Flutter نیز اگر از ابتدا دستهبندی فایلها و پوشهها به درستی انجام شود، توسعه و نگهداری در آینده سادهتر خواهد شد. یک ساختار پیشنهادی برای پروژههای CRUD با Hive میتواند به شکل زیر باشد:
item.darthive_controller.dartsingle_list_tile.dartmain_screen.dartstring_constants.dart یا toast.dartstatus.dart و yes_no.dartزمانی که پروژه بزرگتر میشود، اگر فایلها به صورت نامنظم ذخیره شده باشند، مدیریت آن به یک کابوس تبدیل خواهد شد. اما یک ساختار استاندارد مانند پیشنهاد بالا، ویژگیهای زیر را به همراه دارد:
مدل داده (models/) در کنار کنترلرها (controllers/) پایه اصلی منطق اپلیکیشن را تشکیل میدهند. کنترلرها مستقیم با Hive ارتباط دارند، دادهها را مدیریت کرده و نتایج را به رابط کاربری باز میگردانند. این جداسازی لایهها باعث میشود کدهای UI ساده باقی بمانند و نیازی به اجرای مستقیم عملیات دادهای در صفحات نداشته باشند. در نتیجه، هم از نظر خوانایی و هم از نظر پایداری، پروژه در وضعیت بهتری قرار میگیرد.
طراحی دقیق مدل داده و داشتن یک ساختار پوشهای اصولی، دو عامل مهم در موفقیت هر پروژه Flutter محسوب میشوند. با استفاده از Hive به عنوان پایگاه داده محلی و سازماندهی صحیح پوشهها، اپلیکیشن شما نه تنها عملکرد روان و سریع خواهد داشت، بلکه در آینده نیز به راحتی قابل نگهداری و توسعه خواهد بود. بنابراین پیش از شروع کدنویسی، زمان بگذارید و ساختار کلی را طراحی کنید تا روند توسعه برای شما و تیمتان سادهتر و لذتبخشتر پیش برود.
یکی از مهمترین بخشهای هر اپلیکیشن مدیریت دادههاست. در فلاتر، وقتی تصمیم میگیریم دادهها را به صورت محلی (Local) ذخیره کنیم، کتابخانههای مختلفی وجود دارند. Hive یکی از محبوبترین گزینههاست، زیرا بسیار سبک، سریع و ساده است. برای اینکه بتوانیم عملیات CRUD (Create, Read, Update, Delete) را روی دادهها انجام دهیم، معمولا یک لایه جداگانه به نام کنترلر (Controller) ایجاد میکنیم. این کنترلر وظیفه دارد مستقیما با Hive کار کند و دادهها را به رابط کاربری (UI) برگرداند.
اگر کدنویسی بدون ساختار انجام شود، منطق مربوط به مدیریت دادهها ممکن است به کل در فایلهای UI پخش شود. این کار باعث سختی در نگهداری و توسعه اپلیکیشن میشود. ساخت یک کنترلر مانند HiveController کمک میکند:
کنترلر در اپلیکیشن فلاتر معمولا شامل بخشهای زیر است:
add().put().delete().برای نمایش لیست آیتمها در UI، باید دادهها را از Hive واکشی کنیم. معمولا کنترلر دادهها را از طریق کلیدها میخواند و آنها را به یک Map یا مدل تبدیل میکند. به این ترتیب UI تنها با مدلها کار میکند و از جزئیات پیادهسازی دیتابیس بیخبر میماند.
برای افزودن یک آیتم جدید، کنترلر متدی در نظر میگیرد که مدل مورد نظر را گرفته و آن را به یک Map تبدیل کند. سپس با استفاده از hiveBox.add() داده در دیتابیس ذخیره میشود. بعد از ذخیره موفق، معمولا یک پیام توست (Toast Message) نشان داده میشود تا به کاربر اطلاع بدهد آیتم با موفقیت اضافه شده است.
ویرایش در Hive از طریق متد put(key, value) انجام میشود. برای این کار کافی است کلید آیتم و مقدار جدید ارسال شود تا جایگزین داده قبلی شود. کنترلر بعد از بهروزرسانی، رابط کاربری را رفرش کرده و پیام مناسب را به کاربر نمایش میدهد.
گاهی نیاز است یک آیتم خاص حذف شود. در این حالت کنترلر با گرفتن کلید مربوطه، دستور delete(key) را اجرا کرده و سپس UI را بروزرسانی میکند. نمایش یک پیام تأیید یا هشدار قبل از حذف از بهترین روشهای تجربه کاربری است تا جلوی حذف اشتباهی گرفته شود.
برای مواقعی که نیاز داریم کل دیتابیس محلی پاکسازی شود (مثلا ریست تنظیمات برنامه)، دستور hiveBox.clear() استفاده میشود. بهتر است این عملیات همیشه با یک دیالوگ تأیید همراه باشد.
برای حرفهایتر شدن و مدیریت بهتر کد، چند نکته دیگر نیز رعایت میشود:
استفاده از HiveController برای مدیریت عملیات CRUD در اپلیکیشنهای فلاتر یک ساختار حرفهای و تمیز ایجاد میکند. این رویکرد باعث میشود توسعهدهندهها بتوانند بدون پیچیدگی زیاد منطق ذخیرهسازی دادهها را مدیریت کرده و رابط کاربری را سادهتر پیادهسازی کنند. به کمک این ساختار، اپلیکیشن علاوه بر داشتن سرعت بالا در ذخیره و بازیابی دادهها، از نظر معماری نیز قابل نگهداری و توسعه در آینده خواهد بود.
در این آموزش قدمبهقدم یاد گرفتیم چگونه یک اپلیکیشن کامل Flutter بسازیم که عملیات ضروری CRUD (افزودن، نمایش، ویرایش و حذف داده) را با استفاده از دیتابیس سبک Hive انجام میدهد. این روش به ما کمک میکند تا دادهها را به صورت آفلاین و محلی در دستگاه ذخیره کنیم، بدون اینکه نیازی به اینترنت یا موتور SQL پیچیده مانند SQLite داشته باشیم. Hive با معماری کلید-مقدار، سرعت بالا و رابط کاربری سادهاش، بهترین انتخاب برای اپلیکیشنهای کوچک و متوسط محسوب میشود.
Hive برای پروژههایی که به سادگی، سرعت و اجرا به صورت آفلاین نیاز دارند، بسیار مناسب است. با توجه به اینکه دادهها به شکل محلی در گوشی ذخیره میشوند، حتی بعد از بستن یا ریاستارت کردن اپلیکیشن هم اطلاعات باقی میمانند. همچنین به لطف نوعدهی ایمن در Dart، تبدیل دادهها بین مدلها و Map ساده و سریع انجام میشود. از این رو، Hive در پروژههایی مانند لیست کارها (To-Do App)، مدیریت خرید یا حتی ذخیره تنظیمات اپلیکیشن کاربرد وسیعی دارد.
یکی از مهمترین نکاتی که در این پروژه رعایت شد، طراحی ساختار ماژولار برای مدیریت فایلها بود. ما فایلهای کلیدی مانند item.dart برای مدل داده، controller.dart برای کنترل CRUD، و ویجتهایی مانند single_list_tile.dart برای نمایش آیتمها را جدا کردیم. این معماری باعث میشود کد خواناتر، قابل نگهداریتر و مقیاسپذیر باشد.
به عنوان نمونه، HiveController مسئول تمام عملیات اصلی ذخیرهسازی داده بود. این کلاس اقداماتی از جمله افزودن، ویرایش، حذف و نمایش دادهها را مدیریت میکند و در کنار آن مسئول بروزرسانی UI و نمایش بازخورد کاربر (توست پیغامها) نیز هست. بنابراین، UI تنها به منطق نمایش و تعامل محدود شده و بخش مدیریت داده از لایه رابط کاربری جدا شده است.
برای افزایش تجربه کاربری، در این اپلیکیشن از توستها به عنوان راهی سریع برای نمایش پیام موفقیت یا خطا استفاده شد. علاوه بر این، دیالوگهای تایید (Confirmation Dialog) برای جلوگیری از اقدامات ناخواسته مانند حذف یا پاک کردن کل دادهها پیادهسازی شدند. تفاوتی که این طراحی ایجاد میکند، حس اعتماد بیشتر به عملکرد اپلیکیشن است؛ چرا که کاربر مطمئن میشود قبل از هر عملیات حساس، تأیید نهایی گرفته میشود.
در نهایت، اپلیکیشنی ساختهایم که میتواند:
ویژگیهای فوق در کنار ساختاری ساده و روان باعث میشود که اپلیکیشن نتیجه نهایی نه تنها کاربردی باشد، بلکه در محیط واقعی نیز توانایی رقابت با اپلیکیشنهای مشابه را داشته باشد. همچنین با پیادهسازی متدهای جداگانه و استفاده از الگوهای برنامهنویسی تمیز، این پروژه به راحتی قابل توسعه و نگهداری خواهد بود.
اگرچه این پروژه یک اپلیکیشن CRUD کامل با Flutter و Hive است، اما پتانسیل ارتقا و توسعه فراوانی دارد. قابلیتهایی مانند جستجو در بین دادهها، دستهبندی آیتمها، همگامسازی با فضای ابری یا بهبود طراحی UI میتواند به پروژه اضافه شود تا حرفهایتر و کاربرپسندتر شود. همچنین، در اپلیکیشنهای بزرگتر میتوان از Hive برای کش کردن APIها یا مدیریت پروفایل کاربران استفاده کرد.
ساخت یک اپلیکیشن CRUD با Flutter و Hive یک فرصت عالی برای یادگیری اصول پایه معماری نرمافزار، مدیریت داده و طراحی رابط کاربری در دنیای توسعه موبایل است. این پروژه نه تنها مهارتهای فنی شما را تقویت میکند، بلکه به شما نشان میدهد چگونه میتوان تنها با چند ابزار و معماری اصولی، اپلیکیشنی کارآمد و سریع ساخت. اگر به دنبال یک دیتابیس سبک، آفلاین و بسیار کارا برای Flutter هستید، Hive یکی از بهترین انتخابها خواهد بود.