Skip to content

Commit

Permalink
Added avatar feature
Browse files Browse the repository at this point in the history
  • Loading branch information
luuolli committed Sep 13, 2021
1 parent d11c042 commit e71ca49
Show file tree
Hide file tree
Showing 5 changed files with 120 additions and 22 deletions.
3 changes: 2 additions & 1 deletion lib/src/app/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@ class AppWidget extends StatelessWidget {
statusBarColor: Colors.transparent,
));

return const MaterialApp(
return MaterialApp(
debugShowCheckedModeBanner: false,
initialRoute: '/',
theme: ThemeData.dark(),
).modular();
}
}
57 changes: 57 additions & 0 deletions lib/src/features/avatar/views/avatar_customizer_page.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:fluttermoji/fluttermojiCircleAvatar.dart';
import 'package:fluttermoji/fluttermojiCustomizer.dart';
import 'package:starwars/src/core/core.dart';

class AvatarCustomizerPage extends StatelessWidget {
final VoidCallback onBackPressed;
const AvatarCustomizerPage({
Key? key,
required this.onBackPressed,
}) : super(key: key);

@override
Widget build(BuildContext context) {
return CupertinoPageScaffold(
backgroundColor: StarwarsColors.backgroundDark,
navigationBar: CupertinoNavigationBar(
padding: const EdgeInsetsDirectional.only(top: 10),
backgroundColor: StarwarsColors.backgroundDark,
leading: CupertinoButton(
padding: EdgeInsets.zero,
child: Icon(
CupertinoIcons.back,
color: StarwarsColors.white,
),
onPressed: onBackPressed,
),
automaticallyImplyLeading: false,
middle: Text(
'Edite seu avatar',
style: TextStyle(color: StarwarsColors.white),
),
),
child: SafeArea(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
FluttermojiCircleAvatar(
radius: MediaQuery.of(context).size.width * 0.3,
backgroundColor: StarwarsColors.greyAccent.withOpacity(0.2),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 10),
child: Material(
child: FluttermojiCustomizer(
outerTitleText: 'Customize',
scaffoldWidth: MediaQuery.of(context).size.width,
),
),
),
],
),
),
);
}
}
64 changes: 50 additions & 14 deletions lib/src/features/home/home_page.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
// ignore_for_file: unnecessary_const

import 'package:flutter/animation.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_modular/flutter_modular.dart';
import 'package:fluttermoji/fluttermoji.dart';
import 'package:starwars/src/features/avatar/views/avatar_customizer_page.dart';

import '../../core/core.dart';
import '../favorites/controllers/favorite_controller.dart';
Expand All @@ -24,9 +27,10 @@ class HomePage extends StatefulWidget {
}

class _HomePageState extends State<HomePage> {
final _mainPageScaffoldController = PageController();
final _pageController = PageController();

int activedPage = 0;
int activePage = 0;

final pages = [
FilmListView(),
Expand All @@ -41,21 +45,25 @@ class _HomePageState extends State<HomePage> {
}

void changePage(int page) {
setState(() {
activedPage = page;
});
_pageController.animateToPage(
activedPage,
_pageController
.animateToPage(
page,
curve: Curves.bounceInOut,
duration: const Duration(milliseconds: 200),
);
)
.whenComplete(() {
setState(() {
activePage = page;
});
});
}

@override
Widget build(BuildContext context) {
return CupertinoPageScaffold(
backgroundColor: StarwarsColors.backgroundDark,
child: PageView(
controller: _mainPageScaffoldController,
children: [
NestedScrollView(
headerSliverBuilder:
Expand All @@ -76,33 +84,45 @@ class _HomePageState extends State<HomePage> {
padding: EdgeInsets.zero,
child: const Icon(Icons.public),
onPressed: () {
print(Modular.to.path);
Modular.to.pushNamed('starwars-web', forRoot: true);
},
),
actions: const [
CupertinoButton(child: Icon(Icons.person), onPressed: null),
actions: [
CupertinoButton(
padding: EdgeInsets.zero.copyWith(right: 20),
child: FluttermojiCircleAvatar(
radius: 25,
backgroundColor: StarwarsColors.white,
),
onPressed: () {
_mainPageScaffoldController.animateToPage(
1,
duration: const Duration(milliseconds: 200),
curve: Curves.bounceInOut,
);
},
),
],
bottom: PreferredSize(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
NavigationitemWidget(
isActive: activedPage == 0,
isActive: activePage == 0,
icon: Icons.movie,
label: 'Filmes',
page: 0,
onPageChanged: changePage,
),
NavigationitemWidget(
isActive: activedPage == 1,
isActive: activePage == 1,
icon: Icons.emoji_people_rounded,
label: 'Personagens',
page: 1,
onPageChanged: changePage,
),
NavigationitemWidget(
isActive: activedPage == 2,
isActive: activePage == 2,
icon: CupertinoIcons.heart_fill,
label: 'Favoritos',
page: 2,
Expand All @@ -119,15 +139,31 @@ class _HomePageState extends State<HomePage> {
physics: const BouncingScrollPhysics(),
padEnds: false,
controller: _pageController,
onPageChanged: changePage,
itemCount: pages.length,
itemBuilder: (context, index) {
return pages[index];
},
),
),
Container(),
AvatarCustomizerPage(
onBackPressed: () {
_mainPageScaffoldController.animateToPage(
0,
duration: const Duration(milliseconds: 200),
curve: Curves.bounceOut,
);
},
),
],
),
);
}

@override
void dispose() {
_pageController.dispose();
_mainPageScaffoldController.dispose();
super.dispose();
}
}
14 changes: 7 additions & 7 deletions lib/src/features/people/controllers/people_controller.dart
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import 'dart:ffi';

import 'package:flutter/cupertino.dart';
import 'package:flutter_modular/flutter_modular.dart';
import 'package:mobx/mobx.dart';
import 'package:starwars/src/core/core.dart';
import 'package:starwars/src/features/favorites/controllers/favorite_controller.dart';
import 'package:starwars/src/features/people/components/people_component.dart';
import 'package:starwars/src/features/people/models/models.dart';
import 'package:starwars/src/features/people/repositories/people_repository_interface.dart';

import '../../../core/core.dart';
import '../../favorites/controllers/favorite_controller.dart';
import '../components/people_component.dart';
import '../models/models.dart';
import '../repositories/repositories.dart';

part 'people_controller.g.dart';

class PeopleStore = _PeopleStoreBase with _$PeopleStore;
Expand Down
4 changes: 4 additions & 0 deletions lib/src/features/people/repositories/repositories.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
library peoples.repositories;

export 'people_repository_interface.dart';
export 'people_repository_impl.dart';

0 comments on commit e71ca49

Please sign in to comment.