import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:lamiter/Class/API/api.dart'; import 'package:lamiter/Class/Question/question.dart'; import 'package:lamiter/Class/User/client.dart'; import 'package:lamiter/Component/AppBar/title_app_bar.dart'; import 'package:lamiter/Component/Button/submit_button.dart'; import 'package:lamiter/Component/loading.dart'; import 'package:lamiter/Extension/build_context.dart'; import 'package:lamiter/Extension/iterable.dart'; import 'package:lamiter/Provider/Form/create_edit_client_form_provider.dart'; import 'package:lamiter/Provider/User/manager_provider.dart'; import 'package:provider/provider.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; class CreateEditClientPage extends StatefulWidget { final Client? client; const CreateEditClientPage({super.key, this.client}); @override State createState() => _CreateClientPageState(); } class _CreateClientPageState extends State { final GlobalKey submitButtonKey = GlobalKey(); Future success() async { final manager = context.read().self; final res = await API().get_clients(manager!.id!); final clients = (res["success"] ?? []) .map((json) => Client.fromJson(json)) .toList(); Navigator.pop(context, clients.isEmpty ? null : clients.first.id); } @override void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) { context.read().start(widget.client); }); } @override Widget build(BuildContext context) { final questions = context.select>( (provider) => provider.questions); final enabled = context.select( (provider) => provider.isReadyToSubmit()); final submitting = context.select( (provider) => provider.submitting); final loading = context.select( (provider) => provider.loading); return GestureDetector( onTap: () => FocusManager.instance.primaryFocus?.unfocus(), child: Stack( alignment: Alignment.bottomCenter, children: [ Scaffold( appBar: TitleAppBar( title: widget.client == null ? AppLocalizations.of(context).create_client : AppLocalizations.of(context).edit_client_profile, leading: GestureDetector( onTap: () { Navigator.pop(context, null); }, child: const Icon(Icons.arrow_back_ios_new), ), ), body: SafeArea( bottom: false, child: Stack( alignment: Alignment.center, children: [ ListView( children: questions .padding(EdgeInsets.symmetric(horizontal: 32.sp)) .separator(SizedBox(height: 32.sp)) .firstPadding(EdgeInsets.only(top: 16.sp)) .lastPadding( EdgeInsets.only(bottom: context.height(0.1))) .toList(), ), ], ), ), ), SubmitButton( key: submitButtonKey, text: widget.client == null ? AppLocalizations.of(context).submit : AppLocalizations.of(context).save, enabled: enabled, submitting: submitting, onTap: () async { if (!context .read() .isReadyToSubmit()) { return; } Map response = await context .read() .submit(context, widget.client); if (response.containsKey("success")) { success(); } else { print(response["errorMessage"]); // submitButtonKey.currentState // ?.showMessage(PopupMessageType.serverError); return; } }, ), loading ? const Loading() : const SizedBox.shrink(), ], ), ); } }