From 600c00268c04137205c7359de575baa2e8a1feb8 Mon Sep 17 00:00:00 2001 From: tanlongsheng <252620078@qq.com> Date: Wed, 22 Oct 2025 20:21:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BC=9A=E8=AE=AE=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E6=A8=A1=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/template/template_edit_view.dart | 84 +++++++++++++++++++ .../meeting/views/template/template_view.dart | 79 ++++++++++++++--- 2 files changed, 152 insertions(+), 11 deletions(-) create mode 100644 lib/modules/meeting/views/template/template_edit_view.dart diff --git a/lib/modules/meeting/views/template/template_edit_view.dart b/lib/modules/meeting/views/template/template_edit_view.dart new file mode 100644 index 000000000..7e4798f85 --- /dev/null +++ b/lib/modules/meeting/views/template/template_edit_view.dart @@ -0,0 +1,84 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; + +class TemplateEditView extends StatefulWidget { + const TemplateEditView({super.key}); + + @override + State createState() => _TemplateEditViewState(); +} + +class _TemplateEditViewState extends State { + TextEditingController titleController = TextEditingController(); + + @override + Widget build(BuildContext context) { + final isDarkMode = Theme.of(context).brightness == Brightness.dark; + + return 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( + children: [], + ), + ), + Padding( + padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 20.w), + child: GestureDetector( + onTap: () {}, + child: Container( + height: 48.w, + alignment: Alignment.center, + decoration: BoxDecoration( + color: Colors.black, + borderRadius: BorderRadius.circular(12.r), + ), + child: Text( + '提交', + style: TextStyle( + fontSize: 16.sp, + color: Colors.white, + ), + ), + ), + ), + ), + ], + ); + } +} diff --git a/lib/modules/meeting/views/template/template_view.dart b/lib/modules/meeting/views/template/template_view.dart index 2d77797fb..457d370e4 100644 --- a/lib/modules/meeting/views/template/template_view.dart +++ b/lib/modules/meeting/views/template/template_view.dart @@ -3,6 +3,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'template_all_view.dart'; +import 'template_edit_view.dart'; class TemplateView extends StatefulWidget { final Map templateData; @@ -117,7 +118,7 @@ class _TemplateViewState extends State { itemCount: _categoryTemplateList.length, itemBuilder: (BuildContext context, int index) { Map data = _categoryTemplateList[index]; - return _item(data); + return _item(data, index == _categoryTemplateList.length - 1); }, ), ), @@ -148,8 +149,9 @@ class _TemplateViewState extends State { ); } - Widget _item(Map data) { + Widget _item(Map data, bool isLast) { return Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ GestureDetector( onTap: () { @@ -183,15 +185,27 @@ class _TemplateViewState extends State { Container( height: 150.w, margin: EdgeInsets.only(bottom: 15.w), - child: ListView.builder( - itemCount: data['template'].length, - scrollDirection: Axis.horizontal, - padding: EdgeInsets.symmetric(horizontal: 8.w), - itemBuilder: (BuildContext context, int index) { - Map template = data['template'][index]; - return _template(template); - }, - ), + child: isLast && data['template'].length == 0 + ? Padding( + padding: EdgeInsets.symmetric(horizontal: 8.w), + child: _createTemplate(), + ) + : ListView.builder( + itemCount: data['template'].length, + scrollDirection: Axis.horizontal, + padding: EdgeInsets.symmetric(horizontal: 8.w), + itemBuilder: (BuildContext context, int index) { + Map template = data['template'][index]; + return isLast && index == 0 + ? Row( + children: [ + _createTemplate(), + _template(template), + ], + ) + : _template(template); + }, + ), ), ], ); @@ -338,4 +352,47 @@ class _TemplateViewState extends State { ), ); } + + Widget _createTemplate() { + return GestureDetector( + onTap: () { + Get.to(() => const TemplateEditView()); + }, + child: Container( + width: 200.w, + margin: EdgeInsets.symmetric(horizontal: 4.w), + clipBehavior: Clip.hardEdge, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(14.w), + ), + child: Container( + color: Colors.white, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: EdgeInsets.only(top: 5.w), + child: Icon( + Icons.add_circle_outlined, + color: Colors.orange, + size: 30.w, + ), + ), + Padding( + padding: EdgeInsets.symmetric(vertical: 10.w), + child: Text( + '创建', + style: TextStyle( + fontSize: 16.sp, + color: Colors.black87, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + ), + ), + ), + ); + } }