Browse Source

暂存:应该根据获取到的企业列表创建下拉列表选择企业了

dev
徐振升 6 days ago
parent
commit
8847580e0d
  1. 35
      lib/app/features/problem/presentation/bindings/problem_form_binding.dart
  2. 19
      lib/app/features/problem/presentation/controllers/problem_form_controller.dart
  3. 108
      lib/app/features/problem/presentation/pages/problem_form_page.dart

35
lib/app/features/problem/presentation/bindings/problem_form_binding.dart

@ -1,5 +1,12 @@
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:problem_check_system/app/core/models/form_mode.dart'; import 'package:problem_check_system/app/core/models/form_mode.dart';
import 'package:problem_check_system/app/core/services/database_service.dart';
import 'package:problem_check_system/app/core/services/http_provider.dart';
import 'package:problem_check_system/app/features/enterprise/data/datasources/enterprise_local_data_source.dart';
import 'package:problem_check_system/app/features/enterprise/data/datasources/enterprise_remote_data_source.dart';
import 'package:problem_check_system/app/features/enterprise/data/repositories_impl/enterprise_repository_impl.dart';
import 'package:problem_check_system/app/features/enterprise/domain/repositories/enterprise_repository.dart';
import 'package:problem_check_system/app/features/enterprise/domain/usecases/get_enterprise_list_usecase.dart';
import 'package:problem_check_system/app/features/problem/domain/entities/problem_entity.dart'; import 'package:problem_check_system/app/features/problem/domain/entities/problem_entity.dart';
import 'package:problem_check_system/app/features/problem/presentation/controllers/problem_form_controller.dart'; import 'package:problem_check_system/app/features/problem/presentation/controllers/problem_form_controller.dart';
@ -26,8 +33,34 @@ class ProblemFormBinding extends Bindings {
} }
} }
Get.put<EnterpriseLocalDataSource>(
EnterpriseLocalDataSourceImpl(
databaseService: Get.find<DatabaseService>(),
),
);
Get.put<EnterpriseRemoteDataSource>(
EnterpriseRemoteDataSourceImpl(http: Get.find<HttpProvider>()),
);
Get.put<EnterpriseRepository>(
EnterpriseRepositoryImpl(
localDataSource: Get.find<EnterpriseLocalDataSource>(),
remoteDataSource: Get.find<EnterpriseRemoteDataSource>(),
networkStatusService: Get.find(),
uuid: Get.find(),
),
);
Get.put<GetEnterpriseListUsecase>(
GetEnterpriseListUsecase(repository: Get.find<EnterpriseRepository>()),
);
Get.lazyPut<ProblemFormController>( Get.lazyPut<ProblemFormController>(
() => ProblemFormController(problem: problem, formMode: formMode), () => ProblemFormController(
problem: problem,
formMode: formMode,
getEnterpriseListUsecase: Get.find<GetEnterpriseListUsecase>(),
),
); );
} }
} }

19
lib/app/features/problem/presentation/controllers/problem_form_controller.dart

