برنامه نویسی

الگوی Singleton در Flutter: یک راهنمای جامع با نمونه های API

شرح تصویر

هنگام توسعه برنامه های کاربردی ، مدیریت دولت و اطمینان از تماس های کارآمد API برای ایجاد برنامه های مقیاس پذیر و قابل نگهداری بسیار مهم است. یک الگوی طراحی که می تواند این دستاورد را تسهیل کند ، الگوی Singleton است. در این وبلاگ ، ما بررسی خواهیم کرد که الگوی Singleton چیست ، چرا مفید است و چگونه می توان آن را در Flutter برای ساخت اجرا کرد دریافت ، قرار دادن ، ارسال ، پچ ، و تماس های API را حذف کنید.

الگوی Singleton چیست؟

در الگوی Singleton یک الگوی طراحی است که تضمین می کند یک کلاس تنها یک نمونه دارد و یک نقطه دسترسی متمرکز به نمونه ارائه می دهد ، و آن را در موقعیت هایی که به ویژه مفید است
شما به یک نقطه کنترل واحد نیاز دارید ، مانند مدیریت تماس های API ، اتصالات پایگاه داده یا منابع مشترک.

در Flutter ، الگوی Singleton اغلب برای ایجاد یک نمونه واحد از کلاس خدمات API استفاده می شود و تضمین می کند که هر قسمت از برنامه از همان نمونه برای رسیدگی به درخواست های شبکه استفاده می کند.

چرا از الگوی Singleton در Flutter استفاده می کنیم؟

نمونه Singleton: تضمین می کند که فقط یک نمونه سرویس API ایجاد می شود و از افزونگی جلوگیری می کند. مصرف منابع غیر ضروری.

دسترسی جهانی: یک نقطه دسترسی واحد به سرویس API ارائه می دهد ، و از استفاده بدون درز در کل برنامه اطمینان می دهد.

ثبات: حالت و رفتار مداوم را در طول برنامه حفظ می کند.

کارآیی: سربار ایجاد چندین نمونه از همان سرویس را کاهش می دهد. اجرای الگوی Singleton در Flutter
بیایید یک کلاس Singleton برای مدیریت تماس های API در Flutter ایجاد کنیم. ما از بسته HTTP برای ایجاد درخواست های شبکه استفاده خواهیم کرد.

مرحله 1: وابستگی ها را اضافه کنید

بسته HTTP را در پرونده pubspec.yaml خود تحت وابستگی قرار دهید.

وابستگی ها:

flutter:
sdk: flutter http: ^0.15.0
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مرحله 2: کلاس Singleton را ایجاد کنید

پرونده ای به نام api_service.dart ایجاد کنید و کلاس Singleton را تعریف کنید:

import 'package:http/http.dart' as http;
import 'dart:convert';

class ApiService {
// Private constructor ApiService._internal();

// Static instance of the class
static final ApiService _instance = ApiService._internal();

// Factory constructor to provide the instance factory ApiService() {
return _instance;
}

// Base URL of the API
static const String _baseUrl="https://jsonplaceholder.typicode.com";

// HTTP client
final http.Client _client = http.Client();

// GET request
Future get(String endpoint) async {
final response = await _client.get(Uri.parse('$_baseUrl/$endpoint')); return _handleResponse(response);
}

// POST request
Future post(String endpoint, dynamic body) async { final response = await _client.post(

Uri.parse('$_baseUrl/$endpoint'),
headers: {'Content-Type': 'application/json'}, body: jsonEncode(body),
);
return _handleResponse(response);
}

// PUT request
Future put(String endpoint, dynamic body) async { final response = await _client.put( Uri.parse('$_baseUrl/$endpoint'),
headers: {'Content-Type': 'application/json'}, body: jsonEncode(body),
);
return _handleResponse(response);
}

// PATCH request
Future patch(String endpoint, dynamic body) async { final response = await _client.patch( Uri.parse('$_baseUrl/$endpoint'),
headers: {'Content-Type': 'application/json'}, body: jsonEncode(body),
);
return _handleResponse(response);
}

// DELETE request
Future delete(String endpoint) async {
final response = await _client.delete(Uri.parse('$_baseUrl/$endpoint')); return _handleResponse(response);
}

// Handle the HTTP response
dynamic _handleResponse(http.Response response) { if (response.statusCode == 200) {
return jsonDecode(response.body);
} else {
throw Exception('Failed to load data: ${response.statusCode}');
}

}
}

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مرحله 3: از کلاس Singleton در برنامه خود استفاده کنید

اکنون که کلاس Singleton تنظیم شده است ، می توانید از آن برای برقراری تماس های API از هرجای برنامه خود استفاده کنید.

مثال: واکشی داده ها (درخواست دریافت)

class HomePage extends StatelessWidget {
final ApiService _apiService = ApiService();

Future fetchData() async { try {
final data = await _apiService.get('posts/1'); print('Fetched Data: $data');
} catch (e) { print('Error: $e');
}
}

@override
Widget build(BuildContext context) { return Scaffold(
appBar: AppBar(title: Text('Singleton Pattern Example')), body: Center(
child: ElevatedButton( onPressed: fetchData, child: Text('Fetch Data'),
),
),
);
}
}

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مثال: ایجاد داده (درخواست ارسال)

Future createPost() async {
final newPost = { 'title': 'New Post',

'body': 'This is a new post created using the Singleton Pattern.', 'userId': 1,
};

try {
final response = await _apiService.post('posts', newPost); print('Created Post: $response');
} catch (e) { print('Error: $e');
}
}

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مثال: به روزرسانی داده ها (درخواست کنید)

Future updatePost() async {
final updatedPost = { 'id': 1,
'title': 'Updated Post',
'body': 'This post has been updated using the Singleton Pattern.', 'userId': 1,
};

try {
final response = await _apiService.put('posts/1', updatedPost); print('Updated Post: $response');
} catch (e) { print('Error: $e');
}
}

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مثال: به روزرسانی جزئی داده ها (درخواست پچ)

Future patchPost() async {
final patchData = { 'title': 'Patched Post',
};

try {
final response = await _apiService.patch('posts/1', patchData); print('Patched Post: $response');

} catch (e) { print('Error: $e');
}
}

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مثال: به روزرسانی جزئی داده ها (درخواست پچ)

Future patchPost() async {
final patchData = { 'title': 'Patched Post',
};

try {
final response = await _apiService.patch('posts/1', patchData); print('Patched Post: $response');
} catch (e) { print('Error: $e');
}
}

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مثال: حذف داده ها (حذف)

Request) Future deletePost() async {
try {
final response = await _apiService.delete('posts/1'); print('Deleted Post: $response');
} catch (e) { print('Error: $e');
}
}

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

پایان

الگوی Singleton ابزاری قدرتمند برای مدیریت خدمات API در Flutter است. با اطمینان از یک نمونه واحد از سرویس API ، می توانید قوام ، کاهش مصرف منابع را حفظ کرده و پایگاه کد خود را ساده کنید. با استفاده از مثال های ارائه شده ، اکنون می توانید با استفاده از الگوی Singleton ، تماس های API را در برنامه Flutter خود GET ، POST ، PUT ، PATCH و حذف برنامه های API خود را پیاده سازی کنید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا