فلاتر

آموزش استفاده از دیتابیس آماده در فلاتر

استفاده از دیتابیس و ذخیره سازی دائمی اطلاعات در بیشتر برنامه ها مورد استفاده قرار میگیرد. در فریمورک فلاتر هم امکان استفاده از ORM های مختلف برای کار با دیتابیس وجود دارد و هم به شکل مستقیم میتوانید با دیتابیس SQLite کار کنید و عملیات های مورد نظر را اجرا کنید.

کاربرد دیتابیس در برنامه نویسی فلاتر

دیتابیس یک ابزار قدرتمند در برنامه‌نویسی است که به برنامه‌نویسان اجازه می‌دهد اطلاعات را به صورت ساختارمند ذخیره و مدیریت کنند. در اپلیکیشن‌ها، دیتابیس‌ها نقش بسیار مهمی ایفا می‌کنند و برای ذخیره و به‌روزرسانی اطلاعات کاربران، تنظیمات، محتوا، اطلاعات مربوط به نرم‌افزار و غیره استفاده می‌شوند. برخی از کاربردهای دیتابیس در اپلیکیشن‌ها عبارتند از:

  1. ذخیره داده‌های کاربران: دیتابیس‌ها به برنامه‌نویسان‌ها امکان می‌دهند تا اطلاعات کاربران را به صورت امن و ساختارمند ذخیره کنند. اطلاعات مانند نام، ایمیل، رمزعبور و سایر جزئیات کاربری می‌تواند در دیتابیس ذخیره شود.
  2. ذخیره تنظیمات و ترجیحات: برنامه‌ها ممکن است تنظیمات و ترجیحات کاربر را برای بهبود تجربه کاربری آن‌ها ذخیره کنند. این اطلاعات معمولاً در دیتابیس ذخیره می‌شود تا بتواند پس از خروج و ورود مجدد کاربر به برنامه حفظ شود.
  3. ذخیره محتوا: اگر برنامه‌ای محتوایی دارد مانند پست‌ها، تصاویر، ویدئوها و غیره، این محتواها به طور معمول در دیتابیس ذخیره می‌شوند تا به سادگی بتوان به آن‌ها دسترسی داشته و مدیریت کرد.
  4. سینک داده بین دستگاه‌ها: برنامه‌هایی که بر روی چندین دستگاه مختلف اجرا می‌شوند ممکن است نیاز به همگام‌سازی داده‌ها بین این دستگاه‌ها داشته باشند. دیتابیس‌ها به‌عنوان یک مکان مشترک برای ذخیره داده‌ها عمل می‌کنند و سینک کردن داده‌ها بین دستگاه‌ها را آسان‌تر می‌کنند.
  5. تحلیل داده‌ها: اپلیکیشن‌ها ممکن است نیاز به جمع‌آوری و تحلیل داده‌های مختلف داشته باشند. با استفاده از دیتابیس‌ها، می‌توان اطلاعات مربوط به رفتار کاربران، نحوه استفاده از برنامه و غیره را جمع‌آوری و تحلیل کرد.

در نتیجه، دیتابیس‌ها نقش بسیار مهمی در اپلیکیشن‌ها ایفا می‌کنند و برنامه‌نویسان برای مدیریت و ذخیره سازی داده‌ها از آن‌ها بهره‌مند می‌شوند.
انتخاب نوع دیتابیس مناسب براساس نیازها و محدودیت‌های اپلیکیشن مهم است و ممکن است به یک دیتابیس SQL مانند MySQL یا PostgreSQL یا دیتابیس NoSQL مانند MongoDB یا Firebase توجه شود.

استفاده از دیتابیس آماده در اپلیکیشن

در بعضی از اپلیکیشن ها یک پایگاه داده آماده از قبل در اختیار داریم و قصد داریم که از این دیتابیس در برنامه استفاده کنیم. برای مثال پایگاه داده ای شامل لغات یا دایرة المعارف در اختیار داریم و یک برنامه برای کار با این اطلاعات میخواهیم طراحی کنیم.

در این حالت روش کار بسیار شبیه به کار کردن با دیتابیس عادی SQLite در فلاتر میباشد و فقط کافیست به شکل صحیح مسیریابی را انجام دهیم تا برنامه به فایل دیتابیس دسترسی پیدا کند.

برای شروع ابتدا نیاز به یک فایل دیتابیس داریم که اگر چنین فایلی در اختیار ندارید میتوانید از فایل انتهای صفحه استفاده کنید.

این فایل شامل جدول های مختلفی است که برای آموزش فقط میخواهیم اطلاعات جدول album را واکشی کنیم.

اضافه کردن دیتابیس به پروژه

در اولین قدم باید فایل پایگاه داده را وارد پروژه کنیم. همانطور که میدونید فایل های خارجی که در فلاتر از آنها استفاده میکنیم را داخل پوشه assets قرار میدهیم.

flutter:
  assets:
    - assets/chinook.db

نام فایل پایگاه داده chinook.db است و به شکل بالا در فایل pubspec.yaml آن را قرار داده ایم. همچنین تمام پکیج هایی که در زمان کار با دیتابیس از آنها استفاده میکنیم را نیز در این پروژه باید اضافه کنید.

بروی دکمه Pub get کلیک کنید تا تنظیمات جدید در پروژه ثبت شود.

برای جدول album یک کلاس مدل همانند تصویر زیر ایجاد میکنیم.

class Album {
  int? albumId;
  String? title;
  int? artistId;

  Album({required this.albumId, required this.title, required this.artistId});

  Album.fromJson(Map<dynamic, dynamic> json) {
    albumId = json['AlbumId'];
    title = json['Title'];
    artistId = json['ArtistId'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['AlbumId'] = this.albumId;
    data['Title'] = this.title;
    data['ArtistId'] = this.artistId;
    return data;
  }
}

متد جدیدی به نام CheckDB ایجاد میکنیم که وظیفه آن در ابتدا بررسی وجود داشتن دیتابیس است و سپس باز کردن فایل دیتابیس.

به دلیل اینکه این متد یک لیست بازگردانی میکند آن را از نوع Future قرار میدهیم.

Future<List<Album>> CheckDB() async{
    var databasesPath = await getDatabasesPath();
    var path = join(databasesPath, "chinook.db");

    var exists = await databaseExists(path);

    if (!exists) {
      print("Creating new copy from asset");
      try {
        await Directory(dirname(path)).create(recursive: true);
      } catch (_) {}
      
      ByteData data = await rootBundle.load(join("assets", "chinook.db"));
      List<int> bytes =
      data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);

      await File(path).writeAsBytes(bytes, flush: true);

    } else {
      print("Opening existing database");
    }
  var  db = await openDatabase(path, readOnly: true);
    List<Map> result =await db.query("albums");
    return  result.map((e) => Album.fromJson(e)).toList();;
  }

با استفاده از متد databaseExists بررسی میکنیم آیا چنین پایگاه داده ای وجود دارد یا خیر و در صورت وجود نداشتن یک پایگاه داده با همین نام فایلی ایجاد میکنیم.

سپس با کمک متد openDatabase فایل پایگاه داده را آماده کرده و یک نمونه از کلاس دیتابیس به نام db ایجاد میکنیم. با استفاده از این نمونه هر عملیاتی که نیاز داشته باشیم را میتوانیم روی دیتابیس انجام دهیم.

از دستور db.query برای دریافت لیست کامل رکورد های جدول album استفاده میکنیم و بعد از تبدیل آن به یک لیست عادی آن را به وسیله متد بازگردانی میکنیم.

در متد build از ویجت FutureBuilder برای نمایش اطلاعات استفاده میکنیم.

FutureBuilder(
        future: CheckDB(),
        builder: (context,AsyncSnapshot<List> snap){
          if(snap.hasData){
            return Center(child: Text(snap.data![0].title.toString()),);
          }else{
            return Center(child: Text("Waiting..."),);
          }
        },
      )

به عنوان ویژگی future نام متدی که طراحی کردیم را قرار میدهیم سپس در بخش builder بررسی میکنیم آیا اطلاعاتی دریافت شده است یا خیر. اگر اطلاعاتی وجود داشت عنوان ایندکس اول را نمایش میدهیم.

شما میتوانید بجای نمایش فقط اطلاعات یک ایندکس از لیست ویو استفاده کنید و اطلاعات همه رکورد ها را نمایش دهید.

برای کار با دیتابیس های آنلاین که بروی سرورهای ابری مستقر هستند نیاز به دسترسی اینترنت و ارتباط با سرور در فلاتر هستید.

Hesam

View Comments

Recent Posts

گیتهاب اکشن چیست؟ آموزش استفاده از گیتهاب اکشن در برنامه نویسی فلاتر

گیتهاب اکشن GitHub Actions یکی از ابزارهای گیتهاب است که به شما کمک می‌کنه تا…

12 ساعت ago

آموزش افزایش سرعت اجرای وب اپلیکیشن های فلاتر

اگر یک برنامه نویس فلاتر هستید و با از نسخه وب اپلیکیشن پروژتون استفاده میکنید…

4 هفته ago

آموزش جامع انتشار اپلیکیشن اندروید و فلاتر در فروشگاه گوگل پلی Google play

به عنوان یک برنامه نویس فلاتر یا اندروید بعد از اتمام پروسه طراحی اپلیکیشن نیاز…

2 ماه ago

دانلود سورس کد رابط کاربری اپلیکیشن فلاتر پروژه پادکست

طراحی رابط کاربری اپلیکیشن پادکست خود را با استفاده از این کیت توسعه UI/UX فلاتر…

2 ماه ago

فایربیس چیست؟ معرفی سرویس ابری Firebase و کاربردهای آن

فایربیس، پلتفرمی قدرتمند از شرکت گوگل برای توسعه و مدیریت برنامه‌های موبایل و وب است.…

2 ماه ago

آموزش پیاده سازی Method Channel در فلاتر + فیلم

فلاتر یک فریم ورک برنامه نویسی چندسکویی است که این امکان را برای برنامه نویس…

3 ماه ago