اذهب إلى المحتوى

السؤال

نشر

في حالة ارغب بعرض اسعار مختلفه لمستخدمين تطبيق فلاتر ما هيا افضل طريقة لعرض الاسعار لهم؟

هل يوجد في فلاتر باكج لتحويل العملات يمكن استعماله بشكل مجاني؟

ايضا بنسبه الى API هل يتوفر رابط بشكل مجاني ام كل المواقع تعطيك باقه مثلا الف طلب في الشهر وبعدها تتوقف ويجب التحول الى الخطه المدفوعه ام ان هنالك طريقه للحصول على رابط مجاني؟ مثلا الا يمكن استعمال رابط جوجل لمقارنة الاسعار؟

ياليت اذا فيه افكار مختلفه تخدم التطبيقات التجاريه من فلاتر لعرض الاسعار تفيدونا الموضوع جديد علي ولكم كل الشكر 

Recommended Posts

  • 1
نشر

لم أتعامل مع APIS يوفر مثل هذه الخاصية من قبل, ولكن أعتمد في طريقتي على api الذي استخدمه في تطبيقي من حيث يكون للمنتج أكثر من سعر مثل USD , EUR. 

بحيث يكون هناك واجهة أخرى يختار منه المستخدم العملة التي يريد إظهارها في المنتجات , فعند الضغط على العملة المفضلة أقوم بتخزينها في SharedPrefrence و من ثم أمررها لِ Provider المسؤول عن تحديث الواجهة بالسعر المختار و من ثم Provider يقوم بتمرير العملة إلى API  ويجلب بيانات المنتجات بالعملة المرسلة, انه موضوع معقد نوعاً ما ولكن يمكن تطبيقه بشكلٍ ما.

الشرح بالكود لما تم ذكره مسبقاً .

 أقوم بتعريف مجموعة من العملات بناء على ما يتم استخدامه في api  مثل 

const kCurrencies = {
  "Currencies": [
    {
      "symbol": "\$",
      "currency": "USD",
    },
    {
      "symbol": "\€",
      "currency": "EUR"
    },
  ],
};

ثم في واجهة أختيار العملة أضع التالي 

List getAllCurrencies = kCurrencies["Currencies"] ?? [];

ثم أقوم بعمل loop على العملات المخزنة مسبقاً

for (var i = 0; i < getAllCurrencies.length; i++)
	Column(
	  children: <Widget>[
		Card(
		  child: ListTile(
			title: Text(
				'${getAllCurrencies[i]["currency"]} (${getAllCurrencies[i]["symbol"]})'),
			onTap: () {
			  setState(() {
				currency = getAllCurrencies[i]["currency"];
			  });
			  Provider.of<InitModel>(context, listen: false)
				  .changeCurrency(getAllCurrencies[i]["currency"], context);
			},
			trailing: currency == getAllCurrencies[i]["currency"]
				? const Icon(Icons.done)
				: Container(
					width: 50,
				  ),
		  ),
		),
		if (i != getAllCurrencies.length - 1)
		  const Divider(
			color: Colors.black,
		  ),
	  ],
	)

ثم أمرر العملة إلى دالة changeCurrency التي بدورها أقوم بتخزين العملة و تمريرها إلى Api لأرجع بيانات المنتجات بالعملة المختارة.

Future<void> changeCurrency(String item, BuildContext context) async {
      Provider.of<CartModel>(context, listen: false).changeCurrency(item);
      SharedPreferences prefs = await SharedPreferences.getInstance();
      currency = item;
      await prefs.setString("currency", currency);
      notifyListeners();
  }

 

  • 0
نشر (معدل)
بتاريخ 16 دقائق مضت قال بلال زيادة:

لم أتعامل مع APIS يوفر مثل هذه الخاصية من قبل, ولكن أعتمد في طريقتي على api الذي استخدمه في تطبيقي من حيث يكون للمنتج أكثر من سعر مثل USD , EUR. 

