سلام دوستان
وقتتون بخیر
من تازه فلاتر رو شروع کردم، برای 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 کمک کنید تا مشکل خودش را حل کند؛ اینطور میتوانیم با هم پیشرفت کنیم.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