Preparing new style (theme & colors)

main_design2.0
zaid_daoud 2 years ago
parent 6ef281d604
commit 3b3de831f0

@ -2,5 +2,6 @@ class ASettings {
static final String user = "user"; static final String user = "user";
static final String host = "host"; static final String host = "host";
static final String language = "language"; static final String language = "language";
static final String theme = "theme";
static final String speechToText = "speech_to_text"; static final String speechToText = "speech_to_text";
} }

@ -1,10 +1,11 @@
import 'dart:async'; import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:test_sa/new_views/app_style/app_themes.dart';
import '../settings/app_settings.dart'; import '../settings/app_settings.dart';
@ -47,6 +48,15 @@ class SettingProvider extends ChangeNotifier {
notifyListeners(); notifyListeners();
} }
String _theme;
ThemeData get theme => _theme == "light" ? AppThemes.lightTheme : AppThemes.darkTheme;
Future<void> setTheme(ThemeData themeData) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
_theme = themeData.brightness == Brightness.light ? "light" : "dark";
prefs.setString(ASettings.theme, _theme);
notifyListeners();
}
String _speechToText; String _speechToText;
String get speechToText => _speechToText; String get speechToText => _speechToText;
Future<void> setSpeechToText(String currentLanguage) async { Future<void> setSpeechToText(String currentLanguage) async {
@ -71,6 +81,12 @@ class SettingProvider extends ChangeNotifier {
_language = 'en'; _language = 'en';
} }
if (prefs.containsKey(ASettings.theme)) {
_theme = prefs.getString(ASettings.theme);
} else {
_theme = 'light';
}
if (prefs.containsKey(ASettings.speechToText)) { if (prefs.containsKey(ASettings.speechToText)) {
_speechToText = prefs.getString(ASettings.speechToText); _speechToText = prefs.getString(ASettings.speechToText);
} else { } else {

@ -5,86 +5,28 @@ import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/departments_provider.dart'; import 'package:test_sa/new_views/app_style/app_themes.dart';
import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart'; import 'package:test_sa/new_views/pages/login_page.dart';
import 'package:test_sa/controllers/providers/api/devices_provider.dart'; import 'package:test_sa/new_views/pages/splash_page.dart';
import 'package:test_sa/controllers/providers/api/gas_refill_provider.dart';
import 'package:test_sa/controllers/providers/api/hospitals_provider.dart';
import 'package:test_sa/controllers/providers/api/notifications_provider.dart';
import 'package:test_sa/controllers/providers/api/regular_visits_provider.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/asset_transfer_status_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/employee/assigned_to_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/employee/engineers_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_type_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_status_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_equipment_status_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_maintenance_situation_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_users_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_visit_date_operator_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_first_action_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_loan_availability_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_status_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_through_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_type_provider.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/pages/login.dart';
import 'package:test_sa/views/pages/register.dart';
import 'package:test_sa/views/pages/splash_screen.dart';
import 'package:test_sa/views/pages/sub_workorder/create_sub_workorder_page.dart';
import 'package:test_sa/views/pages/sub_workorder/search_sub_workorder_page.dart';
import 'package:test_sa/views/pages/user/gas_refill/request_gas_refill.dart';
import 'package:test_sa/views/pages/user/gas_refill/track_gas_refill.dart';
import 'package:test_sa/views/pages/user/land_page.dart';
import 'package:test_sa/views/pages/user/notifications/notifications_page.dart';
import 'package:test_sa/views/pages/user/profile_page.dart';
import 'package:test_sa/views/pages/user/report_issues_page.dart';
import 'package:test_sa/views/pages/user/requests/create_request.dart';
import 'package:test_sa/views/pages/user/requests/future_request_service_details.dart';
import 'package:test_sa/views/pages/user/requests/requests_page.dart';
import 'package:test_sa/views/pages/user/visits/preventive_maintenance_visits_page.dart';
import 'package:test_sa/views/pages/user/visits/regular_visits_page.dart';
import 'package:test_sa/views/widgets/departments/single_department_picker.dart';
import 'package:test_sa/views/widgets/equipment/single_device_picker.dart';
import 'controllers/providers/api/parts_provider.dart';
import 'controllers/providers/api/preventive_maintenance_visits_provider.dart';
import 'controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart';
import 'controllers/providers/api/status_drop_down/report/service_report_assistants_employee_provider.dart';
import 'controllers/providers/api/status_drop_down/report/service_report_fault_description_provider.dart';
import 'controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart';
import 'controllers/providers/api/status_drop_down/report/service_report_reasons_provider.dart';
import 'controllers/providers/api/status_drop_down/report/service_report_repair_location_provider.dart';
import 'controllers/providers/api/status_drop_down/report/service_report_status_provider.dart';
import 'controllers/providers/api/status_drop_down/report/service_report_types_provider.dart';
import 'controllers/providers/api/status_drop_down/report/service_types_provider.dart';
import 'controllers/providers/api/status_drop_down/report/vendor_provider.dart';
import 'controllers/providers/api/user_provider.dart'; import 'controllers/providers/api/user_provider.dart';
import 'controllers/providers/settings/setting_provider.dart'; import 'controllers/providers/settings/setting_provider.dart';
import 'views/pages/device_transfer/request_device_transfer.dart';
import 'views/pages/device_transfer/track_device_transfer.dart';
import 'views/widgets/hospitals/single_hospital_picker.dart';
void main() async { void main() async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
if (Platform.isIOS) { if (Platform.isIOS) {
await Firebase.initializeApp( await Firebase.initializeApp(
options: options: const FirebaseOptions(
const FirebaseOptions(apiKey: "AIzaSyACQkSleNwU1jzEKR5ho1uSfZERokwwAbc", appId: "1:973582662416:ios:bc4a8061444c6a08fbc395", messagingSenderId: "973582662416", projectId: "atoms-fb912"), apiKey: "AIzaSyACQkSleNwU1jzEKR5ho1uSfZERokwwAbc",
appId: "1:973582662416:ios:bc4a8061444c6a08fbc395",
messagingSenderId: "973582662416",
projectId: "atoms-fb912",
),
); );
} else { } else {
await Firebase.initializeApp(); await Firebase.initializeApp();
} }
runApp(ChangeNotifierProvider( runApp(ChangeNotifierProvider(create: (_) => SettingProvider(), child: const MyApp()));
create: (_) => SettingProvider(),
child: const MyApp(),
));
} }
class MyApp extends StatelessWidget { class MyApp extends StatelessWidget {
@ -97,46 +39,6 @@ class MyApp extends StatelessWidget {
return MultiProvider( return MultiProvider(
providers: [ providers: [
ChangeNotifierProvider(create: (_) => UserProvider()), ChangeNotifierProvider(create: (_) => UserProvider()),
ChangeNotifierProvider(create: (_) => HospitalsProvider()),
ChangeNotifierProvider(create: (_) => DevicesProvider()),
ChangeNotifierProvider(create: (_) => AssetTransferStatusProvider()),
ChangeNotifierProvider(create: (_) => ServiceRequestsProvider()),
ChangeNotifierProvider(create: (_) => DepartmentsProvider()),
ChangeNotifierProvider(create: (_) => NotificationsProvider()),
ChangeNotifierProvider(create: (_) => PreventiveMaintenanceVisitsProvider()),
ChangeNotifierProvider(create: (_) => RegularVisitsProvider()),
ChangeNotifierProvider(create: (_) => PartsProvider()),
ChangeNotifierProvider(create: (_) => ServiceReportReasonsProvider()),
ChangeNotifierProvider(create: (_) => ServiceReportStatusProvider()),
ChangeNotifierProvider(create: (_) => ServiceReportEquipmentStatusProvider()),
ChangeNotifierProvider(create: (_) => ServiceReportTypesProvider()),
ChangeNotifierProvider(create: (_) => ServiceStatusProvider()),
ChangeNotifierProvider(create: (_) => ServiceReportLastCallsProvider()),
ChangeNotifierProvider(create: (_) => GasCylinderSizesProvider()),
ChangeNotifierProvider(create: (_) => GasCylinderTypesProvider()),
ChangeNotifierProvider(create: (_) => GasStatusProvider()),
ChangeNotifierProvider(create: (_) => GasTypesProvider()),
ChangeNotifierProvider(create: (_) => GasRefillProvider()),
ChangeNotifierProvider(create: (_) => DeviceTransferProvider()),
ChangeNotifierProvider(create: (_) => AssignedToProvider()),
ChangeNotifierProvider(create: (_) => PentryTaskStatusProvider()),
ChangeNotifierProvider(create: (_) => PentryVisitStatusProvider()),
ChangeNotifierProvider(create: (_) => PentryStatusProvider()),
ChangeNotifierProvider(create: (_) => ServiceRequestPriorityProvider()),
ChangeNotifierProvider(create: (_) => ServiceRequestDefectTypesProvider()),
ChangeNotifierProvider(create: (_) => ServiceRequestTypeProvider()),
ChangeNotifierProvider(create: (_) => ServiceRequestedThroughProvider()),
ChangeNotifierProvider(create: (_) => ServiceRequestStatusProvider()),
ChangeNotifierProvider(create: (_) => EngineersProvider()),
ChangeNotifierProvider(create: (_) => ServiceLoanAvailabilityProvider()),
ChangeNotifierProvider(create: (_) => ServiceFirstActionProvider()),
ChangeNotifierProvider(create: (_) => ServiceReportRepairLocationProvider()),
ChangeNotifierProvider(create: (_) => ServiceRequestFaultDescriptionProvider()),
ChangeNotifierProvider(create: (_) => ServiceReportVisitOperatorProvider()),
ChangeNotifierProvider(create: (_) => ServiceReportMaintenanceSituationProvider()),
ChangeNotifierProvider(create: (_) => ServiceReportUsersProvider()),
ChangeNotifierProvider(create: (_) => ServiceReportAssistantsEmployeeProvider()),
ChangeNotifierProvider(create: (_) => VendorProvider()),
], ],
child: GestureDetector( child: GestureDetector(
onTap: () { onTap: () {
@ -148,13 +50,7 @@ class MyApp extends StatelessWidget {
child: MaterialApp( child: MaterialApp(
title: 'ATOMS', title: 'ATOMS',
debugShowCheckedModeBanner: false, debugShowCheckedModeBanner: false,
theme: ThemeData( theme: settingProvider.theme ?? AppThemes.lightTheme,
fontFamily: "Poppins",
//canvasColor: AColors.primaryColor,
scaffoldBackgroundColor: AColors.scaffoldBackgroundColor,
primaryColor: AColors.primaryColor,
indicatorColor: AColors.primaryColor,
colorScheme: const ColorScheme.light(primary: AColors.primaryColor, onPrimary: Colors.white, secondary: AColors.secondaryColor, onSecondary: Colors.white)),
localizationsDelegates: const [ localizationsDelegates: const [
// ... app-specific localization delegate[s] here // ... app-specific localization delegate[s] here
AppLocalization.delegate, AppLocalization.delegate,
@ -162,34 +58,12 @@ class MyApp extends StatelessWidget {
GlobalWidgetsLocalizations.delegate, GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate, GlobalCupertinoLocalizations.delegate,
], ],
supportedLocales: const [ supportedLocales: const [Locale('en'), Locale('ar')],
Locale('en'),
Locale('ar'),
],
locale: Locale(settingProvider.language ?? 'en'), locale: Locale(settingProvider.language ?? 'en'),
initialRoute: SplashScreen.id, initialRoute: SplashPage.routeName,
routes: { routes: {
SplashScreen.id: (_) => const SplashScreen(), SplashPage.routeName: (_) => const SplashPage(),
LandPage.id: (_) => const LandPage(), LoginPage.routeName: (_) => const LoginPage(),
Login.id: (_) => Login(),
Register.id: (_) => Register(),
ProfilePage.id: (_) => ProfilePage(),
ReportIssuesPage.id: (_) => const ReportIssuesPage(),
RequestGasRefill.id: (_) => const RequestGasRefill(),
CreateRequestPage.id: (_) => const CreateRequestPage(),
SingleHospitalPicker.id: (_) => SingleHospitalPicker(),
SingleDevicePicker.id: (_) => SingleDevicePicker(),
SingleDepartmentPicker.id: (_) => SingleDepartmentPicker(),
ServiceRequestsPage.id: (_) => ServiceRequestsPage(),
NotificationsPage.id: (_) => NotificationsPage(),
FutureRequestServiceDetails.id: (_) => FutureRequestServiceDetails(),
PreventiveMaintenanceVisitsPage.id: (_) => PreventiveMaintenanceVisitsPage(),
RegularVisitsPage.id: (_) => RegularVisitsPage(),
TrackGasRefillPage.id: (_) => const TrackGasRefillPage(),
RequestDeviceTransfer.id: (_) => const RequestDeviceTransfer(),
TrackDeviceTransferPage.id: (_) => const TrackDeviceTransferPage(),
SearchSubWorkOrderPage.id: (_) => const SearchSubWorkOrderPage(),
CreateSubWorkOrderPage.id: (_) => const CreateSubWorkOrderPage(),
}, },
), ),
), ),

@ -66,6 +66,8 @@ class User {
this.accessFailedCount, this.accessFailedCount,
}); });
bool get isLiveToken => tokenlife != null && (DateTime.tryParse(tokenlife)?.isAfter(DateTime.now()) ?? false);
Future<Map<String, dynamic>> toLoginJson() async { Future<Map<String, dynamic>> toLoginJson() async {
if (FirebaseNotificationManger.token == null) await FirebaseNotificationManger.getToken(); if (FirebaseNotificationManger.token == null) await FirebaseNotificationManger.getToken();
return { return {

@ -0,0 +1,38 @@
import 'dart:ui';
class AppColor {
AppColor._();
//primary
static const Color primary30 = Color(0xffA2E2F8);
static const Color primary40 = Color(0xff75BDE0);
static const Color primary50 = Color(0xff4A8DB7);
static const Color primary60 = Color(0xff3B7097);
static const Color primary70 = Color(0xff163A51);
//texts
static const Color neutral20 = Color(0xff767676);
static const Color neutral30 = Color(0xffEAF1F4);
static const Color neutral40 = Color(0xffE4E5E6);
static const Color neutral50 = Color(0xff3B3D4A);
static const Color neutral60 = Color(0xff2C2C31);
static const Color neutral70 = Color(0xff111427);
//background
static const Color backgroundLight = Color(0xffF7F9FB);
static const Color backgroundDark = neutral50;
//red
static const Color red40 = Color(0xffFFDBDC);
static const Color red50 = Color(0xffD02127);
static const Color red60 = Color(0xff8C050A);
//green
static const Color green40 = Color(0xffBAFFE1);
static const Color green50 = Color(0xff62BE96);
static const Color green60 = Color(0xff065E38);
//orange
static const Color orange40 = Color(0xffFFEDBC);
static const Color orange50 = Color(0xffCC9B14);
static const Color orange60 = Color(0xff886400);
}

@ -0,0 +1,23 @@
import 'package:flutter/material.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
class AppThemes {
AppThemes._();
static final ThemeData _data = ThemeData(
fontFamily: "Poppins",
primaryColor: AppColor.primary50,
indicatorColor: AppColor.primary50,
);
static ThemeData lightTheme = _data.copyWith(
brightness: Brightness.light,
scaffoldBackgroundColor: AppColor.backgroundLight,
colorScheme: const ColorScheme.light(primary: AppColor.primary50, onPrimary: Colors.white, secondary: Colors.white, onSecondary: AppColor.neutral70),
);
static ThemeData darkTheme = _data.copyWith(
brightness: Brightness.dark,
scaffoldBackgroundColor: AppColor.backgroundDark,
colorScheme: const ColorScheme.light(primary: AppColor.primary50, onPrimary: AppColor.neutral60, secondary: AppColor.neutral60, onSecondary: Colors.white),
);
}

@ -0,0 +1,28 @@
import 'package:flutter/material.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
class LoginPage extends StatelessWidget {
static const String routeName = "/login_page";
const LoginPage({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Image.asset("assets/images/logo.png", height: 60),
Text(
"Login",
style: Theme.of(context).textTheme.displayMedium?.copyWith(color: AppColor.neutral50),
),
Text(
"Enter you credential to login",
style: Theme.of(context).textTheme.titleLarge?.copyWith(color: AppColor.neutral20),
),
],
),
);
}
}

@ -0,0 +1,60 @@
import 'dart:convert';
import 'package:firebase_core/firebase_core.dart';
import 'package:flare_flutter/flare_actor.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/notification/notification_manger.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/models/app_notification.dart';
import 'package:test_sa/new_views/pages/login_page.dart';
class SplashPage extends StatefulWidget {
static const String routeName = '/splash_page';
const SplashPage({Key key}) : super(key: key);
@override
State<SplashPage> createState() => _SplashPageState();
}
class _SplashPageState extends State<SplashPage> {
SettingProvider _settingProvider;
UserProvider _userProvider;
@override
void initState() {
Firebase.initializeApp();
NotificationManger.initialisation((notificationDetails) {
AppNotification notification = AppNotification.fromJson(json.decode(notificationDetails.payload));
if (notification.path == null || notification.path.isEmpty) return;
Navigator.pushNamed(context, notification.path, arguments: notification.requestId);
}, (id, title, body, payload) async {});
super.initState();
}
@override
Widget build(BuildContext context) {
_settingProvider = Provider.of<SettingProvider>(context, listen: false);
_userProvider = Provider.of<UserProvider>(context, listen: false);
return Scaffold(
body: Center(
child: SizedBox(
width: MediaQuery.of(context).size.width / 1.1,
child: FlareActor(
"assets/rives/atoms_splash.flr",
fit: BoxFit.contain,
animation: "splash",
callback: (animation) async {
Navigator.of(context).pushNamed(LoginPage.routeName);
if (_settingProvider.isLoaded && (_settingProvider.user?.isLiveToken ?? false)) {
_userProvider.user = _settingProvider.user;
// TODO [zaid] : push to home page
}
},
),
),
),
);
}
}
Loading…
Cancel
Save