بحيث يكون هناك واجهة أخرى يختار منه المستخدم العملة التي يريد إظهارها في المنتجات , فعند الضغط على العملة المفضلة أقوم بتخزينها في SharedPrefrence و من ثم أمررها لِ Provider المسؤول عن تحديث الواجهة بالسعر المختار و من ثم Provider يقوم بتمرير العملة إلى API  ويجلب بيانات المنتجات بالعملة المرسلة, انه موضوع معقد نوعاً ما ولكن يمكن تطبيقه بشكلٍ ما.

الشرح بالكود لما تم ذكره مسبقاً .

 أقوم بتعريف مجموعة من العملات بناء على ما يتم استخدامه في api  مثل 


const kCurrencies = {
  "Currencies": [
    {
      "symbol": "\$",
      "currency": "USD",
    },
    {
      "symbol": "\€",
      "currency": "EUR"
    },
  ],
};

ثم في واجهة أختيار العملة أضع التالي 


List getAllCurrencies = kCurrencies["Currencies"] ?? [];

ثم أقوم بعمل loop على العملات المخزنة مسبقاً


for (var i = 0; i < getAllCurrencies.length; i++)
	Column(
	  children: <Widget>[
		Card(
		  child: ListTile(
			title: Text(
				'${getAllCurrencies[i]["currency"]} (${getAllCurrencies[i]["symbol"]})'),
			onTap: () {
			  setState(() {
				currency = getAllCurrencies[i]["currency"];
			  });
			  Provider.of<InitModel>(context, listen: false)
				  .changeCurrency(getAllCurrencies[i]["currency"], context);
			},
			trailing: currency == getAllCurrencies[i]["currency"]
				? const Icon(Icons.done)
				: Container(
					width: 50,
				  ),
		  ),
		),
		if (i != getAllCurrencies.length - 1)
		  const Divider(
			color: Colors.black,
		  ),
	  ],
	)

ثم أمرر العملة إلى دالة changeCurrency التي بدورها أقوم بتخزين العملة و تمريرها إلى Api لأرجع بيانات المنتجات بالعملة المختارة.


Future<void> changeCurrency(String item, BuildContext context) async {
      Provider.of<CartModel>(context, listen: false).changeCurrency(item);
      SharedPreferences prefs = await SharedPreferences.getInstance();
      currency = item;
      await prefs.setString("currency", currency);
      notifyListeners();
  }

 

مرحبا اخي الكريم شاكر لك ردك الغالي

لدي استفسار الان بهذا الطريقة انت تضع سعر ثابت الى الدولار مثلا ؟ ام تجلب اسعار العملات من الانترنت؟

هل يوجد شرح لفعل شي مشابه لطريقتك من خلال اليوتيوب او مدونة شرح تفصيلي اقصد؟

تم التعديل في بواسطة مروان مروان3
  • 0
نشر
بتاريخ 58 دقائق مضت قال مروان مروان3:

مرحبا اخي الكريم شاكر لك ردك الغالي

لدي استفسار الان بهذا الطريقة انت تضع سعر ثابت الى الدولار مثلا ؟ ام تجلب اسعار العملات من الانترنت؟

هل يوجد شرح لفعل شي مشابه لطريقتك من خلال اليوتيوب او مدونة شرح تفصيلي اقصد؟

لا المنتج يكون له أكثر من سعر وبناء على العملة المخزنة أظهر المنتج بالسعر المخزن. 

للأسف لا أعلم هل يوجد أو لا ولكن الفكرة تعتمد على أن يكون المنتج له أكثر من سعر.

  • 0
نشر
بتاريخ 2 دقائق مضت قال بلال زيادة:

لا المنتج يكون له أكثر من سعر وبناء على العملة المخزنة أظهر المنتج بالسعر المخزن. 

للأسف لا أعلم هل يوجد أو لا ولكن الفكرة تعتمد على أن يكون المنتج له أكثر من سعر.

نعم لقد فهمت الطريقة شاكر لك الغالي افادتك الكريمه

