Commit code. Update time: 2023-06-25

This commit is contained in:
TK
2023-06-25 11:50:55 +08:00
parent 2d74227878
commit 39a5f2fa92
244 changed files with 26147 additions and 0 deletions
+91
View File
@@ -0,0 +1,91 @@
import 'package:flutter/material.dart';
class AppColors {
static const primary = Color(0xffef233c);
static const secondary = Color(0xff272b30);
static const primaryBackground = Color(0xff1a1d1f);
static const secondaryBackground = Color(0xff272b30);
static const primaryText = Color(0xffa9aaac);
static const secondaryText = Colors.white;
static const primaryBtnText = Colors.white;
static const error = Colors.red;
static const black = Colors.black;
static const inactiveColor = Color(0x26ffffff);
static const transparent = Colors.transparent;
static const ratingIconColor = Color(0xffffbe21);
static const circleDotColor = Color(0x33ffffff);
static const iconContainerColor = Color(0xB2272830);
static const gradient = LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [
Color.fromARGB(26, 252, 252, 252),
Color.fromARGB(0, 255, 255, 255),
]);
static const primarySwatch = MaterialColor(
0xFF15141F,
<int, Color>{
50: Color(0xFFE3F2FD),
100: Color(0xFFBBDEFB),
200: Color(0xFF90CAF9),
300: Color(0xFF64B5F6),
400: Color(0xFF42A5F5),
500: primaryColor,
600: Color(0xFF1E88E5),
700: Color(0xFF1976D2),
800: Color(0xFF1565C0),
900: Color(0xFF0D47A1),
},
);
static const darkPrimarySwatch = MaterialColor(
0xFF15141F,
<int, Color>{
50: Color(0xFFE3F2FD),
100: Color(0xFFBBDEFB),
200: Color(0xFF90CAF9),
300: Color(0xFF64B5F6),
400: Color(0xFF42A5F5),
500: darkPrimaryColor,
600: Color(0xFF1E88E5),
700: Color(0xFF1976D2),
800: Color(0xFF1565C0),
900: Color(0xFF0D47A1),
},
);
/// Colors For the Light Theme
static const backgroundColor = Color(0xFFFFFFFF);
static const onBackgroundColor = Color(0xFF15141F);
static const primaryColor = Color(0xFFFFFFFF);
static const onPrimaryColor = Color(0xFF15141F);
static const secondaryColor = Color(0xFFE21221);
static const onSecondaryColor = Color(0xFFFFFFFF);
static const surfaceColor = Color(0xFFFFFFFF);
static const onSurfaceColor = Color(0xFF15141F);
static const errorColor = Color(0xFFF44336);
static const onErrorColor = Color(0xFFFFFFFF);
static const highEmphasized = Color(0xFFFFFFFF);
static const mediumEmphasized = Color(0xFFBCBCBC);
/// Colors For The dark theme
static const darkBackgroundColor = Color(0xFF15141F);
static const darkOnBackgroundColor = Color(0xFFFFFFFF);
static const darkPrimaryColor = Color(0xFF15141F);
static const darkOnPrimaryColor = Color(0xFFFFFFFF);
static const darkSecondaryColor = Color(0xFFE21221);
static const darkOnSecondaryColor = Color(0xFFFF8F71);
static const darkSurfaceColor = Color(0xFF211F30);
static const darkOnSurfaceColor = Color(0xFF211F30);
static const darkErrorColor = Color(0xFFF44336);
static const darkOnErrorColor = Color(0xFFFFFFFF);
static const darkHighEmphasized = Color(0xFFFFFFFF);
static const darkMediumEmphasized = Color(0xFFBCBCBC);
}
const appBgColor = Color(0xFF000000);
const primary = Color(0xFFFC2D55);
const secondary = Color(0xFF19D5F1);
const white = Color(0xFFFFFFFF);
const black = Color(0xFF000000);
+3
View File
@@ -0,0 +1,3 @@
class AppConstants {
static const int carouselSliderItemsCount = 4;
}
+117
View File
@@ -0,0 +1,117 @@
import 'package:flutter/cupertino.dart';
// import 'package:go_router/go_router.dart';
// import 'package:movies_app/core/presentation/pages/main_page.dart';
// import 'package:movies_app/movies/presentation/views/movie_details_view.dart';
// import 'package:movies_app/movies/presentation/views/movies_view.dart';
// import 'package:movies_app/movies/presentation/views/popular_movies_view.dart';
// import 'package:movies_app/movies/presentation/views/top_rated_movies_view.dart';
// import 'package:movies_app/search/presentation/views/search_view.dart';
// import 'package:movies_app/tv_shows/presentation/views/popular_tv_shows_view.dart';
// import 'package:movies_app/tv_shows/presentation/views/top_rated_tv_shows_view.dart';
// import 'package:movies_app/tv_shows/presentation/views/tv_show_details_view.dart';
// import 'package:movies_app/tv_shows/presentation/views/tv_shows_view.dart';
// import 'package:movies_app/core/resources/app_routes.dart';
// import 'package:movies_app/watchlist/presentation/views/watchlist_view.dart';
// const String moviesPath = '/movies';
// const String movieDetailsPath = 'movieDetails/:movieId';
// const String popularMoviesPath = 'popularMovies';
// const String topRatedMoviesPath = 'topRatedMovies';
// const String tvShowsPath = '/tvShows';
// const String tvShowDetailsPath = 'tvShowDetails/:tvShowId';
// const String popularTVShowsPath = 'popularTVShows';
// const String topRatedTVShowsPath = 'topRatedTVShows';
// const String searchPath = '/search';
// const String watchlistPath = '/watchlist';
// class AppRouter {
// GoRouter router = GoRouter(
// initialLocation: moviesPath,
// routes: [
// ShellRoute(
// builder: (context, state, child) => MainPage(child: child),
// routes: [
// GoRoute(
// name: AppRoutes.moviesRoute,
// path: moviesPath,
// pageBuilder: (context, state) => const NoTransitionPage(
// child: MoviesView(),
// ),
// routes: [
// GoRoute(
// name: AppRoutes.movieDetailsRoute,
// path: movieDetailsPath,
// pageBuilder: (context, state) => CupertinoPage(
// child: MovieDetailsView(
// movieId: int.parse(state.params['movieId']!),
// ),
// ),
// ),
// GoRoute(
// name: AppRoutes.popularMoviesRoute,
// path: popularMoviesPath,
// pageBuilder: (context, state) => const CupertinoPage(
// child: PopularMoviesView(),
// ),
// ),
// GoRoute(
// name: AppRoutes.topRatedMoviesRoute,
// path: topRatedMoviesPath,
// pageBuilder: (context, state) => const CupertinoPage(
// child: TopRatedMoviesView(),
// ),
// ),
// ],
// ),
// GoRoute(
// name: AppRoutes.tvShowsRoute,
// path: tvShowsPath,
// pageBuilder: (context, state) => const NoTransitionPage(
// child: TVShowsView(),
// ),
// routes: [
// GoRoute(
// name: AppRoutes.tvShowDetailsRoute,
// path: tvShowDetailsPath,
// pageBuilder: (context, state) => CupertinoPage(
// child: TVShowDetailsView(
// tvShowId: int.parse(state.params['tvShowId']!),
// ),
// ),
// ),
// GoRoute(
// name: AppRoutes.popularTvShowsRoute,
// path: popularTVShowsPath,
// pageBuilder: (context, state) => const CupertinoPage(
// child: PopularTVShowsView(),
// ),
// ),
// GoRoute(
// name: AppRoutes.topRatedTvShowsRoute,
// path: topRatedTVShowsPath,
// pageBuilder: (context, state) => const CupertinoPage(
// child: TopRatedTVShowsView(),
// ),
// ),
// ],
// ),
// GoRoute(
// name: AppRoutes.searchRoute,
// path: searchPath,
// pageBuilder: (context, state) => const NoTransitionPage(
// child: SearchView(),
// ),
// ),
// GoRoute(
// name: AppRoutes.watchlistRoute,
// path: watchlistPath,
// pageBuilder: (context, state) => const NoTransitionPage(
// child: WatchlistView(),
// ),
// ),
// ],
// )
// ],
// );
// }
+14
View File
@@ -0,0 +1,14 @@
class AppRoutes {
static const String moviesRoute = 'movies';
static const String movieDetailsRoute = 'movieDetails';
static const String popularMoviesRoute = 'popularMovies';
static const String topRatedMoviesRoute = 'topRatedMovies';
static const String tvShowsRoute = 'tvShows';
static const String tvShowDetailsRoute = 'tvShowDetails';
static const String popularTvShowsRoute = 'popularTvShowsRoute';
static const String topRatedTvShowsRoute = 'topRatedTvShowsRoute';
static const String searchRoute = 'search';
static const String watchlistRoute = 'watchlist';
}
+5
View File
@@ -0,0 +1,5 @@
class AppShape {
static const largeShape = 25.0;
static const normalShaper = 20.0;
static const smallShape = 10.0;
}
+37
View File
@@ -0,0 +1,37 @@
class AppStrings {
static const String appTitle = 'Movies App';
static const String seeAll = 'see all';
static const String popularMovies = 'Popular movies';
static const String topRatedMovies = 'Top rated movies';
static const String story = 'Story';
static const String videos = 'Videos';
static const String cast = 'Cast';
static const String reviews = 'Reviews';
static const String similar = 'Similar';
static const String showLess = 'Show less';
static const String showMore = 'Show more';
static const String movies = 'Movies';
static const String shows = 'Shows';
static const String search = 'Search';
static const String watchlist = 'Watchlist';
static const String popularShows = 'Popular shows';
static const String topRatedShows = 'Top rated shows';
static const String lastEpisodeOnAir = 'Last Episode on Air';
static const String seasons = 'Seasons';
static const String season = 'Season';
static const String episodes = 'Episodes';
static const String episode = 'Episode';
static const String airDate = 'Air date:';
static const String lastEpisode = 'Last Episode';
static const String searchText =
'By typing in search bar, Movia search in movies and series and then show you the best results.';
static const String searchHint = 'Search for Movies, Series...';
static const String watchlistIsEmpty = 'Watchlist is empty';
static const String watchlistText =
'After adding movies and series to watchlist, they will appear here.';
static const String oops = 'Ooops';
static const String tryAgainLater = 'Please try again later';
static const String errorMessage = 'Something went wrong';
static const String tryAgain = 'try again';
static const String noResults = 'No results';
}
+230
View File
@@ -0,0 +1,230 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:sail/resources/app_colors.dart';
import 'package:sail/resources/app_typography.dart';
ThemeData getApplicationTheme() {
return ThemeData(
// main colors
scaffoldBackgroundColor: AppColors.primaryBackground,
// Bottom nav bar theme
bottomNavigationBarTheme: const BottomNavigationBarThemeData(
backgroundColor: AppColors.secondaryBackground,
selectedItemColor: AppColors.primary,
unselectedItemColor: AppColors.primaryText,
type: BottomNavigationBarType.fixed,
),
// app bar theme
appBarTheme: AppBarTheme(
backgroundColor: AppColors.primaryBackground,
elevation: 0,
centerTitle: true,
systemOverlayStyle: SystemUiOverlayStyle.light,
titleTextStyle: _getTextStyle(
fontSize: 18,
color: AppColors.secondaryText,
),
),
// text theme
textTheme: TextTheme(
titleMedium: _getTextStyle(
fontSize: 20,
color: AppColors.secondaryText,
),
titleSmall: _getTextStyle(
fontSize: 18,
color: AppColors.secondaryText,
),
bodyLarge: _getTextStyle(
fontSize: 14,
fontWeight: FontWeight.w400,
color: AppColors.primaryText,
),
bodyMedium: _getTextStyle(
fontSize: 14,
color: AppColors.secondaryText,
),
bodySmall: _getTextStyle(
fontSize: 12,
fontWeight: FontWeight.w400,
color: AppColors.primaryText,
),
),
);
}
TextStyle _getTextStyle({
required double fontSize,
FontWeight fontWeight = FontWeight.w600,
required Color color,
}) {
return GoogleFonts.poppins(
fontSize: fontSize,
fontWeight: fontWeight,
color: color,
);
}
class AppTheme {
static final flatButtonStyle = TextButton.styleFrom(
textStyle: AppTypography.labelMedium,
padding: const EdgeInsets.symmetric(horizontal: 16.0),
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(2.0)),
),
);
static final raisedButtonStyle = ElevatedButton.styleFrom(
foregroundColor: Colors.white,
backgroundColor: AppColors.secondaryColor,
textStyle: AppTypography.labelMedium,
minimumSize: const Size(88, 36),
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(20)),
),
);
static final outlineButtonStyle = OutlinedButton.styleFrom(
textStyle: AppTypography.labelMedium,
side: const BorderSide(color: AppColors.onPrimaryColor, width: 2),
padding: const EdgeInsets.symmetric(horizontal: 16),
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(20)),
),
);
static final lightThemeData = ThemeData(
useMaterial3: true,
primarySwatch: AppColors.primarySwatch,
splashColor: AppColors.secondaryColor,
scaffoldBackgroundColor: AppColors.backgroundColor,
fontFamily: 'Urbanist',
appBarTheme: AppBarTheme(
// systemOverlayStyle: SystemUiOverlayStyle.light,
backgroundColor: AppColors.backgroundColor,
iconTheme: const IconThemeData(
color: AppColors.onBackgroundColor,
),
titleTextStyle: AppTypography.titleLarge.copyWith(
color: AppColors.onPrimaryColor,
),
),
textTheme: TextTheme(
bodyLarge: AppTypography.bodyLarge.copyWith(
color: AppColors.onPrimaryColor,
),
bodyMedium: AppTypography.bodyMedium.copyWith(
color: AppColors.onPrimaryColor,
),
bodySmall: AppTypography.bodySmall.copyWith(
color: AppColors.onPrimaryColor,
),
labelLarge: AppTypography.labelLarge.copyWith(
color: AppColors.onPrimaryColor,
),
labelMedium: AppTypography.labelMedium.copyWith(
color: AppColors.onPrimaryColor,
),
labelSmall: AppTypography.labelSmall.copyWith(
color: AppColors.onPrimaryColor,
),
titleLarge: AppTypography.titleLarge.copyWith(
color: AppColors.onPrimaryColor,
),
titleMedium: AppTypography.titleMedium.copyWith(
color: AppColors.onPrimaryColor,
),
titleSmall: AppTypography.titleSmall.copyWith(
color: AppColors.onPrimaryColor,
),
),
colorScheme: const ColorScheme(
brightness: Brightness.dark,
primary: AppColors.primaryColor,
onPrimary: AppColors.onPrimaryColor,
secondary: AppColors.secondaryColor,
onSecondary: AppColors.onSecondaryColor,
background: AppColors.backgroundColor,
onBackground: AppColors.onBackgroundColor,
error: AppColors.errorColor,
onError: AppColors.onErrorColor,
surface: AppColors.surfaceColor,
onSurface: AppColors.onSurfaceColor,
),
elevatedButtonTheme: ElevatedButtonThemeData(style: raisedButtonStyle),
textButtonTheme: TextButtonThemeData(style: flatButtonStyle),
outlinedButtonTheme: OutlinedButtonThemeData(style: outlineButtonStyle),
bottomSheetTheme:
BottomSheetThemeData(backgroundColor: Colors.black.withOpacity(0)),
);
static final darkThemeData = ThemeData(
useMaterial3: true,
primarySwatch: AppColors.darkPrimarySwatch,
splashColor: AppColors.darkSecondaryColor,
scaffoldBackgroundColor: AppColors.darkBackgroundColor,
fontFamily: 'Urbanist',
appBarTheme: AppBarTheme(
// systemOverlayStyle: SystemUiOverlayStyle.dark,
backgroundColor: AppColors.darkBackgroundColor,
iconTheme: const IconThemeData(
color: AppColors.darkOnBackgroundColor,
),
titleTextStyle: AppTypography.titleLarge.copyWith(
color: AppColors.darkOnPrimaryColor,
),
),
textTheme: TextTheme(
bodyLarge: AppTypography.bodyLarge.copyWith(
color: AppColors.darkOnPrimaryColor,
),
bodyMedium: AppTypography.bodyMedium.copyWith(
color: AppColors.darkOnPrimaryColor,
),
bodySmall: AppTypography.bodySmall.copyWith(
color: AppColors.darkOnPrimaryColor,
),
labelLarge: AppTypography.labelLarge.copyWith(
color: AppColors.darkOnPrimaryColor,
),
labelMedium: AppTypography.labelMedium.copyWith(
color: AppColors.darkOnPrimaryColor,
),
labelSmall: AppTypography.labelSmall.copyWith(
color: AppColors.darkOnPrimaryColor,
),
titleLarge: AppTypography.titleLarge.copyWith(
color: AppColors.darkOnPrimaryColor,
),
titleMedium: AppTypography.titleMedium.copyWith(
color: AppColors.darkOnPrimaryColor,
),
titleSmall: AppTypography.titleSmall.copyWith(
color: AppColors.darkOnPrimaryColor,
),
),
colorScheme: const ColorScheme(
brightness: Brightness.dark,
primary: AppColors.darkPrimaryColor,
onPrimary: AppColors.darkOnPrimaryColor,
secondary: AppColors.darkSecondaryColor,
onSecondary: AppColors.darkOnSecondaryColor,
background: AppColors.darkBackgroundColor,
onBackground: AppColors.darkOnBackgroundColor,
error: AppColors.darkErrorColor,
onError: AppColors.darkOnErrorColor,
surface: AppColors.darkSurfaceColor,
onSurface: AppColors.darkOnSurfaceColor,
),
elevatedButtonTheme: ElevatedButtonThemeData(style: raisedButtonStyle),
textButtonTheme: TextButtonThemeData(style: flatButtonStyle),
outlinedButtonTheme: OutlinedButtonThemeData(style: outlineButtonStyle),
bottomSheetTheme:
BottomSheetThemeData(backgroundColor: Colors.black.withOpacity(0)),
);
}
+40
View File
@@ -0,0 +1,40 @@
import 'package:flutter/material.dart';
class AppTypography {
static const titleLarge = TextStyle(
fontSize: 20.0,
fontWeight: FontWeight.w500,
);
static const titleMedium = TextStyle(
fontSize: 20.0,
fontWeight: FontWeight.w600,
);
static const titleSmall = TextStyle(
fontSize: 16.0,
fontWeight: FontWeight.normal,
);
static const labelLarge = TextStyle(
fontSize: 20.0,
fontWeight: FontWeight.bold,
);
static const labelMedium = TextStyle(
fontSize: 16.0,
fontWeight: FontWeight.normal,
);
static const labelSmall = TextStyle(
fontSize: 14.0,
fontWeight: FontWeight.normal,
);
static const bodyLarge = TextStyle(
fontSize: 16.0,
fontWeight: FontWeight.w500,
);
static const bodyMedium = TextStyle(
fontSize: 14.0,
fontWeight: FontWeight.w500,
);
static const bodySmall = TextStyle(
fontSize: 12.0,
fontWeight: FontWeight.normal,
);
}
+62
View File
@@ -0,0 +1,62 @@
class AppMargin {
static const double m8 = 8.0;
static const double m10 = 10.0;
static const double m12 = 12.0;
static const double m14 = 14.0;
static const double m16 = 16.0;
static const double m18 = 18.0;
static const double m20 = 20.0;
}
class AppPadding {
static const double p2 = 2.0;
static const double p4 = 4.0;
static const double p6 = 6.0;
static const double p8 = 8.0;
static const double p12 = 12.0;
static const double p10 = 10.0;
static const double p14 = 14.0;
static const double p16 = 16.0;
static const double p18 = 18.0;
static const double p20 = 20.0;
static const double p24 = 24.0;
static const double p32 = 32.0;
static const double p36 = 36.0;
}
class AppSize {
static const double s0 = 0.0;
static const double s1 = 1.0;
static const double s4 = 4.0;
static const double s6 = 6.0;
static const double s8 = 8.0;
static const double s10 = 10.0;
static const double s12 = 12.0;
static const double s14 = 14.0;
static const double s15 = 15.0;
static const double s16 = 16.0;
static const double s18 = 18.0;
static const double s20 = 20.0;
static const double s22 = 22.0;
static const double s24 = 24.0;
static const double s30 = 30.0;
static const double s36 = 36.0;
static const double s40 = 40.0;
static const double s45 = 45.0;
static const double s60 = 60.0;
static const double s84 = 84.0;
static const double s100 = 100.0;
static const double s110 = 110.0;
static const double s120 = 120.0;
static const double s130 = 130.0;
static const double s140 = 140.0;
static const double s150 = 150.0;
static const double s160 = 160.0;
static const double s175 = 175.0;
static const double s190 = 190.0;
static const double s200 = 200.0;
static const double s220 = 220.0;
static const double s240 = 240.0;
static const double s400 = 400.0;
static const double s800 = 800.0;
}