@ -9,6 +9,8 @@ import 'package:path_provider/path_provider.dart';
import 'package:problem_check_system/app/core/models/form_mode.dart'; import 'package:problem_check_system/app/core/models/form_mode.dart';
import 'package:problem_check_system/app/core/models/image_status.dart'; import 'package:problem_check_system/app/core/models/image_status.dart';
import 'package:problem_check_system/app/core/models/image_metadata_model.dart'; import 'package:problem_check_system/app/core/models/image_metadata_model.dart';
import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise_list_item.dart';
import 'package:problem_check_system/app/features/enterprise/domain/usecases/get_enterprise_list_usecase.dart';
import 'dart:io'; import 'dart:io';
import 'package:problem_check_system/app/features/problem/domain/entities/problem_entity.dart'; import 'package:problem_check_system/app/features/problem/domain/entities/problem_entity.dart';
import 'package:uuid/uuid.dart'; import 'package:uuid/uuid.dart';
@ -24,14 +26,23 @@ class ProblemFormController extends GetxController {
return formMode == FormMode.view; return formMode == FormMode.view;
} }
bool get isShowBindData {
return problem?.bindData != null;
}
final titleName = "问题表单页".obs; final titleName = "问题表单页".obs;
final TextEditingController descriptionController = TextEditingController(); final TextEditingController descriptionController = TextEditingController();
final TextEditingController locationController = TextEditingController(); final TextEditingController locationController = TextEditingController();
final RxList<XFile> selectedImages = <XFile>[].obs; final RxList<XFile> selectedImages = <XFile>[].obs;
final GetEnterpriseListUsecase getEnterpriseListUsecase;
// 使便 // 使便
ProblemFormController({this.problem, this.formMode = FormMode.view}) { ProblemFormController({
this.problem,
this.formMode = FormMode.view,
required this.getEnterpriseListUsecase,
}) {
if (problem != null) { if (problem != null) {
if (problem!.bindData != null) { if (problem!.bindData != null) {
bindInfo = jsonDecode(problem!.bindData!); bindInfo = jsonDecode(problem!.bindData!);
@ -50,6 +61,7 @@ class ProblemFormController extends GetxController {
@override @override
void onInit() { void onInit() {
super.onInit(); super.onInit();
updatePageTitle();
} }
@override @override
@ -73,6 +85,11 @@ class ProblemFormController extends GetxController {
} }
} }
//
Future<List<EnterpriseListItem>> getAllEnterprises() async {
return await getEnterpriseListUsecase();
}
// pickImage // pickImage
Future<void> pickImage(ImageSource source) async { Future<void> pickImage(ImageSource source) async {
try { try {

108
lib/app/features/problem/presentation/pages/problem_form_page.dart

@ -24,7 +24,7 @@ class ProblemFormPage extends GetView<ProblemFormController> {
child: SingleChildScrollView( child: SingleChildScrollView(
child: Column( child: Column(
children: [ children: [
if (controller.problem?.bindData != null) if (controller.isShowBindData)
Container( Container(
color: Colors.white, color: Colors.white,
padding: const EdgeInsets.symmetric( padding: const EdgeInsets.symmetric(
@ -65,6 +65,7 @@ class ProblemFormPage extends GetView<ProblemFormController> {
], ],
), ),
), ),
_buildDropDownCard(title: '企业名称'),
_buildInputCard( _buildInputCard(
title: '问题描述', title: '问题描述',
textController: controller.descriptionController, textController: controller.descriptionController,
@ -150,7 +151,7 @@ class ProblemFormPage extends GetView<ProblemFormController> {
required String hintText, required String hintText,
}) { }) {
return Card( return Card(
margin: EdgeInsets.all(17.w), margin: EdgeInsets.all(16.w),
child: Column( child: Column(
children: [ children: [
ListTile( ListTile(
@ -179,7 +180,7 @@ class ProblemFormPage extends GetView<ProblemFormController> {
/// ///
Widget _buildImageCard(BuildContext context) { Widget _buildImageCard(BuildContext context) {
return Card( return Card(
margin: EdgeInsets.all(17.w), margin: EdgeInsets.all(16.w),
child: Column( child: Column(
children: [ children: [
const ListTile( const ListTile(
@ -414,4 +415,105 @@ class ProblemFormPage extends GetView<ProblemFormController> {
), ),
); );
} }
Widget _buildDropDownCard({required String title}) {
return Card(
// margin
margin: const EdgeInsets.all(16.0),
// elevation
elevation: 2,
clipBehavior: Clip.antiAlias,
child: Column(
// mainAxisSize.min Column
mainAxisSize: MainAxisSize.min,
// crossAxisAlignment.start
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// --- 1. ---
_buildTopSection(),
//
const SizedBox(height: 20.0),
// --- 2. ---
_buildDropdownSelector(),
],
),
);
}
///
Widget _buildTopSection() {
return Row(
// [] 使 MainAxisAlignment.spaceBetween
mainAxisAlignment: MainAxisAlignment.spaceBetween,
// crossAxisAlignment.start
crossAxisAlignment: CrossAxisAlignment.start,
children: [
//
Padding(
padding: EdgeInsetsGeometry.only(left: 16.w, top: 10.5.h),
child: const Text(
'企业名称',
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
color: Colors.black87,
),
),
),
//
ElevatedButton(
onPressed: () {},
style: ElevatedButton.styleFrom(
backgroundColor: const Color(0xFF42A5F5),
foregroundColor: Colors.white,
padding: EdgeInsets.symmetric(horizontal: 20.w, vertical: 12.h),
tapTargetSize: MaterialTapTargetSize.shrinkWrap,
// [!!!]
// elevation: 0,
// [!!!]
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(12.r),
),
),
),
child: Text(
"新增企业",
style: TextStyle(fontSize: 13.sp, fontWeight: FontWeight.bold),
),
),
],
);
}
///
Widget _buildDropdownSelector() {
// 使 InkWell 使
return InkWell(
onTap: () {
//
print('下拉选择区域被点击');
},
// 使
borderRadius: BorderRadius.circular(8.0),
child: Padding(
padding: EdgeInsets.only(left: 16.w, top: 0, right: 16.w, bottom: 16.h),
child: Row(
// 使 spaceBetween
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
//
const Text(
'山东汇丰石化集团有限公司',
style: TextStyle(fontSize: 16, color: Colors.black54),
),
//
Icon(Icons.arrow_drop_down, color: Colors.grey[700]),
],
),
),
);
}
} }

Loading…
Cancel
Save