طريقتك جميله يمكن وضع اسعار اثنين او 3 بحد اقصى وتكون اسعار مثل الدولار وسعر الدوله المحليه او دوله عربيه ودوله اضافيه 

  • 0
نشر
بتاريخ الآن قال مروان مروان3:

نعم لقد فهمت الطريقة شاكر لك الغالي افادتك الكريمه

طريقتك جميله يمكن وضع اسعار اثنين او 3 بحد اقصى وتكون اسعار مثل الدولار وسعر الدوله المحليه او دوله عربيه ودوله اضافيه 

صحيح هي كذلك وهنا تستطيع إضافة اكثر من سعر للمنتج الواحد ويكون كامل التحكم من خلالك.

  • 0
نشر
بتاريخ الآن قال بلال زيادة:

صحيح هي كذلك وهنا تستطيع إضافة اكثر من سعر للمنتج الواحد ويكون كامل التحكم من خلالك.

الامر فعال ولكن هذا في حالة ان المنتجات التي سوف تدرج سوف تكون مني انا شخصيا في التطبيق 

ولكن لو كان المستخدمون سوف يدخول بيانات منتجاتهم سوف يكون الامر فيه مشقه عليهم كما تعلم الجميع يعرف سعر منتجه من خلال سعر عملة الدوله التي هو فيها ولكن بنسبه الى الدولار مثلا سوف يكونو مجبورين على استعمال تحويل العملة وما شابه حتى يستطيعون اضافة العمله بشكل هذا 

  • 0
نشر
بتاريخ الآن قال مروان مروان3:

الامر فعال ولكن هذا في حالة ان المنتجات التي سوف تدرج سوف تكون مني انا شخصيا في التطبيق 

ولكن لو كان المستخدمون سوف يدخول بيانات منتجاتهم سوف يكون الامر فيه مشقه عليهم كما تعلم الجميع يعرف سعر منتجه من خلال سعر عملة الدوله التي هو فيها ولكن بنسبه الى الدولار مثلا سوف يكونو مجبورين على استعمال تحويل العملة وما شابه حتى يستطيعون اضافة العمله بشكل هذا 

صحيح

  • 1
نشر (معدل)
بتاريخ 4 ساعات قال مروان مروان3:

لدي استفسار الان بهذا الطريقة انت تضع سعر ثابت الى الدولار مثلا ؟ ام تجلب اسعار العملات من الانترنت؟

أسعار العملات بالنسبة لعملة رئيسية و معدلات التحويل الخاصة بها متغيرة في الغالب و تحتاج ديناميكية لوضع الأسعار . تستطيع إما تخزين السعر بالدولار كـ base currency و من ثم جعل عملية التحويل ديناميكية عن طريق معدل تحويل . لا أظن أنه توجد حزمة جاهزة لتقوم بالعملية . لكن يمكنك إستعمال أحد هاته الـ APIS : هذا أو هذا لجلب معدلات التحويل من الدولار أو من أي base currency تستعملها . كما يمكنك مباشرة إرسال طلبات GET إلى نقطة الوصول هاته فقط و قراءة الخاصية geoplugin_currencyConverter لجلب معدل التحويل الذي يخص بالمستخدم نفسه (الذي تم إرسال الطلب عن طريقه) من الدولار من الرد مباشرة أيضا (مثلا لإظهار العملة بحسب بلد المستخدم حسب تحليل الـ IP) .

أيا كانت طريقتك في جلب معدل التحويل يمكن حساب السعر الجديد بسهولة عن طريق :

var new_price = base_price * exchange_rate_base_to_target /*من الرسبونس*/;

و كإقتراح لتحسين تجربة المستخدم و جعل عملية تثبيت العملة المحول إليها سهلة , قم بتخزين العملة و معدل التحويل في الجلسة أو الكوكي أو التخزين المحلي بدل إرسال طلب مع كل مرة .

ملاحظات :

