qhdkfq_regulatory_flutter/lib/Custom/help_department_person_item...

121 lines
4.1 KiB
Dart
Raw Normal View History

2025-07-11 11:01:27 +08:00
import 'package:flutter/material.dart';
import 'package:dotted_border/dotted_border.dart';
import 'package:qhdkfq_regulatory_flutter/Custom/edit_list_items.dart';
import 'package:qhdkfq_regulatory_flutter/home/department_picker.dart';
import '../mock/mock_data.dart';
class HelpDeptPersonSection extends StatefulWidget {
const HelpDeptPersonSection({Key? key}) : super(key: key);
@override
HelpDeptPersonSectionState createState() => HelpDeptPersonSectionState();
}
class HelpDeptPersonSectionState extends State<HelpDeptPersonSection> {
final List<Map<String, String>> _entries = [
{'dept': '请选择', 'person': '请选择'},
];
// 已选择的分类 id
String? _selectedCategoryId;
/// 外部调用:新增一条
void addEntry() {
setState(() => _entries.add({'dept': '', 'person': ''}));
}
/// 外部调用:获取当前所有条目
List<Map<String, String>> get entries => List.unmodifiable(_entries);
void _removeEntry(int i) {
setState(() => _entries.removeAt(i));
}
@override
Widget build(BuildContext context) {
return Column(
children: [
for (var i = 0; i < _entries.length; i++) ...[
Stack(
clipBehavior: Clip.none, // 关闭裁剪
children: [
DottedBorder(
color: Colors.grey,
strokeWidth: 1,
dashPattern: [4, 2],
borderType: BorderType.RRect,
radius: const Radius.circular(8),
child: Padding(
padding: const EdgeInsets.all(12),
child: Column(
children: [
EditListItems.createRowSpaceBetweenItem(
leftText: '帮扶部门',
rightText: _entries[i]['dept']!,
isImportent: true,
isRight: true,
onTap: () {
// TODO: 外部弹框或选择逻辑
showModalBottomSheet(
context: context,
isScrollControlled: true,
barrierColor: Colors.black54,
backgroundColor: Colors.transparent,
builder:
(ctx) => DepartmentPicker(
data: mockCategories,
onSelected: (selectedId) {
setState(() {
_selectedCategoryId = selectedId;
});
},
),
);
print(mockCategories.map((e) => e.title));
},
),
const Divider(height: 8),
EditListItems.createRowSpaceBetweenItem(
leftText: '帮扶人员',
rightText: _entries[i]['person']!,
isImportent: true,
isRight: true,
onTap: () {
// TODO: 外部弹框或选择逻辑
},
),
],
),
),
),
if (_entries.length > 1)
// 删除按钮
Positioned(
top: -2,
right: -2,
child: GestureDetector(
onTap: () => _removeEntry(i),
child: Container(
width: 24,
height: 24,
decoration: const BoxDecoration(
color: Colors.red,
shape: BoxShape.circle,
),
child: const Icon(
Icons.close,
size: 16,
color: Colors.white,
),
),
),
),
],
),
const SizedBox(height: 12),
],
],
);
}
}