Files
rog_app/lib/pages/team/member_detail_page.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(),
),
],
),
);
})
);
}
}