relatica/lib/screens/editor.dart

107 wiersze
3.3 KiB
Dart

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<EditorScreen> createState() => _EditorScreenState();
}
class _EditorScreenState extends State<EditorScreen> {
final contentController = TextEditingController();
final spoilerController = TextEditingController();
String get statusType => 'Post';
Future<void> 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<TimelineManager>();
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'),
),
],
),
],
),
),
),
);
}
}