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.
 
 
 

113 lines
3.6 KiB

import 'package:flutter/material.dart';
class TemplateParser extends StatelessWidget {
const TemplateParser({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Card(
margin: EdgeInsets.zero, // 移除默认边距以填满整个区域
color: Colors.grey[100],
child: Column(
children: [
// 四个编辑框区域
Expanded(
child: GridView.builder(
padding: const EdgeInsets.all(8.0),
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
childAspectRatio: 1.0,
crossAxisSpacing: 8.0,
mainAxisSpacing: 8.0,
),
itemCount: 4,
itemBuilder: (context, index) {
return _buildEditorPanel(context, index);
},
),
),
],
),
);
}
Widget _buildEditorPanel(BuildContext context, int index) {
// 定义每个面板的标题
final titles = ['输入内容', '输出内容', '参考文件', '模板'];
return Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
// 工具条
Container(
padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0),
decoration: BoxDecoration(
color: Colors.grey[100],
borderRadius: const BorderRadius.vertical(top: Radius.circular(4.0)),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
// 左侧标题
Text(
titles[index],
style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 14),
),
// 右侧工具按钮
Row(
mainAxisSize: MainAxisSize.min,
children: [
IconButton(
icon: const Icon(Icons.folder_open, size: 18),
onPressed: () {},
padding: EdgeInsets.zero,
constraints: const BoxConstraints(),
),
IconButton(
icon: const Icon(Icons.content_copy, size: 18),
onPressed: () {},
padding: EdgeInsets.zero,
constraints: const BoxConstraints(),
),
IconButton(
icon: const Icon(Icons.save, size: 18),
onPressed: () {},
padding: EdgeInsets.zero,
constraints: const BoxConstraints(),
),
IconButton(
icon: const Icon(Icons.close, size: 18),
onPressed: () {},
padding: EdgeInsets.zero,
constraints: const BoxConstraints(),
),
],
),
],
),
),
// 编辑框
Expanded(
child: Container(
decoration: BoxDecoration(
border: Border.all(color: Colors.grey),
borderRadius: const BorderRadius.vertical(bottom: Radius.circular(4.0)),
),
child: const TextField(
maxLines: null,
expands: true,
decoration: InputDecoration(
fillColor: Colors.white,
filled: true,
border: InputBorder.none,
contentPadding: EdgeInsets.all(8.0),
hintText: '输入内容...',
),
),
),
),
],
);
}
}