马良AI写作初始化仓库

This commit is contained in:
邓滨杰
2025-09-10 00:07:52 +08:00
parent 3c06bb1a03
commit 39c0f8840f
1309 changed files with 318528 additions and 0 deletions

View File

@@ -0,0 +1,99 @@
import 'package:flutter/material.dart';
class ChapterLengthField extends StatefulWidget {
final String? preset; // 'short' | 'medium' | 'long' | null
final String? customLength;
final ValueChanged<String?> onPresetChanged;
final ValueChanged<String> onCustomChanged;
final String title;
final String description;
const ChapterLengthField({
super.key,
this.preset,
this.customLength,
required this.onPresetChanged,
required this.onCustomChanged,
this.title = '每章长度',
this.description = '每章期望长度(短/中/长)或自定义字数',
});
@override
State<ChapterLengthField> createState() => _ChapterLengthFieldState();
}
class _ChapterLengthFieldState extends State<ChapterLengthField> {
late TextEditingController _controller;
String? _preset;
@override
void initState() {
super.initState();
_preset = widget.preset;
_controller = TextEditingController(text: widget.customLength ?? '');
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(widget.title, style: Theme.of(context).textTheme.titleSmall),
const SizedBox(height: 6),
Text(widget.description, style: Theme.of(context).textTheme.bodySmall?.copyWith(color: Theme.of(context).hintColor)),
const SizedBox(height: 8),
Wrap(
spacing: 8,
runSpacing: 8,
children: [
ChoiceChip(
label: const Text(''),
selected: _preset == 'short',
onSelected: (_) {
setState(() { _preset = 'short'; _controller.clear(); });
widget.onPresetChanged('short');
},
),
ChoiceChip(
label: const Text(''),
selected: _preset == 'medium',
onSelected: (_) {
setState(() { _preset = 'medium'; _controller.clear(); });
widget.onPresetChanged('medium');
},
),
ChoiceChip(
label: const Text(''),
selected: _preset == 'long',
onSelected: (_) {
setState(() { _preset = 'long'; _controller.clear(); });
widget.onPresetChanged('long');
},
),
],
),
const SizedBox(height: 8),
TextField(
controller: _controller,
decoration: const InputDecoration(
border: OutlineInputBorder(),
hintText: '自定义字数,如 2000 字',
),
onChanged: (v) {
setState(() { _preset = null; });
widget.onCustomChanged(v);
},
),
],
);
}
}