يمكنك أيضا الإستغناء عن هاته العملية ككل و إدخال أسعار لمختلف العملات في حالة كان عدد العملات محدود جدا و تريد تحكم أكبر في الأسعار بحسب البلد أو العملة (خذ إحتمال أسعار السوق السوداء مثلا , فهي لا ترسل في الردود من أي API و قد تحتاجها لوضع تسعيرة معقولة في حال كان هنالك تباعد كبير بين سعر الصرف و سعر السوق السوداء) . و بنفس منطق واجهات التطبيق البرمجية المشار إليها يمكنك تخصيص نقطة وصول لجلب معدلات التحويل بتطبيقك نفسه و ليكن من جدول تنشأه : معدلات التحويل exchange_rates , و من ثم التحكم في هاته المعدلات على نطاق أوسع و التعديل بما يلائم سعر الصرف الحالي أو السعر الذي يناسب فرع المتجر بالعملة الفلانية .

تم التعديل في بواسطة Adnane Kadri
أخطاء إملائية
  • 0
نشر
بتاريخ 51 دقائق مضت قال Adnane Kadri:

أسعار العملات بالنسبة لعملة رئيسية و معدلات التحويل الخاصة بها متغيرة في الغالب و تحتاج ديناميكية لوضع الأسعار . تستطيع إما تخزين السعر بالدولار كـ base currency و من ثم جعل عملية التحويل ديناميكية عن طريق معدل تحويل . لا أظن أنه توجد حزمة جاهزة لتقوم بالعملية . لكن يمكنك إستعمال أحد هاته الـ APIS : هذا أو هذا لجلب معدلات التحويل من الدولار أو من أي base currency تستعملها . كما يمكنك مباشرة إرسال طلبات GET إلى نقطة الوصول هاته فقط و قراءة الخاصية geoplugin_currencyConverter لجلب معدل التحويل الذي يخص بالمستخدم نفسه (الذي تم إرسال الطلب عن طريقه) من الدولار من الرد مباشرة أيضا (مثلا لإظهار العملة بحسب بلد المستخدم حسب تحليل الـ IP) .

أيا كانت طريقتك في جلب معدل التحويل يمكن حساب السعر الجديد بسهولة عن طريق :


var new_price = base_price * exchange_rate_base_to_target /*من الرسبونس*/;

و كإقتراح لتحسين تجربة المستخدم و جعل عملية تثبيت العملة المحول إليها سهلة , قم بتخزين العملة و معدل التحويل في الجلسة أو الكوكي أو التخزين المحلي بدل إرسال طلب مع كل مرة .

ملاحظات :

يمكنك أيضا الإستغناء عن هاته العملية ككل و إدخال أسعار لمختلف العملات في حالة كان عدد العملات محدود جدا و تريد تحكم أكبر في الأسعار بحسب البلد أو العملة (خذ إحتمال أسعار السوق السوداء مثلا , فهي لا ترسل في الردود من أي API و قد تحتاجها لوضع تسعيرة معقولة في حال كان هنالك تباعد كبير بين سعر الصرف و سعر السوق السوداء) . و بنفس منطق واجهات التطبيق البرمجية المشار إليها يمكنك تخصيص نقطة وصول لجلب معدلات التحويل بتطبيقك نفسه و ليكن من جدول تنشأه : معدلات التحويل exchange_rates , و من ثم التحكم في هاته المعدلات على نطاق أوسع و التعديل بما يلائم سعر الصرف الحالي أو السعر الذي يناسب فرع المتجر بالعملة الفلانية .

مرحبا اخي الكريم

شاكر لك ردك وشرحك الغالي 

بنسبة الى موضوع API التي احصل منها على اسعار العملات اعتمادنا على سعر الدولار انا شفت هذا الموقع :

https://fixer.io/

يمنح الف طلب شهري بشكل مجاني وهذا شي ممتاز 

ولكن يجب الاسعار ليس على الدولار بل على EUR

وهذا الرابط الذي استعمله للاستعلام :

http://data.fixer.io/api/latest?access_key=**************&format=1

 

