import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; import '../controls/padding.dart'; import '../services/timeline_manager.dart'; import '../utils/snackbar_builder.dart'; class EditorScreen extends StatefulWidget { final String id; const EditorScreen({super.key, this.id = ''}); @override State createState() => _EditorScreenState(); } class _EditorScreenState extends State { final contentController = TextEditingController(); final spoilerController = TextEditingController(); String get statusType => 'Post'; Future createPost(BuildContext context, TimelineManager manager) async { if (contentController.text.isEmpty) { buildSnackbar(context, "Can't submit an empty post/comment"); return; } final result = await manager.createNewPost( contentController.text, spoilerText: spoilerController.text, ); if (result.isFailure) { buildSnackbar(context, 'Error posting: ${result.error}'); return; } context.pop(); } @override Widget build(BuildContext context) { final manager = context.read(); return Scaffold( appBar: AppBar( automaticallyImplyLeading: false, title: Text(widget.id.isEmpty ? 'New $statusType' : 'Edit $statusType'), ), body: Padding( padding: const EdgeInsets.all(8.0), child: Center( child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ TextFormField( controller: spoilerController, decoration: InputDecoration( hintText: '$statusType spoiler text (optional)', border: OutlineInputBorder( borderSide: BorderSide( color: Theme.of(context).backgroundColor, ), borderRadius: BorderRadius.circular(5.0), ), ), ), const VerticalPadding(), TextFormField( maxLines: 10, controller: contentController, decoration: InputDecoration( hintText: '$statusType content', border: OutlineInputBorder( borderSide: BorderSide( color: Theme.of(context).backgroundColor, ), borderRadius: BorderRadius.circular(5.0), ), ), ), const VerticalPadding(), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ ElevatedButton( onPressed: () async => createPost(context, manager), child: const Text('Submit'), ), const HorizontalPadding(), ElevatedButton( onPressed: () { context.pop(); }, child: const Text('Cancel'), ), ], ), ], ), ), ), ); } }