Commit 19af3095 authored by Michal Cikatricis's avatar Michal Cikatricis
Browse files

Feat (home page): reworked home page, access to current user needed

parent f70eba93
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:stamped/bottom_nav_bar/widget/bottom_nav_bar.dart';
import 'package:stamped/pages/auth/login_page.dart';

class AppWrapper extends StatelessWidget {
  // final Widget child;
+3 −21
Original line number Diff line number Diff line
import 'package:flutter/material.dart';
import 'package:stamped/common/service/ioc_container.dart';
import 'package:stamped/common/widget/future_builder_handler.dart';
import 'package:stamped/data/entities/user.dart';
import 'package:stamped/data/models/postcard.dart';
import 'package:stamped/pages/collections/postcard_detail.dart';
import 'package:stamped/service/media_service.dart';
@@ -11,25 +10,8 @@ class PostcardTile extends StatelessWidget {

  const PostcardTile({super.key, required this.postcard});

  factory PostcardTile.empty() {
    final postcard = Postcard(
      id: '0',
      imagePath:
          'https://firebasestorage.googleapis.com/v0/b/stamped-56619.appspot.com/o/0%2Ftestimage1.jfif?alt=media&token=89d731be-b01b-4505-aa05-d5e6292a2893',
      stampPath: '0',
      originLocation: 'Germany',
      destinationLocation: 'Germany',
      text: '0',
      sender: User(
          id: '0',
          userName: 'userName',
          profilePicture: 'profilePicture',
          lastLocation: 'lastLocation',
          isAdmin: true), timestamp: DateTime.parse('2023-07-20 20:18:04Z'),
    ); // create a new instance of Postcard
    return PostcardTile(
      postcard: postcard,
    ); // pass it to the existing constructor
  static PostcardTile fromData(Postcard data) {
    return PostcardTile(postcard: data);
  }

  @override
@@ -70,7 +52,7 @@ class PostcardTile extends StatelessWidget {
              ),
              Row(
                children: [
                  Text(postcard.sender.userName),
                  Text('some name'),
                  Spacer(),
                  FutureBuilderHandler(
                    future:
+59 −50
Original line number Diff line number Diff line
import 'package:flutter/material.dart';
import 'package:stamped/common/service/ioc_container.dart';
import 'package:stamped/common/util/shared_ui_constants.dart';
import 'package:stamped/common/widget/page_template.dart';
import 'package:stamped/common/widget/stream_builder_handler.dart';
import 'package:stamped/data/models/postcard.dart';
import 'package:stamped/pages/collections/postcard_tile.dart';
import 'package:stamped/pages/home/from_friend_card.dart';

final postcardPlaceholders = [
  for (var _ = 0; _ < 5; _++) PostcardTile.empty(),
];

final fromYourFriendsPlaceholder = [
  for (var _ = 0; _ < 4; _++) FromFriendCard()
];
import 'package:stamped/service/postcard_service.dart';

class HomePage extends StatelessWidget {
  const HomePage({Key? key}) : super(key: key);
  HomePage({Key? key}) : super(key: key);

  final postcardService = get<PostcardService>();

  @override
  Widget build(BuildContext context) {
@@ -25,35 +22,20 @@ class HomePage extends StatelessWidget {
          mainAxisSize: MainAxisSize.max,
          children: [
            _buildHeading('Postcards in Your Area'),
            _buildCardCarousel(
              context,
              height: 250,
              itemBuilder: (context, index) =>
                  postcardPlaceholders.elementAt(index),
              itemCount: postcardPlaceholders.length,
            ),
            _buildScrollList<Postcard>(
                context, 250, _recentPostcardStream(), PostcardTile.fromData),
            SizedBox(
              height: STANDARD_GAP,
            ),
            _buildHeading('From Your Friends'),
            _buildCardCarousel(
              context,
              height: 150,
              itemBuilder: (context, index) =>
                  fromYourFriendsPlaceholder.elementAt(index),
              itemCount: fromYourFriendsPlaceholder.length,
            ),
            _buildHeading('Recently Obtained Stamps'),
            _buildScrollList<String>(
                context, 220, postcardService.stampStream, _stampBuilder),
            SizedBox(
              height: STANDARD_GAP,
            ),
            _buildHeading('Your Last Postcards'),
            _buildCardCarousel(
              context,
              height: 250,
              itemBuilder: (context, index) =>
                  postcardPlaceholders.elementAt(index),
              itemCount: postcardPlaceholders.length,
            )
            _buildHeading('Your Last Postcards TBD'),
            _buildScrollList<Postcard>(
                context, 250, _recentPostcardStream(), PostcardTile.fromData),
          ],
        ),
      ),
@@ -71,22 +53,49 @@ class HomePage extends StatelessWidget {
        ),
      );

  Widget _buildCardCarousel(
    BuildContext context, {
    required double height,
    required Widget Function(BuildContext, int) itemBuilder,
    required int itemCount,
  }) =>
      SizedBox(
  Widget _buildScrollList<T>(BuildContext context, double height,
      Stream<Iterable<T>> stream, Widget Function(T) builder) {
    return Container(
      height: height,
      width: MediaQuery.of(context).size.width,
        child: ListView.separated(
          itemBuilder: itemBuilder,
      child: StreamBuilderHandler(
          stream: stream,
          builder: (BuildContext context, data) {
            return ListView.separated(
              itemBuilder: (context, index) => builder(data.elementAt(index)),
              separatorBuilder: (context, index) => SizedBox(
            width: STANDARD_GAP,
                width: 12,
              ),
          itemCount: itemCount,
              itemCount: data.length,
              scrollDirection: Axis.horizontal,
            );
          }),
    );
  }

  Stream<List<Postcard>> _recentPostcardStream() {
    return postcardService.postcardDataStream.map((List<Postcard> postcards) {
      final recent = postcards
          .where((p) =>
              (DateTime.now().millisecondsSinceEpoch -
                  p.timestamp.millisecondsSinceEpoch) <
              1800000)
          .toList();
      recent.sort((a, b) => a.timestamp.compareTo(b.timestamp));
      return recent;
    });
  }

  Widget _stampBuilder(String url) {
    return Container(
      height: 220,
      width: 150,
      decoration: BoxDecoration(
        image: DecorationImage(
          image: NetworkImage(url),
          fit: BoxFit.contain,
        ),
      ),
    );
  }
}
+3 −2
Original line number Diff line number Diff line
@@ -53,11 +53,12 @@ class PostcardService {
    );
  }

  Stream<List<String>> get stampStream {
  Stream<Set<String>> get stampStream {
    return _postcards.stream.map((List<PostcardEntity> postcards) {
      postcards.sort((a, b) => a.timestamp.compareTo(b.timestamp));
      return postcards
          .map((postcard) => postcard.stampPath)
          .toList();
          .toSet();
    });
  }