kopia lustrzana https://gitlab.com/mysocialportal/relatica
107 wiersze
3.3 KiB
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'),
|
|
),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|