APP_NEW/lib/Page/create_edit_client_page.dart

126 lines
4.5 KiB
Dart
Raw Normal View History

2025-03-11 21:17:14 +08:00
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(),
],
),
);
}
}