import 'package:flutter/material.dart'; import '../services/post_service.dart'; class CreatePostScreen extends StatefulWidget { @override _CreatePostScreenState createState() => _CreatePostScreenState(); } class _CreatePostScreenState extends State { final TextEditingController _bodyController = TextEditingController(); bool _isLoading = false; final int _maxCharacters = 280; @override void dispose() { _bodyController.dispose(); super.dispose(); } Future _createPost() async { if (_bodyController.text.trim().isEmpty) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Please write something before posting'), backgroundColor: Colors.red, ), ); return; } setState(() { _isLoading = true; }); try { final result = await PostService.createPost(_bodyController.text.trim()); if (result['success']) { Navigator.of(context).pop(true); // Return true to indicate success ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Post created successfully!'), backgroundColor: Color(0xFF6A4C93), ), ); } else { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(result['message']), backgroundColor: Colors.red, ), ); } } catch (e) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Failed to create post. Please try again.'), backgroundColor: Colors.red, ), ); } finally { setState(() { _isLoading = false; }); } } @override Widget build(BuildContext context) { final remainingChars = _maxCharacters - _bodyController.text.length; final isOverLimit = remainingChars < 0; return Scaffold( appBar: AppBar( title: Text('Create Post', style: TextStyle(fontWeight: FontWeight.w600)), backgroundColor: Colors.white, foregroundColor: Color(0xFF6A4C93), elevation: 0, bottom: PreferredSize( preferredSize: Size.fromHeight(1), child: Container(height: 1, color: Colors.grey[200]), ), actions: [ TextButton( onPressed: _isLoading || isOverLimit || _bodyController.text.trim().isEmpty ? null : _createPost, child: _isLoading ? SizedBox( width: 20, height: 20, child: CircularProgressIndicator( strokeWidth: 2, valueColor: AlwaysStoppedAnimation(Color(0xFF6A4C93)), ), ) : Text( 'Post', style: TextStyle( color: _bodyController.text.trim().isEmpty || isOverLimit ? Colors.grey : Color(0xFF6A4C93), fontWeight: FontWeight.w600, fontSize: 16, ), ), ), SizedBox(width: 16), ], ), body: Container( decoration: BoxDecoration( gradient: LinearGradient( begin: Alignment.topLeft, end: Alignment.bottomRight, colors: [ Color(0xFF32B0A5).withOpacity(0.05), Color(0xFF4600B9).withOpacity(0.05), ], ), ), child: Padding( padding: EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(12), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.05), blurRadius: 10, offset: Offset(0, 2), ), ], ), child: Padding( padding: EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( "What's on your mind?", style: TextStyle( fontSize: 18, fontWeight: FontWeight.w600, color: Color(0xFF6A4C93), ), ), SizedBox(height: 16), TextField( controller: _bodyController, maxLines: 6, decoration: InputDecoration( hintText: 'Share your thoughts...', hintStyle: TextStyle(color: Colors.grey[500]), border: InputBorder.none, enabledBorder: InputBorder.none, focusedBorder: InputBorder.none, ), style: TextStyle( fontSize: 16, height: 1.4, color: Colors.black87, ), onChanged: (text) { setState(() {}); }, ), SizedBox(height: 16), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( 'Share your thoughts with the community', style: TextStyle( color: Colors.grey[600], fontSize: 12, ), ), Text( '$remainingChars', style: TextStyle( color: isOverLimit ? Colors.red : Colors.grey[600], fontSize: 12, fontWeight: FontWeight.w500, ), ), ], ), if (isOverLimit) Padding( padding: EdgeInsets.only(top: 8), child: Text( 'Post is too long. Please keep it under $_maxCharacters characters.', style: TextStyle( color: Colors.red, fontSize: 12, ), ), ), ], ), ), ), SizedBox(height: 24), Container( decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(12), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.05), blurRadius: 10, offset: Offset(0, 2), ), ], ), child: Padding( padding: EdgeInsets.all(16), child: Row( children: [ Icon( Icons.lightbulb_outline, color: Color(0xFF6A4C93), size: 20, ), SizedBox(width: 12), Expanded( child: Text( 'Keep it friendly and respectful. Your post will be visible to everyone in the community.', style: TextStyle( color: Colors.grey[700], fontSize: 13, height: 1.3, ), ), ), ], ), ), ), ], ), ), ), ); } }