94 lines
3.2 KiB
Dart
94 lines
3.2 KiB
Dart
// lib/pages/team/member_detail_page.dart
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:rogapp/pages/team/member_controller.dart';
|
|
|
|
class MemberDetailPage extends GetView<MemberController> {
|
|
final TextEditingController _firstNameController = TextEditingController();
|
|
final TextEditingController _lastNameController = TextEditingController();
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final mode = Get.arguments['mode'];
|
|
final member = Get.arguments['member'];
|
|
|
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
|
if (mode == 'edit' && member != null) {
|
|
controller.setSelectedMember(member);
|
|
}
|
|
});
|
|
|
|
return Scaffold(
|
|
appBar: AppBar(
|
|
title: Text(mode == 'new' ? 'メンバー追加' : 'メンバー詳細'),
|
|
actions: [
|
|
IconButton(
|
|
icon: Icon(Icons.save),
|
|
onPressed: () async {
|
|
await controller.saveMember();
|
|
Get.back();
|
|
},
|
|
),
|
|
],
|
|
),
|
|
body: Obx(()
|
|
{
|
|
if (controller.isLoading.value) {
|
|
return Center(child: CircularProgressIndicator());
|
|
}
|
|
|
|
_firstNameController.value = _firstNameController.value.copyWith(
|
|
text: controller.firstname.value,
|
|
selection: TextSelection.collapsed(
|
|
offset: controller.firstname.value.length),
|
|
);
|
|
_lastNameController.value = _lastNameController.value.copyWith(
|
|
text: controller.lastname.value,
|
|
selection: TextSelection.collapsed(
|
|
offset: controller.lastname.value.length),
|
|
);
|
|
|
|
return Padding(
|
|
padding: EdgeInsets.all(16.0),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
if (mode == 'edit' && member.email != null)
|
|
Text('Email: ${member.email}'),
|
|
if (mode == 'new' || (mode == 'edit' && member.email == null))
|
|
TextField(
|
|
decoration: InputDecoration(labelText: 'Email'),
|
|
onChanged: (value) => controller.updateEmail(value),
|
|
),
|
|
TextField(
|
|
decoration: InputDecoration(labelText: '姓'),
|
|
controller: _lastNameController,
|
|
onChanged: (value) => controller.updateLastName(value),
|
|
),
|
|
TextField(
|
|
decoration: InputDecoration(labelText: '名'),
|
|
controller: _firstNameController,
|
|
onChanged: (value) => controller.updateFirstName(value),
|
|
),
|
|
|
|
// 誕生日選択ウィジェットを追加
|
|
if (mode == 'edit')
|
|
Text('ステータス: ${controller.getMemberStatus()}'),
|
|
if (mode == 'edit' && controller.getMemberStatus() == '招待中')
|
|
ElevatedButton(
|
|
child: Text('招待メールを再送信'),
|
|
onPressed: () => controller.resendInvitation(),
|
|
),
|
|
if (mode == 'edit')
|
|
ElevatedButton(
|
|
child: Text('メンバーから除外'),
|
|
onPressed: () => controller.deleteMember(),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
})
|
|
);
|
|
}
|
|
} |