126 lines
4.5 KiB
Dart
126 lines
4.5 KiB
Dart
|
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<CreateEditClientPage> createState() => _CreateClientPageState();
|
||
|
}
|
||
|
|
||
|
class _CreateClientPageState extends State<CreateEditClientPage> {
|
||
|
final GlobalKey<SubmitButtonState> submitButtonKey =
|
||
|
GlobalKey<SubmitButtonState>();
|
||
|
|
||
|
Future<void> success() async {
|
||
|
final manager = context.read<ManagerProvider>().self;
|
||
|
final res = await API().get_clients(manager!.id!);
|
||
|
final clients = (res["success"] ?? [])
|
||
|
.map<Client>((json) => Client.fromJson(json))
|
||
|
.toList();
|
||
|
Navigator.pop(context, clients.isEmpty ? null : clients.first.id);
|
||
|
}
|
||
|
|
||
|
@override
|
||
|
void initState() {
|
||
|
super.initState();
|
||
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||
|
context.read<CreateEditClientFormProvider>().start(widget.client);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
@override
|
||
|
Widget build(BuildContext context) {
|
||
|
final questions =
|
||
|
context.select<CreateEditClientFormProvider, List<Question>>(
|
||
|
(provider) => provider.questions);
|
||
|
final enabled = context.select<CreateEditClientFormProvider, bool>(
|
||
|
(provider) => provider.isReadyToSubmit());
|
||
|
final submitting = context.select<CreateEditClientFormProvider, bool>(
|
||
|
(provider) => provider.submitting);
|
||
|
final loading = context.select<CreateEditClientFormProvider, bool>(
|
||
|
(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<CreateEditClientFormProvider>()
|
||
|
.isReadyToSubmit()) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
Map<String, dynamic> response = await context
|
||
|
.read<CreateEditClientFormProvider>()
|
||
|
.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(),
|
||
|
],
|
||
|
),
|
||
|
);
|
||
|
}
|
||
|
}
|