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

السؤال

نشر

- ( الخلاصة التي استفدتها أن الموضوع من قبل فلاتر يتم ب: responce.StatusCode عندما تكون قيمته تساوي ب 422 )، لكن لم تنجح معي للأسف في فلاتر علما أني أستخدم حزمة Dio ومع العلم أيضا أن VS code يظهر لي أن Status code الذي حصل 422 لكن لم يستطع أن يقرأ الرد مع العمل أيضا أن الرد شغال وقمت بتحربته باستخدام Postman كما يظهر في الصورة المرفقة.

- أريد عندما يقوم المستخدم سواء بعملية ( login / register )، وكان رقم الجوال مسجل في قاعدة البيانات، أن يقوم بإظهر رسالة مناسبة له، ملاحظة / ال validation من جهة Laravel جاهز، ويقوم فعلا بإرجاع رسالة أن المستخدم مسجل بالفعل.

- فما العمل؟ 

Screenshot (51).png

Recommended Posts

  • 1
نشر

هل api محلي أم على استضافة , وما هو الرابط؟ 

سواء استخدمت حزمة dio أو HTTP فالمنطق واحد , يمكنك إرجاع شكل response مثلا هكذا ( أنظر الصورة المرفقة) , يمكنك إنشاء Future من نوع Map واسمه register 

Future<Map> register(String name, String email, String password) async {
    final url = Config.url ;

    Map<String, String> body = {
      'name': name,
      'email': email,
      'password': password,
    };

    Map<String, dynamic> result = {
      "success": false,
      "message": 'Unknown error.'
    };

    final response = await http.post(
      Uri.parse(url),
      body: body,
    );

    if (response.statusCode == 200 || response.statusCode == 201) {
      _status = Status.Authenticated;
      result['success'] = true;
      result['message'] = 'Successfull Login';
      notifyListeners();
      return result;
    }

    Map apiResponse = json.decode(response.body);

    if (response.statusCode == 400) {
      if (apiResponse['message'] != null) {
        result['message'] = apiResponse['message'];
        return result;
      }
      return result;
    }

    return result;
  }

ثم في واجهة التسجيل 

Future<void> submit() async {
    final form = _formKey.currentState;
    if (form.validate()) {
      response = await Provider.of<AuthProvider>(context, listen: false)
          .register(name, email, password);
      print(response);
      if (response['success'] == true) {
        //print(response['email']);
        await Provider.of<AuthProvider>(context, listen: false).login(
          email,
          password,
        );
        Navigator.pushNamed(context, '/home');
      } else {
        setState(() {
          message = response['message'];
        });
      }
    }
  }

أو يمكنك إرجاع alertDialog 

_showError() {
    showDialog(
        context: context,
        builder: (_) => new AlertDialog(
              title: new Text("ERROR"),
              content: new Text("ERROR"),
              actions: <Widget>[
                TextButton(
                  style: ButtonStyle(
                    foregroundColor: MaterialStateProperty.all<Color>(Colors.blue),
                    backgroundColor: MaterialStateProperty.all<Color>(Colors.blue),
                  ),
                  child: Text("Colse"),
                  onPressed: () {
                    Navigator.of(context).pop();
                  },
                ),
                /*TextGradientButton(
                  child: Text(
                    S.of(context).close,
                    style: TextStyle(color: Colors.white),
                  ),
                  gradient: LinearGradient(
                    colors: <Color>[Colors.orange, Colors.red],
                  ),
                  onPressed: () {
                    Navigator.of(context).pop();
                  },
                ),*/
              ],
            ));
    return Container();
  }

ويمكنك تغيير 

setState(() {
message = response['message'];
});

إلى 

_showError();

هذه مجرد فكرة للتوضيح, أو يمكنك تزويدي بملفات لارافل و مشروع flutter ويمكنني الإطلاع عليه.

40.png

  • 0
نشر
بتاريخ الآن قال Mohammed Abu Yousef:

- رفعته بالأمس على استضافة مجانية وها هو الرابط ( الأخطاء هي هي نفسها سواء محلي أم لا )

https://mohammedyousef.000webhostapp.com

وسأرفق لك صورة حول الرد الذي يصل ( ال api تمام، المشكلة ب فلاتر )

أعطني الرابط كاملاً لل api.

  • 0
نشر
بتاريخ الآن قال Mohammed Abu Yousef:

POST - https://mohammedyousef.000webhostapp.com/api/v1/sanctum/token

هذا الرابط لعملية ال login, ويحتاج 3 مدخلات phone_number,password,device_name

- لل register

POST - https://mohammedyousef.000webhostapp.com/api/v1/register

ويحتاج phone_number,password,name

يمكنك تجربة استعلام عن الريسبونس 

if (response.statusCode == 400) {
      if (apiResponse['message'] != null) {
        result['message'] = apiResponse['errors']['phone_number'];
        return result;
      }
      return result;
    }

أو 

if (response.statusCode == 400) {
      if (apiResponse['message'] != null) {
        result['message'] = apiResponse['phone_number'];
        return result;
      }
      return result;
    }

في الكود السابق الذي إرفقته في إجابتي الأولى.

  • 0
نشر

تمام، بس خلينا وحدة وحدة

الآن المشكلة عندي انو VS Code بيوقف عن العمل وبيقل التطبيق قبل م ينفذ الكود داخل الشرط التالي:

if(responce.StatusCode == 422){
	// any thing like print('hello')
}

مع انو بعد م يتوقف التطبيق بيظهرلي في VS Code في ال Exeption ان الايرور 422

  • 0
نشر
بتاريخ 1 ساعة قال Mohammed Abu Yousef:

تمام، بس خلينا وحدة وحدة

الآن المشكلة عندي انو VS Code بيوقف عن العمل وبيقل التطبيق قبل م ينفذ الكود داخل الشرط التالي:


if(responce.StatusCode == 422){
	// any thing like print('hello')
}

مع انو بعد م يتوقف التطبيق بيظهرلي في VS Code في ال Exeption ان الايرور 422

تعديل / نوعا ما اشتغلت، إذا حصل أي إشكال سأقوم بإبلاغك إن شاء الله، وشكرا

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...