From 2d91b92f0b9f2ca68c50d2b3a6a0c1c673cf927d Mon Sep 17 00:00:00 2001 From: Marcelo Pecin Date: Sun, 27 Nov 2022 20:00:15 +0100 Subject: [PATCH] feat(gototop): adicionado voltar ao topo, nas paginas home recentes --- lib/src/app.dart | 11 +++++++++- lib/src/ui/layouts/tab.dart | 23 +++++++++++++++++---- lib/src/ui/pages/home.dart | 5 ++++- lib/src/ui/pages/login.dart | 31 +++++++++++++++++++++------- lib/src/ui/pages/new_content.dart | 21 +++++++++++++------ lib/src/ui/pages/recents.dart | 5 ++++- lib/src/ui/widgets/item_content.dart | 3 ++- 7 files changed, 77 insertions(+), 22 deletions(-) diff --git a/lib/src/app.dart b/lib/src/app.dart index c960684..17d697e 100644 --- a/lib/src/app.dart +++ b/lib/src/app.dart @@ -25,7 +25,16 @@ class App extends StatelessWidget { child: MaterialApp( title: 'TabNews', debugShowCheckedModeBanner: false, - darkTheme: ThemeData.dark(), + darkTheme: ThemeData.dark().copyWith( + primaryColor: Colors.white, + colorScheme: const ColorScheme.light( + primary: Colors.white60, + secondary: Colors.white60, + ), + textSelectionTheme: TextSelectionThemeData( + selectionColor: Colors.grey.shade700, + ), + ), theme: ThemeData( primaryColor: Colors.black, colorScheme: const ColorScheme.light( diff --git a/lib/src/ui/layouts/tab.dart b/lib/src/ui/layouts/tab.dart index 0f43d9d..a3573d4 100644 --- a/lib/src/ui/layouts/tab.dart +++ b/lib/src/ui/layouts/tab.dart @@ -18,10 +18,15 @@ class TabLayout extends StatefulWidget { } class _TabLayoutState extends State { + List pagesScrollController = [ + ScrollController(), + ScrollController(), + ]; + int _currentPage = 0; - static final List _pages = [ - const HomePage(), - const RecentsPage(), + late final List _pages = [ + HomePage(scrollController: pagesScrollController[0]), + RecentsPage(scrollController: pagesScrollController[1]), const FavoritesPage(), Consumer( builder: (context, provider, _) => @@ -31,7 +36,17 @@ class _TabLayoutState extends State { void _onItemTapped(int index) { setState(() { - _currentPage = index; + if (index != _currentPage) { + _currentPage = index; + } else { + pagesScrollController[_currentPage].animateTo( + 0, + duration: const Duration( + milliseconds: 500, + ), + curve: Curves.fastOutSlowIn, + ); + } }); } diff --git a/lib/src/ui/pages/home.dart b/lib/src/ui/pages/home.dart index c971c96..e289fd1 100644 --- a/lib/src/ui/pages/home.dart +++ b/lib/src/ui/pages/home.dart @@ -8,7 +8,9 @@ import 'package:tabnews/src/ui/widgets/item_content.dart'; import 'package:tabnews/src/ui/widgets/progress_indicator.dart'; class HomePage extends StatefulWidget { - const HomePage({super.key}); + final ScrollController scrollController; + + const HomePage({super.key, required this.scrollController}); @override State createState() => _HomePageState(); @@ -63,6 +65,7 @@ class _HomePageState extends State { child: PagedListView( padding: const EdgeInsets.all(10.0), pagingController: _pagingController, + scrollController: widget.scrollController, builderDelegate: PagedChildBuilderDelegate( itemBuilder: (context, item, index) { return ItemContent(index: index, content: item); diff --git a/lib/src/ui/pages/login.dart b/lib/src/ui/pages/login.dart index 01c1ea6..109a7f2 100644 --- a/lib/src/ui/pages/login.dart +++ b/lib/src/ui/pages/login.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:tabnews/src/constants.dart'; +import 'package:tabnews/src/extensions/dark_mode.dart'; import 'package:tabnews/src/providers/user.dart'; import 'package:tabnews/src/ui/pages/register.dart'; import 'package:tabnews/src/utils/navigation.dart'; @@ -34,11 +35,15 @@ class _LoginPageState extends State { Expanded( child: TextFormField( keyboardType: TextInputType.emailAddress, - cursorColor: AppColors.primaryColor, - decoration: const InputDecoration( + cursorColor: context.isDarkMode + ? Colors.white + : AppColors.primaryColor, + decoration: InputDecoration( focusedBorder: UnderlineInputBorder( borderSide: BorderSide( - color: AppColors.primaryColor, + color: context.isDarkMode + ? Colors.white + : AppColors.primaryColor, width: 2.0, ), ), @@ -56,11 +61,15 @@ class _LoginPageState extends State { enableSuggestions: false, autocorrect: false, obscureText: true, - cursorColor: AppColors.primaryColor, - decoration: const InputDecoration( + cursorColor: context.isDarkMode + ? Colors.white + : AppColors.primaryColor, + decoration: InputDecoration( focusedBorder: UnderlineInputBorder( borderSide: BorderSide( - color: AppColors.primaryColor, + color: context.isDarkMode + ? Colors.white + : AppColors.primaryColor, width: 2.0, ), ), @@ -116,11 +125,17 @@ class _LoginPageState extends State { mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ - const Text('Ainda não possui conta?'), + Text( + 'Ainda não possui conta?', + style: + const TextStyle().copyWith(color: Colors.grey.shade600), + ), TextButton( style: const ButtonStyle().copyWith( foregroundColor: MaterialStateProperty.all( - AppColors.primaryColor, + context.isDarkMode + ? Colors.white + : AppColors.primaryColor, ), ), onPressed: () => Navigation.push(context, RegisterPage()), diff --git a/lib/src/ui/pages/new_content.dart b/lib/src/ui/pages/new_content.dart index 87b635e..aaaf7b3 100644 --- a/lib/src/ui/pages/new_content.dart +++ b/lib/src/ui/pages/new_content.dart @@ -4,6 +4,7 @@ import 'package:markdown_editable_textinput/markdown_text_input.dart'; import 'package:provider/provider.dart'; import 'package:tabnews/src/constants.dart'; +import 'package:tabnews/src/extensions/dark_mode.dart'; import 'package:tabnews/src/providers/content.dart'; import 'package:tabnews/src/ui/layouts/page.dart'; import 'package:tabnews/src/ui/pages/my_contents.dart'; @@ -48,11 +49,15 @@ class _NewContentPageState extends State { crossAxisAlignment: CrossAxisAlignment.stretch, children: [ TextFormField( - cursorColor: AppColors.primaryColor, - decoration: const InputDecoration( + cursorColor: context.isDarkMode + ? Colors.white + : AppColors.primaryColor, + decoration: InputDecoration( focusedBorder: UnderlineInputBorder( borderSide: BorderSide( - color: AppColors.primaryColor, + color: context.isDarkMode + ? Colors.white + : AppColors.primaryColor, width: 2.0, ), ), @@ -89,11 +94,15 @@ class _NewContentPageState extends State { ), const SizedBox(height: 15.0), TextFormField( - cursorColor: AppColors.primaryColor, - decoration: const InputDecoration( + cursorColor: context.isDarkMode + ? Colors.white + : AppColors.primaryColor, + decoration: InputDecoration( focusedBorder: UnderlineInputBorder( borderSide: BorderSide( - color: AppColors.primaryColor, + color: context.isDarkMode + ? Colors.white + : AppColors.primaryColor, width: 2.0, ), ), diff --git a/lib/src/ui/pages/recents.dart b/lib/src/ui/pages/recents.dart index 6146add..1f0bb47 100644 --- a/lib/src/ui/pages/recents.dart +++ b/lib/src/ui/pages/recents.dart @@ -8,7 +8,9 @@ import 'package:tabnews/src/ui/widgets/item_content.dart'; import 'package:tabnews/src/ui/widgets/progress_indicator.dart'; class RecentsPage extends StatefulWidget { - const RecentsPage({super.key}); + final ScrollController scrollController; + + const RecentsPage({super.key, required this.scrollController}); @override State createState() => _RecentsPageState(); @@ -63,6 +65,7 @@ class _RecentsPageState extends State { child: PagedListView( padding: const EdgeInsets.all(10.0), pagingController: _pagingController, + scrollController: widget.scrollController, builderDelegate: PagedChildBuilderDelegate( itemBuilder: (context, item, index) { return ItemContent(index: index, content: item); diff --git a/lib/src/ui/widgets/item_content.dart b/lib/src/ui/widgets/item_content.dart index 796dc1d..439a1fe 100644 --- a/lib/src/ui/widgets/item_content.dart +++ b/lib/src/ui/widgets/item_content.dart @@ -48,7 +48,8 @@ class ItemContent extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Row( - crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( '${index + 1}.',