Commit 20fc2fd6 authored by Daniel Tefr's avatar Daniel Tefr
Browse files

fix: delete button; feat: user profile page, usersService

parent 4a00d024
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@ import 'package:get_it/get_it.dart';
import 'package:harmonis/songPost/service/SongPostFilterService.dart';
import 'package:harmonis/songPost/service/song_post_service.dart';
import 'package:harmonis/user/services/userService.dart';
import 'package:harmonis/user/services/usersService.dart';

final getIt = GetIt.instance;

@@ -11,5 +12,6 @@ class IOCContainer {
    getIt.registerSingleton(SongPostService());
    getIt.registerSingleton(UserService());
    getIt.registerSingleton(SongPostFilterService());
    getIt.registerSingleton(UsersService());
  }
}
+0 −6
Original line number Diff line number Diff line
@@ -84,12 +84,6 @@ class SongPost extends StatelessWidget {
                  );
                },
              ),
              IconButton(
                icon: const Icon(Icons.delete, color: Colors.grey),
                onPressed: () {
                  userService.toggleSongPostLike(post.uId);
                },
              ),
            ],
          ),
        ),
+116 −75
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ import 'package:harmonis/dashBoard/songPost/song_player.dart';
import 'package:harmonis/post/post_type.dart';
import 'package:harmonis/songPost/model/song_post_DTO.dart';
import 'package:harmonis/songPost/service/song_post_service.dart';
import 'package:harmonis/user/profile_page.dart';
import 'package:harmonis/user/services/userService.dart';
import '../../common/text_input_field.dart';
import 'package:harmonis/userInteraction/model/comment_DTO.dart';
@@ -28,12 +29,17 @@ class _SongPostDetailPageState extends State<SongPostDetailPage> {
  final _songPostService = GetIt.instance<SongPostService>();
  final _userService = GetIt.instance<UserService>();

  @override
  void dispose() {
    _scrollController.dispose();
    _commentController.dispose();
    super.dispose();
  }

  void _addComment() {
    final newCommentText = _commentController.text.trim();
    if (newCommentText.isEmpty) {
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(content: Text("Comment cannot be empty!")),
      );
      _showSnackBar("Comment cannot be empty!");
      return;
    }

@@ -64,11 +70,10 @@ class _SongPostDetailPageState extends State<SongPostDetailPage> {
    });
  }

  @override
  void dispose() {
    _scrollController.dispose();
    _commentController.dispose();
    super.dispose();
  void _showSnackBar(String message) {
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text(message)),
    );
  }

  @override
@@ -84,8 +89,27 @@ class _SongPostDetailPageState extends State<SongPostDetailPage> {
              controller: _scrollController,
              padding: const EdgeInsets.all(8.0),
              children: [
                Column(
                _buildPostDetails(),
                _buildCommentsSection(),
              ],
            ),
          ),
          _buildCommentInputField(),
        ],
      ),
    );
  }

  Widget _buildPostDetails() {
    return Column(
      children: [
        Container(
          alignment: Alignment.centerRight,
          child: IconButton(
            icon: const Icon(Icons.more_vert, color: Colors.grey),
            onPressed: () {},
          ),
        ),
        const SizedBox(height: 20),
        const Image(
          image: AssetImage('assets/images/empty_cover.png'),
@@ -99,10 +123,19 @@ class _SongPostDetailPageState extends State<SongPostDetailPage> {
              .headlineSmall
              ?.copyWith(fontWeight: FontWeight.bold),
        ),
                    Text(
        TextButton(
          onPressed: () {
            Navigator.of(context).push(MaterialPageRoute(
              builder: (context) => ProfilePage(
                userUid: widget.post.author.uID,
              ),
            ));
          },
          child: Text(
            widget.post.author.name,
            style: Theme.of(context).textTheme.bodyMedium,
          ),
        ),
        const SizedBox(height: 8),
        Text(
          widget.post.description,
@@ -111,10 +144,15 @@ class _SongPostDetailPageState extends State<SongPostDetailPage> {
        const SizedBox(height: 16),
        const SongPlayer(),
      ],
                ),
    );
  }

  Widget _buildCommentsSection() {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        const Padding(
                  padding:
                  EdgeInsets.symmetric(vertical: 16.0, horizontal: 8.0),
          padding: EdgeInsets.symmetric(vertical: 16.0, horizontal: 8.0),
          child: Text(
            'Comments',
            style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
@@ -146,15 +184,18 @@ class _SongPostDetailPageState extends State<SongPostDetailPage> {
          },
        ),
      ],
            ),
          ),
          TextInputField(
    );
  }

  Widget _buildCommentInputField() {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: TextInputField(
        controller: _commentController,
        onSend: _addComment,
      ),
          const SizedBox(height: 10),
        ],
      ),
    );
  }
}

+6 −2
Original line number Diff line number Diff line
import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';
import 'package:harmonis/user/profile_page.dart';
import 'package:harmonis/user/services/userService.dart';
import 'addPost/add_song_post_page.dart';
import 'dashBoard/dash_board_page.dart';
import 'nav_bar.dart';

// NavigationWrapper
class HomePage extends StatefulWidget {
  const HomePage({super.key});
  final userService = GetIt.instance<UserService>();
  HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
@@ -30,7 +34,7 @@ class _HomePageState extends State<HomePage> {
            Center(child: Text('Search')),
            AddSongPostPage(),
            Center(child: Text('Chat')),
            Center(child: Text('Profile')),
            ProfilePage(userUid: widget.userService.user.uID),
          ][_selectedIndex],
          Positioned(
            bottom: 10,
+8 −2
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@ import 'package:harmonis/mockedData/mocked_user.dart';
import 'package:harmonis/songPost/service/song_post_service.dart';
import 'package:harmonis/theme/theme.dart';
import 'package:harmonis/user/services/userService.dart';
import 'package:harmonis/user/services/usersService.dart';

void main() {
  IOCContainer.setup();
@@ -25,7 +26,7 @@ class MyApp extends StatelessWidget {
      theme: lightTheme,
      darkTheme: darkTheme,
      themeMode: ThemeMode.system,
      home: const HomePage()
      home: HomePage()
    );
  }
}
@@ -33,15 +34,20 @@ class MyApp extends StatelessWidget {
void addMockedData() {
  final userService = GetIt.instance<UserService>();
  final songPostService = GetIt.instance<SongPostService>();
  final usersService = GetIt.instance<UsersService>();
  final mockedUsers = mockedUsersData;
  mockedUsers[0].posts = Set.of(mockedSongPostsData);
  final mockedSongPosts = mockedSongPostsData;

  userService.setUser(mockedUsers[0]);


  for (final post in mockedSongPosts) {
    songPostService.addPost(post);
  }

  for (final user in mockedUsers) {
    usersService.addUser(user);
  }
}


Loading