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

لوحة المتصدرين

  1. سمير عبود

    سمير عبود

    الأعضاء


    • نقاط

      3

    • المساهمات

      3552


  2. Sam Ahw

    Sam Ahw

    الأعضاء


    • نقاط

      2

    • المساهمات

      1388


  3. بلال زيادة

    بلال زيادة

    الأعضاء


    • نقاط

      2

    • المساهمات

      4376


  4. Salah Eddin Beriani2

    Salah Eddin Beriani2

    الأعضاء


    • نقاط

      2

    • المساهمات

      847


المحتوى الأكثر حصولًا على سمعة جيدة

المحتوى الأعلى تقييمًا في 02/10/21 في كل الموقع

  1. السلام عليكم انا اريد ان اتعلم الموشن جرافيك الا ان ما يردني انه اغلب المصممين يستعملون الموسيقى في اعمالهم وانا لا اريد ذالك هل يمكن ان اشترط على العميل عدم وضع الموسيقى ؟ بمعنى اصمم له المشهد بدون وضع الموسيقى ويمكن هو ان يضعها اويطلب من احد اخر وضعها ؟ يارب فهمتوني و شكرا لكم
    1 نقطة
  2. هل لدورة واجهة المستخدم برنامج لصناعة الموقع أرجو أن تجبو عن هذا السؤال
    1 نقطة
  3. لا أعلم في حال كان الكود الذي قمت بكتابته هنا كاملاً لأنني لم ألاحظ مكان وجود رابط الاتصال مع paypal ولكن يجب عليك تغييره من api.sandbox إلى api.paypal وعادة يتم تقسيم الكود إلى 3 ملفات للسهولة، سأقوم بوضع مثال شامل لك لكي تستطيع الاستفادة منه بشكل كامل: أولاً ملف PaypalServices.dart وهو الملف المسؤول عن الاتصال مع paypal: import 'package:http/http.dart' as http; import 'dart:async'; import 'dart:convert' as convert; import 'package:http_auth/http_auth.dart'; class PaypalServices { String domain = "https://api.sandbox.paypal.com"; // for sandbox mode للتجربة فقط // String domain = "https://api.paypal.com"; // for production mode عند النشر نقوم باستخدام هذا الرابط // هنا يجب عليك استبدال المعلومات التالية بمعلومات حسابك String clientId = 'Ab4vS4vmfQFgUuQMH49F9Uy3L1FdNHtfGrASCyjNijm_EkHWCFM96ex0la-YFbwavw41R3rTKU3k_Bbm'; String secret = 'EDjvPfYgTYqdYWR2BfOiBW4dz_jeeuadqH7Z98pZMDvY33PcViiooqYFWVPFSGbfKBfNOb3LnroSI1hv'; // for getting the access token from Paypal Future<String> getAccessToken() async { try { var client = BasicAuthClient(clientId, secret); var response = await client.post('$domain/v1/oauth2/token?grant_type=client_credentials'); if (response.statusCode == 200) { final body = convert.jsonDecode(response.body); return body["access_token"]; } return null; } catch (e) { rethrow; } } // for creating the payment request with Paypal Future<Map<String, String>> createPaypalPayment( transactions, accessToken) async { try { var response = await http.post("$domain/v1/payments/payment", body: convert.jsonEncode(transactions), headers: { "content-type": "application/json", 'Authorization': 'Bearer ' + accessToken }); final body = convert.jsonDecode(response.body); if (response.statusCode == 201) { if (body["links"] != null && body["links"].length > 0) { List links = body["links"]; String executeUrl = ""; String approvalUrl = ""; final item = links.firstWhere((o) => o["rel"] == "approval_url", orElse: () => null); if (item != null) { approvalUrl = item["href"]; } final item1 = links.firstWhere((o) => o["rel"] == "execute", orElse: () => null); if (item1 != null) { executeUrl = item1["href"]; } return {"executeUrl": executeUrl, "approvalUrl": approvalUrl}; } return null; } else { throw Exception(body["message"]); } } catch (e) { rethrow; } } // for executing the payment transaction Future<String> executePayment(url, payerId, accessToken) async { try { var response = await http.post(url, body: convert.jsonEncode({"payer_id": payerId}), headers: { "content-type": "application/json", 'Authorization': 'Bearer ' + accessToken }); final body = convert.jsonDecode(response.body); if (response.statusCode == 200) { return body["id"]; } return null; } catch (e) { rethrow; } } } الملف الثاني وهو PaypalPayment.dart المسؤول عن عرض webview التي ستقوم بدورها بعرض واجهة الدفع، وفي المثال التالي تم عرض شراء منتج موبايل على سبيل المثال كالتالي: import 'dart:core'; import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:webview_flutter/webview_flutter.dart'; import 'PaypalServices.dart'; class PaypalPayment extends StatefulWidget { final Function onFinish; PaypalPayment({this.onFinish}); @override State<StatefulWidget> createState() { return PaypalPaymentState(); } } class PaypalPaymentState extends State<PaypalPayment> { GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>(); String checkoutUrl; String executeUrl; String accessToken; PaypalServices services = PaypalServices(); // you can change default currency according to your need Map<dynamic,dynamic> defaultCurrency = {"symbol": "USD ", "decimalDigits": 2, "symbolBeforeTheNumber": true, "currency": "USD"}; bool isEnableShipping = false; bool isEnableAddress = false; String returnURL = 'return.example.com'; String cancelURL= 'cancel.example.com'; @override void initState() { super.initState(); Future.delayed(Duration.zero, () async { try { accessToken = await services.getAccessToken(); final transactions = getOrderParams(); final res = await services.createPaypalPayment(transactions, accessToken); if (res != null) { setState(() { checkoutUrl = res["approvalUrl"]; executeUrl = res["executeUrl"]; }); } } catch (e) { print('exception: '+e.toString()); final snackBar = SnackBar( content: Text(e.toString()), duration: Duration(seconds: 10), action: SnackBarAction( label: 'Close', onPressed: () { // Some code to undo the change. }, ), ); _scaffoldKey.currentState.showSnackBar(snackBar); } }); } // item name, price and quantity String itemName = 'iPhone X'; String itemPrice = '1.99'; int quantity = 1; Map<String, dynamic> getOrderParams() { List items = [ { "name": itemName, "quantity": quantity, "price": itemPrice, "currency": defaultCurrency["currency"] } ]; // checkout invoice details String totalAmount = '1.99'; String subTotalAmount = '1.99'; String shippingCost = '0'; int shippingDiscountCost = 0; String userFirstName = 'Gulshan'; String userLastName = 'Yadav'; String addressCity = 'Delhi'; String addressStreet = 'Mathura Road'; String addressZipCode = '110014'; String addressCountry = 'India'; String addressState = 'Delhi'; String addressPhoneNumber = '+919990119091'; Map<String, dynamic> temp = { "intent": "sale", "payer": {"payment_method": "paypal"}, "transactions": [ { "amount": { "total": totalAmount, "currency": defaultCurrency["currency"], "details": { "subtotal": subTotalAmount, "shipping": shippingCost, "shipping_discount": ((-1.0) * shippingDiscountCost).toString() } }, "description": "The payment transaction description.", "payment_options": { "allowed_payment_method": "INSTANT_FUNDING_SOURCE" }, "item_list": { "items": items, if (isEnableShipping && isEnableAddress) "shipping_address": { "recipient_name": userFirstName + " " + userLastName, "line1": addressStreet, "line2": "", "city": addressCity, "country_code": addressCountry, "postal_code": addressZipCode, "phone": addressPhoneNumber, "state": addressState }, } } ], "note_to_payer": "Contact us for any questions on your order.", "redirect_urls": { "return_url": returnURL, "cancel_url": cancelURL } }; return temp; } @override Widget build(BuildContext context) { print(checkoutUrl); if (checkoutUrl != null) { return Scaffold( appBar: AppBar( backgroundColor: Theme.of(context).backgroundColor, leading: GestureDetector( child: Icon(Icons.arrow_back_ios), onTap: () => Navigator.pop(context), ), ), body: WebView( initialUrl: checkoutUrl, javascriptMode: JavascriptMode.unrestricted, navigationDelegate: (NavigationRequest request) { if (request.url.contains(returnURL)) { final uri = Uri.parse(request.url); final payerID = uri.queryParameters['PayerID']; if (payerID != null) { services .executePayment(executeUrl, payerID, accessToken) .then((id) { widget.onFinish(id); Navigator.of(context).pop(); }); } else { Navigator.of(context).pop(); } Navigator.of(context).pop(); } if (request.url.contains(cancelURL)) { Navigator.of(context).pop(); } return NavigationDecision.navigate; }, ), ); } else { return Scaffold( key: _scaffoldKey, appBar: AppBar( leading: IconButton( icon: Icon(Icons.arrow_back), onPressed: () { Navigator.of(context).pop(); }), backgroundColor: Colors.black12, elevation: 0.0, ), body: Center(child: Container(child: CircularProgressIndicator())), ); } } } وأخيراً، الملف الرئيسي الذي سيحوي زر عند الضغط عليه سيقوم بتحويلك إلى واجهة paypal السابقة، makePayment.dart: import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; import 'PaypalPayment.dart'; class makePayment extends StatefulWidget { @override _makePaymentState createState() => _makePaymentState(); } class _makePaymentState extends State<makePayment> { TextStyle style = TextStyle(fontFamily: 'Open Sans', fontSize: 15.0); final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>(); @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, home: new Scaffold( backgroundColor: Colors.transparent, key: _scaffoldKey, appBar: PreferredSize( preferredSize: Size.fromHeight(45.0), child: new AppBar( backgroundColor: Colors.white, title: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( 'Paypal Payment Example', style: TextStyle( fontSize: 16.0, color: Colors.red[900], fontWeight: FontWeight.bold, fontFamily: 'Open Sans'), ), ], ), ), ), body:Container( width: MediaQuery.of(context).size.width, child: Container( child: Column( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ RaisedButton( onPressed: (){ // make PayPal payment Navigator.of(context).push( MaterialPageRoute( builder: (BuildContext context) => PaypalPayment( onFinish: (number) async { // payment done print('order id: '+number); }, ), ), ); }, child: Text('Pay with Paypal', textAlign: TextAlign.center,), ), ], ), ) ), ) ); } } بالتوفيق،
    1 نقطة
  4. أذن الان هو وضع live mode, انتا مستخدم أي package؟
    1 نقطة
  5. لو لاحظت في الكود المستخدم انه يوجد متغير باسم isEnvironmentSandbox وهذا يأخذ قيمة bool يعني true or false إذا أردت تغيير الوضع إلى live mode قم بتغيير قيمة isEnvironmentSandbox إلى false.
    1 نقطة
  6. مرحبا اخي القاء نظرة على اداة مثل webpack في المراحل الاولى من التعلم شئ جيد حيث انك ستعرف انه هناك اداة يمكنها القيام بوظيفة ما اما عن التعمق فيها في مراحلك الاولى فهذا خطا لانه لديك اولويات و مهارات يجب ان تكتسبها عوض ان تتعلم كيف تجهز مشروع واذا اطلعت على مكتبة react ستجد ان لديهم مشروع مجهز يمكنك تسطيبه عن طريق create-react-app وكذلك الحال مع كل المكتبات الاخرى يعني انك ستعمل على مشروع يحتوي webpack لكنك لن تظطر للتعامل معها ابدا وعندما تتقدم في مسيرتك البرمجية وتصبح مرتاح مع الطبقات الاولى الاساسية يمكنك ان تتعلم webpack و ذلك سيمكنك من بناء ادوات لنفسك ولمطورين اخرين لذا لا تقلق اذا واجهت صعوبات فيها الان يعني في المجمل انت لا يجب ان تقلق حيالها الان
    1 نقطة
  7. السلام عليكم أتمنى أن تكونوا بخير لماذا عندما أقوم بعمل مشروع على سكراتش لا يمكنني تنزيله على الكومبيوتر و عندا ينزل لا يفتح و يقولون أن هناك خطأ , أرجو مساعدتي و شكرا لكم
    1 نقطة
  8. مرحبًا هناء. في البداية من المفترض أن نقوم بتثبيت التطبيق الخاص ب scratch على الجهاز الخاص بك من هنا. بعد الانتهاء من تنزيل التطبيق و تنصيبه، يمكنك فتح المشاريع كما يلي: نقوم بفتح تطبيق scratch نضغط على file من الشريط العلوي ستظهر لنا قائمة نختار منها load from your computer و بعدهاا توجهي إلى المسار الذي يوجد به ملف المشروع و قومي باختياره
    1 نقطة
  9. يُمكنك عمل ذلك من خلال AppServiceProvider من خلال التابع boot: <?php public function boot() { view()->share('categories', Category::all()); } مع تضمين الكلاس Category في بداية الملف: <?php use App\Models\Category; // إستدعاء الكلاس يكون على حسب مجال الأسماء الخاص به و بهذا الشكل يُمكنك إستخدام المُتغير categories في أي صفحة عرض تريدها. لانه قد تمت مشاركته مع جميع الviews. لكن إذا أردت مُشاركة المُتغير categories مع صفحة عرض مُعينة مثلاً و ليس كل صفحات العرض يُمكنك ذلك من خلال AppServiceProvider من خلال التابع boot: <?php use App\Models\Category; public function boot() { //view()->share('categories', Category::all()); view()->composer('layouts.app', function($view) { $view->with('categories', Category::all()); }); } بهذه الطريقة أصبح المُتغير categories مُتاحا لصفحة العرض app.blade.php يُمكنك إستخدامه فيها لكن بعكس الطريقة الأولى لن تتمكن من إستخدامه في صفحات عرض أخرى لأنه متاح لهذه الصفحة فقط، اقصد لو استخدمنا المتغير لعرض الأقسام في صفحة app.blade.php ستعرض الأقسام في بقية الصفحات الأخرى التي تعتمد على هذه الصفحة كقالب، لكن لن تتمكن الصفحات الأخرى من إستخدام المُتغير بطريقة أو بأخرى لأنه لن يكون متاحاً لها فهو متاح للإستخدام فقط في الصفحة app.blade.php، ماذا لو أردت إتاحة هذا المُتغير لمجموعة من صفحات العرض (views) تستخدمه كيفما شاءت!!؟ يُمكنك ذلك كما يلي: <?php use App\Models\Category; public function boot() { //view()->share('categories', Category::all()); view()->composer(['layouts.app', 'posts.create'], function($view) { $view->with('categories', Category::all()); }); } في هذا المثال مررنا المتغير categories لكل من صفحة العرض app.blade.php الموجودة في مجلد layouts و ايضاً صفحة العرض create.blade.php الموجدة في مجلد posts سيكون المُتغير متاح لكليهما، و بهذه الطريقة يُمكنك تمرير المتغير لأي صفحة أخرى تريد. يمكنك الإطلاع على توثيق موسوعة حسوب الخاص بهذا الموضوع: مشاركة البيانات و مؤلّفو الواجهات
    1 نقطة
  10. هناك عدة طرق لعمل ذلك في لارافيل بإستخدام eloquent مثلاً فكما قلت أنت لا يوجد تابع last يُمكنك إستخدام التابع latest مع التابع first لتحقيق ذلك بهذه الطريقة: إذا أردنا جلب آخر مستخدم: <?php User::latest()->first(); أو يُمكنك إستعمال التابع orderByDesc مع التابع first: User::orderByDesc('created_at')->first(); أما بخصوص هذا السؤال: يُمكنك ذلك عن طريق إستخدام التابع inRandomOrder و التابع first كما يلي: User::inRandomOrder()->first(); و سيتم جلب مُستخدم عشوائي في كل مرة.
    1 نقطة
  11. لجلب آخر سجل تمت إضافته في جدول ما في لارافيل يمكنك الاعتماد على قيمة حقل created_at واستخدام latest كالتالي: return DB::table('files')->latest('created_at')->first(); ويوجد أيضاً طريقة أخرى عن طريق ترتيب النتائج باستخدام orderBy واستخدام desc للترتيب من الأكبر إلى الأصغر ثم أخذ أول قيمة كالتالي: return DB::table('files')->orderBy('created_at', 'desc')->first(); أما لجلب سجلات عشوائية من الجدول يمكنك استخدام تابع مختصر تقدمه لارافيل كالتالي: User::all()->random(1); حيث تستطيع تمرير عدد السجلات التي ترغب بجلبها. وفي حال كنت تستعمل نسخة أقدم من لارافيل يمكنك تنفيذ ذلك باستخدام إحدى الطريقتين: أولاً عن طريق Eloquent: public function index() { $data = DB::table('users') ->inRandomOrder() ->limit(1) ->get(); } أو عن طريق المودل Model كالتالي: public function index() { $data = User::inRandomOrder() ->limit(1) ->get(); }
    1 نقطة
  12. مرحبا اولا في عالم البرمجة وفي الانترنت ككل لا يوجد دورة تكفي لتعليمك لغة ما بكل استخداماتها ولكن ملقي الدورة يركز على اهم الاستخدامات التي تجعلك ترتاحين للغة لتباشري فيما بعد اكتشاف الاستخدامات الكثيرة الاخرى واذا كان هدفك معرفة لغة javascript معرفة شبه كاملة فيمكنك اخذ مسار تعليمي يبدا بتلقيك لدورة javascript ثم بعد ذلك سيكون لديك كم معلوماتي كافي لتباشري بالتفكير بمشاريع صغيرة وانجازها لوحدك وحتما ستواجهين مشاكل وهنا ياتي فن البحث في الانترنت عن حل المشاكل البرمجية وبانجازك لما يقارب لعشر مشاريع سوف تكتسبين خبرة في المادة وسوف تكتسبين مهارة التعلم الذاتي وهذه هي المهارة الاهم في مجال البرمجة. بالتوفيق
    1 نقطة
  13. تثبيت webpack سهل جداً و اعرف انك قد قمت بتثبيته، و إنما مُشكلتك في إستعماله و إعداد ملف الإعدادات الخاص به هنا قد تجد بعض التعقيدات، لكن لا تقلق فأنت لم تستخدمه من قبل لذلك ستجد بعض الصعوبة في ذلك و في فهم ما يقوم به المُدرب، من الطبيعي جدا عند تعلمنا لشيء جديد نجده صعب لكن مع مراجعة الدروس و الممارسة أكثر و إستعمال التقنية أكثر في مشروعين أو ثلاثة نتعود على هذه التقنية و نجد أنفسنا قد أتقناها بنسبة كبيرة، أنصحك بالتركيز أكثر مع ما يفعله المُدرب في هذه المرحلة و مُراجعة الدرس أكثر من مرة إذا لم يتضح لك الفهم، كما يُمكنك أيضاً البحث في الأكاديمية او من خلال مُحرك البحث لديك عن أي مصطلح تجده مُبهم او يُمكنك الإستفسار أيضاً، بعد مُدة ستجد أن الأمور واضحة المعالم لديك و ستتمكن من إزالة التعقيد الذي تجده حالياً. بالتوفيق.
    1 نقطة
×
×
  • أضف...