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

عمل زر تذكرني في فلاتر

Khaled Mohammed7

السؤال

Recommended Posts

  • 0

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

Column(
children: <Widget>[
  Row(
  children: <Widget>[
  Checkbox(
  checkColor: Colors.greenAccent,
  activeColor: Colors.blue,
  value: this.valuefirst,
  onChanged: (bool value) {
  setState(() {
  this.valuefirst = value;
  });
  },
  ),
  Text('Remember me ',style: TextStyle(fontSize: 17.0), ),
  ],
  ),
  ],
  ),

و من ثم يمكنك تعريف متغير valuefirst بهذه الطريقة 

bool valuefirst = false;

وتكون قيمته false أي حقل الأختيار غير معلم , ثم يمكننا إرسال قيمة هذا الحقل إلى الدالة التي نقوم بالتحقق منها من عملية تسجيل الدخول مثل الكود التالي 

await Provider.of<AuthProvider>(context, listen: false).login(username, password, this.valuefirst);

فإذا كانت قيمة valuefirst هي false أي لا يحفظ بيانات تسجيل الدخول , أما إذا كانت true فيجب حفظ هذه البيانات لعمل تسجيل دخول تلقائي في المرة القادمة التي يدخل بها العضو التطبيق. ثم في دالة login في نقوم باستخدام قيمة المتغير valuefirst بهذا الشكل 

Future<bool> login(String email, String password, bool savePassword) async {

    final url = 'هنا رابط مسار login ';

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

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

    if (response.statusCode == 200) {
      Map<String, dynamic> apiResponse = json.decode(response.body);
      if (apiResponse['code'] == 200) {
        _token = apiResponse['user']['token'];
        _id = apiResponse['user']['id'];
        _email = apiResponse['user']['email'];
        _name = apiResponse['user']['name'];
        _savePassword = savePassword;
        await storeUserData(apiResponse, _savePassword);
        notifyListeners();
        return true;
      } else {
        _status = Status.Unauthenticated;
        _token = null;
        _email = null;
        _name = null;
        _savePassword = false;
        notifyListeners();
        return false;
      }
    }

    if (response.statusCode == 401) {
      notifyListeners();
      return false;
    }

    notifyListeners();
    return false;
  }

فلاحظ أيضا قمنا بإرسال قيمة هذا المتغير مرة أخرى في دالة storeUserData

storeUserData(apiResponse, bool savePassword) async {
    SharedPreferences storage = await SharedPreferences.getInstance();
    await storage.setString('token', apiResponse['user']['token']);
    await storage.setString('email', apiResponse['user']['email']);
    await storage.setString('name', apiResponse['user']['name']);
    await storage.setBool('savePassword', savePassword);
  }

لكي نخزن قيمة هذا الحقل في SharedPrefrence و نستطيع جلب هذه القيمة من أي مكان في التطبيق. 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...