프로젝트 최초 커밋
This commit is contained in:
98
lib/screens/user/widgets/user_table.dart
Normal file
98
lib/screens/user/widgets/user_table.dart
Normal file
@@ -0,0 +1,98 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:superport/models/user_model.dart';
|
||||
|
||||
/// 사용자 목록 테이블 위젯 (SRP, 재사용성 중심)
|
||||
class UserTable extends StatelessWidget {
|
||||
final List<User> users;
|
||||
final double width;
|
||||
final String Function(String role) getRoleName;
|
||||
final String Function(int companyId, int? branchId) getBranchName;
|
||||
final String Function(int companyId) getCompanyName;
|
||||
final void Function(int userId) onEdit;
|
||||
final void Function(int userId) onDelete;
|
||||
|
||||
const UserTable({
|
||||
super.key,
|
||||
required this.users,
|
||||
required this.width,
|
||||
required this.getRoleName,
|
||||
required this.getBranchName,
|
||||
required this.getCompanyName,
|
||||
required this.onEdit,
|
||||
required this.onDelete,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return users.isEmpty
|
||||
? const Center(child: Text('등록된 사용자 정보가 없습니다.'))
|
||||
: SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
child: Container(
|
||||
constraints: BoxConstraints(minWidth: width - 32),
|
||||
child: SingleChildScrollView(
|
||||
scrollDirection: Axis.vertical,
|
||||
child: DataTable(
|
||||
columns: const [
|
||||
DataColumn(label: Text('번호')),
|
||||
DataColumn(label: Text('이름')),
|
||||
DataColumn(label: Text('직급')),
|
||||
DataColumn(label: Text('소속 회사')),
|
||||
DataColumn(label: Text('소속 지점')),
|
||||
DataColumn(label: Text('이메일')),
|
||||
DataColumn(label: Text('전화번호')),
|
||||
DataColumn(label: Text('권한')),
|
||||
DataColumn(label: Text('관리')),
|
||||
],
|
||||
rows:
|
||||
users.map((user) {
|
||||
return DataRow(
|
||||
cells: [
|
||||
DataCell(Text('${user.id}')),
|
||||
DataCell(Text(user.name)),
|
||||
DataCell(Text(user.position ?? '-')),
|
||||
DataCell(Text(getCompanyName(user.companyId))),
|
||||
DataCell(
|
||||
Text(
|
||||
user.branchId != null
|
||||
? getBranchName(user.companyId, user.branchId)
|
||||
: '-',
|
||||
),
|
||||
),
|
||||
DataCell(Text(user.email ?? '-')),
|
||||
DataCell(
|
||||
user.phoneNumbers.isNotEmpty
|
||||
? Text(user.phoneNumbers.first['number'] ?? '-')
|
||||
: const Text('-'),
|
||||
),
|
||||
DataCell(Text(getRoleName(user.role))),
|
||||
DataCell(
|
||||
Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
IconButton(
|
||||
icon: const Icon(
|
||||
Icons.edit,
|
||||
color: Colors.blue,
|
||||
),
|
||||
onPressed: () => onEdit(user.id!),
|
||||
),
|
||||
IconButton(
|
||||
icon: const Icon(
|
||||
Icons.delete,
|
||||
color: Colors.red,
|
||||
),
|
||||
onPressed: () => onDelete(user.id!),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}).toList(),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user