ما هو الحل لتغيره الى USD اذا كانت لديك فكره 

  • 0
نشر
بتاريخ 4 دقائق مضت قال مروان مروان3:

 

 

ولكن يجب الاسعار ليس على الدولار بل على EUR

وهذا الرابط الذي استعمله للاستعلام :


http://data.fixer.io/api/latest?access_key=**************&format=1
 

 

ما هو الحل لتغيره الى USD اذا كانت لديك فكره 

يمكنك إرسال طلب إلى نقطة الوصول هاته للتحويل من عملة معينة إلى أخرى :

https://data.fixer.io/api/convert
    ? access_key = API_KEY
    & from = GBP
    & to = JPY
    & amount = 25

كما يمكنك جلب معدلات التحويل بالنسبة لعملة رئيسية عن طريق هاته النقطة :

https://data.fixer.io/api/2013-12-24
    ? access_key = API_KEY
    & base = USD
    & symbols = JPY,CAD,EUR,DZD

لاحظ أنه قم تم تخصيص تاريخ معين يتم فيه جلب معدل التحويل الخاص بذاك التاريخ . يمكنك جعل العملية ديناميكية عن طريق : 

const date = new Date().toISOString().slice(0, 10);

ثم تمرير الثابت date .

لاحظ أيضا أنه يمكنك تخصيص العديد من العملات في مرة واحدة و هذا شيء جميل .
مثال عن رد من التوثيق الرسمي للواجهة :

{
    "success": true,
    "historical": true,
    "date": "2013-12-24",
    "timestamp": 1387929599,
    "base": "GBP",
    "rates": {
        "USD": 1.636492,
        "EUR": 1.196476,
        "CAD": 1.739516
    }
}

 

  • 0
نشر
بتاريخ On 30‏/4‏/2021 at 21:45 قال Adnane Kadri:

يمكنك إرسال طلب إلى نقطة الوصول هاته للتحويل من عملة معينة إلى أخرى :


https://data.fixer.io/api/convert
    ? access_key = API_KEY
    & from = GBP
    & to = JPY
    & amount = 25

كما يمكنك جلب معدلات التحويل بالنسبة لعملة رئيسية عن طريق هاته النقطة :


https://data.fixer.io/api/2013-12-24
    ? access_key = API_KEY
    & base = USD
    & symbols = JPY,CAD,EUR,DZD

لاحظ أنه قم تم تخصيص تاريخ معين يتم فيه جلب معدل التحويل الخاص بذاك التاريخ . يمكنك جعل العملية ديناميكية عن طريق : 


const date = new Date().toISOString().slice(0, 10);

ثم تمرير الثابت date .

لاحظ أيضا أنه يمكنك تخصيص العديد من العملات في مرة واحدة و هذا شيء جميل .
مثال عن رد من التوثيق الرسمي للواجهة :


{
    "success": true,
    "historical": true,
    "date": "2013-12-24",
    "timestamp": 1387929599,
    "base": "GBP",
    "rates": {
        "USD": 1.636492,
        "EUR": 1.196476,
        "CAD": 1.739516
    }
}

 

اهلا بك اخي الكريم

تحيه طيبه لك

طريقتك صحيحه 100%100 ولكن المشكله ان الموقع هذا حتى عشان تحصل على الاسعار ب USD  يحتاج اشتراك يعني توجد قيود على الامر

ولكن بعد البحث وجدت موقع جميل يقدم هذا الخدمه ممكن استعماله في بداية الامر وبعدها التفكير في شراء احد الحزم من الموقع هذا او موقع مختلف على حسب الرغبه 

https://free.currconv.com/

هذا اسم الموقع وهو يقدم الخدمه من 2013 تقريبا بشكل مجاني مع وجود الاشتركات لو رغب المستخدم للحصول على خدمه افضل 

انا قمت بتخلي عن الفكره في الوقت الحالي قمت بعملها بطريقه مختلفه كسعر ثابت فقط بعمله واحده 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...