import 'dart:async'; import 'package:didvan/models/view/app_bar_data.dart'; import 'package:didvan/pages/home/settings/profile/widgets/profile_photo.dart'; import 'package:didvan/pages/home/settings/widgets/menu_item.dart'; import 'package:didvan/providers/user_provider.dart'; import 'package:didvan/routes/routes.dart'; import 'package:didvan/widgets/didvan/button.dart'; import 'package:didvan/widgets/didvan/card.dart'; import 'package:didvan/widgets/didvan/divider.dart'; import 'package:didvan/widgets/didvan/scaffold.dart'; import 'package:didvan/widgets/didvan/text_field.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class Profile extends StatefulWidget { const Profile({Key? key}) : super(key: key); @override State createState() => _ProfileState(); } class _ProfileState extends State { Timer? _timer; late String fullName; String? username; String? email; final _formKey = GlobalKey(); @override void initState() { final user = context.read().user; fullName = user.fullName; username = user.username; email = user.email; super.initState(); } @override Widget build(BuildContext context) { return Consumer( builder: (context, state, child) => Material( child: Stack( children: [ Form( key: _formKey, child: DidvanScaffold( padding: const EdgeInsets.only(left: 16, right: 16, bottom: 92), appBarData: AppBarData(title: 'ویرایش پروفایل'), children: [ const ProfilePhoto(), const SizedBox(height: 16), DidvanCard( child: Column( children: [ DidvanTextField( title: 'نام و نام‌ خانوادگی', hintText: 'نام و نام خانوادگی', initialValue: state.user.fullName, onChanged: (value) { _setButtonState(); fullName = value; }, ), const SizedBox(height: 16), DidvanTextField( title: 'موبایل', enabled: false, hintText: state.user.phoneNumber, ), const SizedBox(height: 16), DidvanTextField( title: 'نام کاربری', hintText: 'انتخاب نام کاربری (اختیاری)', onChanged: _onUsernameChanged, initialValue: state.user.username, validator: (value) async { final result = await state.checkUsername(value); if (result == false) { return 'نام کاربری در دسترس نمی‌باشد'; } }, ), const SizedBox(height: 16), DidvanTextField( title: 'ایمیل', hintText: 'مثال: example@email.com', onChanged: (value) { _setButtonState(); email = value; }, initialValue: state.user.email, validator: (value) async { bool emailValid = RegExp( r"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\.[a-zA-Z]+") .hasMatch(value); if (!emailValid) { return 'ایمیل وارد شده معتبر نمی‌باشد'; } }, ), // const SizedBox(height: 16), // DidvanSwitch( // value: true, // title: 'ورود با اثر انگشت', // onChanged: (value) => {}, // ), const DidvanDivider(), MenuItem( title: 'تغییر رمز عبور', onTap: () => Navigator.of(context).pushNamed( Routes.authenticaion, arguments: true, ), ), ], ), ), ], ), ), Positioned( left: 20, right: 20, bottom: 20, child: DidvanButton( key: UniqueKey(), title: 'ذخیره تغییرات', onPressed: () { if (_formKey.currentState!.validate()) { state.editProfile(fullName, username, email); } }, enabled: _buttonEnabled, ), ), ], ), ), ); } void _setButtonState() { if (!_buttonEnabled) { setState(() {}); } } bool get _buttonEnabled { final user = context.read().user; return !(user.email == email && user.fullName == fullName && user.username == username); } void _onUsernameChanged(String value) { _setButtonState(); username = value; _timer?.cancel(); if (value.length < 5) { return; } _timer = Timer(const Duration(seconds: 1), () { _formKey.currentState!.validate(); }); } }