You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

224 lines
6.6 KiB

import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import '../../../../data/services/db/sqflite_api.dart';
import '../../../../data/services/network/api.dart';
class TemplateEditView extends StatefulWidget {
const TemplateEditView({super.key});
@override
State<TemplateEditView> createState() => _TemplateEditViewState();
}
class _TemplateEditViewState extends State<TemplateEditView> {
final TextEditingController _nameController = TextEditingController();
final TextEditingController _descController = TextEditingController();
final TextEditingController _promptController = TextEditingController();
bool _isEnable = false;
@override
void initState() {
super.initState();
}
@override
void dispose() {
_nameController.dispose();
_descController.dispose();
_promptController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
final isDarkMode = Theme.of(context).brightness == Brightness.dark;
return GestureDetector(
onTap: () => FocusScope.of(context).unfocus(),
child: Scaffold(
backgroundColor: isDarkMode ? Colors.black : Colors.grey[50],
appBar: _buildAppBar(isDarkMode),
body: _buildBody(isDarkMode),
),
);
}
// 构建应用栏
PreferredSizeWidget _buildAppBar(bool isDarkMode) {
return AppBar(
backgroundColor: isDarkMode ? Colors.black : Colors.white,
elevation: 0.5,
leading: IconButton(
icon: Icon(
Icons.arrow_back_ios,
color: isDarkMode ? Colors.white : Colors.black,
size: 20.sp,
),
onPressed: () => Get.back(),
),
title: Text(
'创建模版',
style: TextStyle(
fontSize: 17.sp,
fontWeight: FontWeight.w600,
color: isDarkMode ? Colors.white : Colors.black,
),
),
centerTitle: true,
);
}
// 构建主体内容
Widget _buildBody(bool isDarkMode) {
return Column(
children: [
Expanded(
child: ListView(
padding: EdgeInsets.symmetric(horizontal: 12.w),
children: [
_input(isDarkMode, '名称', _nameController),
_input(isDarkMode, '描述', _descController),
_input(
isDarkMode,
'模版',
_promptController,
minLines: 8,
maxLines: 100,
hintText: '请输入模版内容!温馨提示:点击上方AI,根据上面填写的名称和描述,可以帮助你快速生成模版内容',
),
],
),
),
Padding(
padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 20.w),
child: GestureDetector(
onTap: () {
if (_nameController.text.isNotEmpty &&
_descController.text.isNotEmpty &&
_promptController.text.isNotEmpty) {
_submit();
}
},
child: Container(
height: 48.w,
alignment: Alignment.center,
decoration: BoxDecoration(
color: _nameController.text.isNotEmpty &&
_descController.text.isNotEmpty &&
_promptController.text.isNotEmpty
? Colors.black
: Colors.grey,
borderRadius: BorderRadius.circular(12.r),
),
child: Text(
'提交',
style: TextStyle(
fontSize: 16.sp,
color: Colors.white,
),
),
),
),
),
],
);
}
Widget _input(
bool isDarkMode,
String title,
TextEditingController controller, {
int minLines = 1,
int maxLines = 1,
String? hintText,
}) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.only(left: 10.w),
child: Text(
title,
style: TextStyle(
fontSize: 14.sp,
color: isDarkMode ? Colors.white60 : Colors.black87,
),
),
),
Container(
margin: EdgeInsets.only(top: 10.w, bottom: 20.w),
alignment: Alignment.center,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12.w),
boxShadow: [
BoxShadow(
color: Colors.black.withValues(alpha: 0.05),
blurRadius: 10,
offset: const Offset(0, 2),
),
],
),
child: TextField(
controller: controller,
minLines: minLines,
maxLines: maxLines,
style: TextStyle(
color: Colors.black87,
fontSize: 14.sp,
),
decoration: InputDecoration(
hintText: hintText ?? '请输入$title',
hintStyle: TextStyle(
color: Colors.black54,
fontSize: 14.sp,
),
isDense: true,
fillColor: Colors.transparent,
border: InputBorder.none,
contentPadding: EdgeInsets.all(10.w),
),
onChanged: (value) {
bool isEnable = false;
if (_nameController.text.isNotEmpty &&
_descController.text.isNotEmpty &&
_promptController.text.isNotEmpty) {
isEnable = true;
}
if (_isEnable != isEnable) {
setState(() {
_isEnable = isEnable;
});
}
},
),
),
],
);
}
void _submit() async {
EasyLoading.show();
Map data = {
"template": {
'ttype': '自定义',
'tags': '',
'icon': 'auto_fix_high',
'outline': '您将扮演一名会议事件归纳专家,能准确抓住会议中事件的关键点,并每个事件只需一句话精简总结。',
'title': _nameController.text,
'description': _descController.text,
'template': _promptController.text,
},
};
var response = await Api.addEchomeetTemplates(data);
if (response != null) {
print('----$response--------');
// await SqfliteApi.insertMeetingTemplate(data['template']);
}
EasyLoading.dismiss();
}
}