banxiang/lib/screens/create_activity_screen.dart
2026-02-17 16:10:18 +08:00

125 lines
3.9 KiB
Dart

import 'package:flutter/material.dart';
import '../models/activity.dart';
import '../services/activity_service.dart';
class CreateActivityScreen extends StatefulWidget {
@override
State<CreateActivityScreen> createState() => _CreateActivityScreenState();
}
class _CreateActivityScreenState extends State<CreateActivityScreen> {
final _titleController = TextEditingController();
final _locationController = TextEditingController();
final _descController = TextEditingController();
String _selectedCategory = '太极';
int _maxParticipants = 10;
DateTime _selectedDate = DateTime.now().add(Duration(days: 1));
TimeOfDay _selectedTime = TimeOfDay(hour: 9, minute: 0);
void _submit() {
if (_titleController.text.isEmpty || _locationController.text.isEmpty) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('请填写完整信息')),
);
return;
}
final activity = Activity(
id: DateTime.now().toString(),
title: _titleController.text,
category: _selectedCategory,
time: DateTime(
_selectedDate.year,
_selectedDate.month,
_selectedDate.day,
_selectedTime.hour,
_selectedTime.minute,
),
location: _locationController.text,
maxParticipants: _maxParticipants,
creatorName: '',
description: _descController.text,
);
ActivityService.addActivity(activity);
Navigator.pop(context);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('活动创建成功')),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('发起活动')),
body: ListView(
padding: EdgeInsets.all(16),
children: [
TextField(
controller: _titleController,
decoration: InputDecoration(
labelText: '活动名称',
border: OutlineInputBorder(),
),
),
SizedBox(height: 16),
DropdownButtonFormField<String>(
value: _selectedCategory,
decoration: InputDecoration(
labelText: '活动类型',
border: OutlineInputBorder(),
),
items: ActivityService.categories
.skip(1)
.map((c) => DropdownMenuItem(value: c, child: Text(c)))
.toList(),
onChanged: (val) => setState(() => _selectedCategory = val!),
),
SizedBox(height: 16),
TextField(
controller: _locationController,
decoration: InputDecoration(
labelText: '活动地点',
border: OutlineInputBorder(),
),
),
SizedBox(height: 16),
ListTile(
title: Text('人数限制'),
trailing: DropdownButton<int>(
value: _maxParticipants,
items: [5, 8, 10, 12, 15]
.map((n) => DropdownMenuItem(value: n, child: Text('$n')))
.toList(),
onChanged: (val) => setState(() => _maxParticipants = val!),
),
contentPadding: EdgeInsets.zero,
),
SizedBox(height: 16),
TextField(
controller: _descController,
maxLines: 3,
decoration: InputDecoration(
labelText: '活动描述(选填)',
border: OutlineInputBorder(),
),
),
SizedBox(height: 40),
SizedBox(
height: 50,
child: ElevatedButton(
onPressed: _submit,
style: ElevatedButton.styleFrom(
backgroundColor: Color(0xFF333333),
foregroundColor: Colors.white,
),
child: Text('发布活动', style: TextStyle(fontSize: 16)),
),
),
],
),
);
}
}