JBolouri
2 سال پیش توسط JBolouri مطرح شد
0 پاسخ

مشکل در state management

سلام دوستان
وقتتون بخیر
من تازه فلاتر رو شروع کردم، برای state management از پکیج getx استفاده کردم.
یه صفحه لاگین دارم که فراره وقتی روی دکمه ورود میزنم، این دکمه به حالت لودینگ تغییر کنه..

یدونه کنترلر دارم:

import 'package:get/get.dart';

class LoginController extends GetxController {
  var isLoading = false.obs;

  void login() async {
    isLoading.value = true;
    await Future.delayed(Duration(seconds: 3));
    isLoading.value = false;
  }
}

فعلا فقط گفتم بمدت سه ثانیه در حالت لودینگ باشه بعدش دوباره دکمه برگرده به ظاهر معمولیش..

توی ویو هم این کد ها رو نوشتم:

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';
import 'package:mask_text_input_formatter/mask_text_input_formatter.dart';
import 'package:project/controllers/login_controller.dart';

class LoginScreen extends GetView<LoginController> {
  // const LoginScreen({super.key});

  var maskFormatter = new MaskTextInputFormatter(
      mask: '#### ### ####',
      filter: {"#": RegExp(r'[0-9]')},
      type: MaskAutoCompletionType.lazy);
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: Container(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Expanded(
                flex: 1,
                child: Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                      Row(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: [
                          Container(
                              child: Text(
                            'لطفاً شماره موبایل خود را وارد نمایید',
                            textAlign: TextAlign.center,
                          )),
                        ],
                      ),
                      SizedBox(height: 20),
                      Row(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: [
                          Container(
                            width: 300,
                            child: TextField(
                              textAlign: TextAlign.center,
                              inputFormatters: <TextInputFormatter>[
                                FilteringTextInputFormatter.allow(
                                  RegExp(r'[0-9]'),
                                ),
                                maskFormatter
                              ],
                              keyboardType: TextInputType.numberWithOptions(
                                  decimal: false),
                              textDirection: TextDirection.ltr,
                              decoration: new InputDecoration(
                                border: new OutlineInputBorder(
                                  borderSide: new BorderSide(
                                    color: Colors.teal,
                                  ),
                                  borderRadius: BorderRadius.circular(25),
                                ),
                              ),
                            ),
                          ),
                        ],
                      ),
                    ]),
              ),
              Align(
                  alignment: Alignment.bottomCenter,
                  child: Column(
                    children: [
                      Row(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: [
                          Container(
                              margin: EdgeInsets.only(bottom: 15),
                              // alignment: Alignment.bottomCenter,
                              width: 300,
                              child: Obx(
                                () => ElevatedButton(
                                    style: ButtonStyle(
                                        // padding: EdgeInsets.all(10),
                                        shape: MaterialStateProperty.all<
                                                RoundedRectangleBorder>(
                                            RoundedRectangleBorder(
                                                borderRadius:
                                                    BorderRadius.circular(25.0),
                                                side: BorderSide(
                                                    color: Colors.red))),
                                        padding: MaterialStateProperty.all(
                                          EdgeInsets.symmetric(vertical: 15),
                                        ),
                                        elevation: MaterialStateProperty.all(0),
                                        backgroundColor:
                                            MaterialStateProperty.all(
                                                Colors.deepOrange)),
                                    child: LoginController().isLoading.value
                                        ? CircularProgressIndicator(
                                            strokeWidth: 1,
                                            color: Colors.white,
                                          )
                                        : Text('ورود'),
                                    onPressed: LoginController().isLoading.value
                                        ? null
                                        : () => LoginController().login()),
                              ))
                        ],
                      ),
                    ],
                  )),
            ],
          ),
        ),
      ),
    );
  }
}

کنترلر رو هم با استفاده از binding در پروژه لود کردم..
الان همه چی درست کار میکنه وقتی روی دکمه ورود میزنم وارد اون کنترلر میشه و کدها رو به درستی اجرا میکنه. فقط obx توی صفحه تغییرات رو انجام نمیده.. میخوام وقتی دکمه رو زدم بره به حالت لودینگ..

ممنون میشم کمکم کنید مشکل رو رفع کنم.


ثبت پرسش جدید

به همدیگه کمک کنیم

به JBolouri کمک کنید تا مشکل خودش را حل کند؛ این‌طور می‌توانیم با هم پیشرفت کنیم.

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام