From cc929ba4a5809082769abb6f840dac819933a025 Mon Sep 17 00:00:00 2001 From: her_username Date: Wed, 6 May 2020 17:06:01 +0300 Subject: [PATCH] update Localizations --- lib/config/shared_pref_kay.dart | 3 +- lib/main.dart | 38 +++++++++---- ...orReply.dart => request_doctor_reply.dart} | 0 ...estSchedule.dart => request_schedule.dart} | 0 lib/providers/doctor_reply_provider.dart | 2 +- lib/providers/projects_provider.dart | 45 ++++++++++++++- lib/providers/schedule_provider.dart | 3 +- lib/routes.dart | 2 +- lib/screens/dashboard_screen.dart | 9 ++- lib/screens/settings/settings_screen.dart | 57 ++++++++++++++++++- lib/util/translations_delegate_base.dart | 48 ++++++++++++++++ pubspec.lock | 5 ++ pubspec.yaml | 2 + 13 files changed, 192 insertions(+), 22 deletions(-) rename lib/models/{RequestDoctorReply.dart => request_doctor_reply.dart} (100%) rename lib/models/{RequestSchedule.dart => request_schedule.dart} (100%) create mode 100644 lib/util/translations_delegate_base.dart diff --git a/lib/config/shared_pref_kay.dart b/lib/config/shared_pref_kay.dart index 3fe1f22d..75e39bb1 100644 --- a/lib/config/shared_pref_kay.dart +++ b/lib/config/shared_pref_kay.dart @@ -1,3 +1,4 @@ final TOKEN = 'token'; final PROJECT_ID="projectID"; -final SLECTED_PATIENT_TYPE="slectedPatientType"; \ No newline at end of file +final SLECTED_PATIENT_TYPE="slectedPatientType"; +final APP_Language = "Language"; \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index a205b379..cc9900ce 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,4 +1,6 @@ +import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:hexcolor/hexcolor.dart'; import 'package:provider/provider.dart'; @@ -24,18 +26,30 @@ class MyApp extends StatelessWidget { ChangeNotifierProvider(create: (context) => AuthProvider()), ChangeNotifierProvider(create: (context) => ProjectsProvider()), ], - child: MaterialApp( - showSemanticsDebugger: false, - title: 'Flutter Demo', - theme: ThemeData( - primarySwatch: Colors.blue, - primaryColor: Hexcolor('#B8382C'), - buttonColor: Hexcolor('#B8382C'), - fontFamily: 'WorkSans', - ), - initialRoute: INIT_ROUTE, - routes: routes, - debugShowCheckedModeBanner: false, + child: Consumer( + builder: (context,projectsProvider,child) => MaterialApp( + showSemanticsDebugger: false, + title: 'Flutter Demo', + locale: projectsProvider.appLocal, + localizationsDelegates: [ + TranslationBaseDelegate(), + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + ], + supportedLocales: [ + const Locale('ar', ''), // Arabic + const Locale('en', ''), // English + ], + theme: ThemeData( + primarySwatch: Colors.blue, + primaryColor: Hexcolor('#B8382C'), + buttonColor: Hexcolor('#B8382C'), + fontFamily: 'WorkSans', + ), + initialRoute: INIT_ROUTE, + routes: routes, + debugShowCheckedModeBanner: false, + ) ), ); }); diff --git a/lib/models/RequestDoctorReply.dart b/lib/models/request_doctor_reply.dart similarity index 100% rename from lib/models/RequestDoctorReply.dart rename to lib/models/request_doctor_reply.dart diff --git a/lib/models/RequestSchedule.dart b/lib/models/request_schedule.dart similarity index 100% rename from lib/models/RequestSchedule.dart rename to lib/models/request_schedule.dart diff --git a/lib/providers/doctor_reply_provider.dart b/lib/providers/doctor_reply_provider.dart index 1c977185..b67cba47 100644 --- a/lib/providers/doctor_reply_provider.dart +++ b/lib/providers/doctor_reply_provider.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'package:doctor_app_flutter/config/config.dart'; -import 'package:doctor_app_flutter/models/RequestDoctorReply.dart'; +import 'package:doctor_app_flutter/models/request_doctor_reply.dart'; import 'package:doctor_app_flutter/models/list_gt_my_pationents_question_model.dart'; import 'package:doctor_app_flutter/util/helpers.dart'; import 'package:flutter/cupertino.dart'; diff --git a/lib/providers/projects_provider.dart b/lib/providers/projects_provider.dart index 62debed6..983b6351 100644 --- a/lib/providers/projects_provider.dart +++ b/lib/providers/projects_provider.dart @@ -1,18 +1,59 @@ import 'dart:convert'; import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; +import 'package:doctor_app_flutter/providers/schedule_provider.dart'; +import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart'; +import 'package:provider/provider.dart'; import '../interceptor/http_interceptor.dart'; import 'package:flutter/cupertino.dart'; import 'package:http/http.dart'; import 'package:http_interceptor/http_client_with_interceptor.dart'; -const GET_PROJECTS = - BASE_URL+'Lists.svc/REST/GetProjectForDoctorAPP'; +const GET_PROJECTS = BASE_URL + 'Lists.svc/REST/GetProjectForDoctorAPP'; class ProjectsProvider with ChangeNotifier { + DrAppSharedPreferances sharedPref = DrAppSharedPreferances(); + Locale _appLocale; + String currentLanguage = 'ar'; + bool _isArabic = false; + + Locale get appLocal => _appLocale; + + bool get isArabic => _isArabic; + + ProjectsProvider() { + loadSharedPrefLan(); + } + + void loadSharedPrefLan() async { + currentLanguage = await sharedPref.getString(APP_Language); + _appLocale = Locale(currentLanguage ?? 'ar'); + _isArabic = currentLanguage != null + ? currentLanguage == 'ar' ? true : false + : false; + notifyListeners(); + } + + void changeDirection(String lan) { + if (lan != "en" && currentLanguage != lan) { + _appLocale = Locale("ar"); + _isArabic = true; + currentLanguage = 'ar'; + sharedPref.setString(APP_Language, 'ar'); + } else if (lan != "ar" && currentLanguage != lan) { + _appLocale = Locale("en"); + _isArabic = false; + currentLanguage = 'en'; + sharedPref.setString(APP_Language, 'en'); + } + notifyListeners(); + } + Client client = HttpClientWithInterceptor.build(interceptors: [HttpInterceptor()]); + Future getProjectsList() async { const url = GET_PROJECTS; var info = { diff --git a/lib/providers/schedule_provider.dart b/lib/providers/schedule_provider.dart index 14bc4571..edd880d2 100644 --- a/lib/providers/schedule_provider.dart +++ b/lib/providers/schedule_provider.dart @@ -8,7 +8,7 @@ import 'package:http_interceptor/http_client_with_interceptor.dart'; import '../interceptor/http_interceptor.dart'; import '../models/list_doctor_working_hours_table_model.dart'; -import '../models/RequestSchedule.dart'; +import '../models/request_schedule.dart'; class ScheduleProvider with ChangeNotifier { Client client = @@ -27,6 +27,7 @@ class ScheduleProvider with ChangeNotifier { getDoctorSchedule() async { const url = BASE_URL + 'Doctors.svc/REST/GetDoctorWorkingHoursTable'; try { + if (await Helpers.checkConnection()) { final response = await client.post(url, body: json.encode(requestSchedule.toJson())); final int statusCode = response.statusCode; diff --git a/lib/routes.dart b/lib/routes.dart index e58f3d4d..ae77d217 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -21,7 +21,7 @@ import './screens/profile_screen.dart'; import './screens/settings/settings_screen.dart'; import 'screens/doctor/doctor_reply_screen.dart'; -const String INIT_ROUTE = LOGIN; +const String INIT_ROUTE = HOME; const String HOME = '/'; const String LOGIN = 'login'; const String PROFILE = 'profile'; diff --git a/lib/screens/dashboard_screen.dart b/lib/screens/dashboard_screen.dart index aade7083..b650c611 100644 --- a/lib/screens/dashboard_screen.dart +++ b/lib/screens/dashboard_screen.dart @@ -1,7 +1,9 @@ import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/providers/doctor_reply_provider.dart'; import 'package:doctor_app_flutter/providers/medicine_provider.dart'; +import 'package:doctor_app_flutter/providers/projects_provider.dart'; import 'package:doctor_app_flutter/screens/medicine/medicine_search_screen.dart'; +import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:provider/provider.dart'; import '../routes.dart'; @@ -25,10 +27,13 @@ class DashboardScreen extends StatefulWidget { } class _DashboardScreenState extends State { + + ProjectsProvider projectsProvider; @override Widget build(BuildContext context) { + projectsProvider = Provider.of(context); return AppScaffold( - appBarTitle: 'Home', + appBarTitle: TranslationBase.of(context).dashboardScreenToolbarTitle, current: 0, body: Container( child: Column( @@ -206,7 +211,7 @@ class _DashboardScreenState extends State { backgroundColor: Colors.green[200], ), onTap: () { - Navigator.of(context).pushNamed(PATIENT_SEARCH); + Navigator.of(context).pushNamed(PATIENT_SEARCH); }, ), ), diff --git a/lib/screens/settings/settings_screen.dart b/lib/screens/settings/settings_screen.dart index ccb9b588..122ab4ab 100644 --- a/lib/screens/settings/settings_screen.dart +++ b/lib/screens/settings/settings_screen.dart @@ -1,11 +1,64 @@ +import 'package:doctor_app_flutter/providers/projects_provider.dart'; +import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:flutter/material.dart'; +import 'package:hexcolor/hexcolor.dart'; +import 'package:provider/provider.dart'; class SettingsScreen extends StatelessWidget { + + ProjectsProvider projectsProvider; @override Widget build(BuildContext context) { + projectsProvider = Provider.of(context); return AppScaffold( - appBarTitle: "SETTINS", - body: Container(), + appBarTitle: TranslationBase.of(context).settings.toUpperCase(), + body: ListView( + children: [ + AppText(TranslationBase.of(context).language.toUpperCase(),fontSize: 18,margin: 5,fontWeight: FontWeight.bold,), + Container( + margin: EdgeInsets.symmetric(horizontal: 10,vertical: 10), + height: 50, + decoration: BoxDecoration( + border: Border.all(color: Colors.grey[600],width: 2.0), + borderRadius: BorderRadius.circular(8.0) + ), + child: ClipRRect( + borderRadius: BorderRadius.circular(7.0), + child: Row( + children: [ + Expanded( + child: InkWell( + onTap: () { projectsProvider.changeDirection('en'); }, + child: AnimatedContainer( + duration: Duration(milliseconds: 350), + decoration: BoxDecoration( + color: !projectsProvider.isArabic ? Hexcolor('#58434F') : Colors.transparent, + border: Border(right: BorderSide(color: Colors.grey[200], width: 2.0)) + ), + child: Center(child: AppText(TranslationBase.of(context).lanEnglish, color: !projectsProvider.isArabic ? Colors.white : Colors.grey[500])) + ), + ), + ), + Expanded( + child: InkWell( + onTap: (){projectsProvider.changeDirection('ar');}, + child: AnimatedContainer( + duration: Duration(milliseconds: 350), + decoration: BoxDecoration( + color: projectsProvider.isArabic ? Hexcolor('#58434F') : Colors.transparent, + border: Border(right: BorderSide(color: Colors.grey[200], width: 2.0)) + ), + child: Center(child: AppText(TranslationBase.of(context).lanArabic, color: projectsProvider.isArabic ? Colors.white : Colors.grey[500],)) + ), + ), + ) + ], + ), + ), + ) + ], + ), ); } } \ No newline at end of file diff --git a/lib/util/translations_delegate_base.dart b/lib/util/translations_delegate_base.dart new file mode 100644 index 00000000..9966f051 --- /dev/null +++ b/lib/util/translations_delegate_base.dart @@ -0,0 +1,48 @@ +import 'dart:async'; + +import 'package:flutter/foundation.dart' show SynchronousFuture; +import 'package:flutter/material.dart'; + +class TranslationBase { + TranslationBase(this.locale); + + final Locale locale; + + static TranslationBase of(BuildContext context) { + return Localizations.of(context, TranslationBase); + } + + static Map> _localizedValues = { + 'dashboardScreenToolbarTitle': {'ar': 'الرئيسة', 'en': 'Home'}, + 'settings': {'en': 'Settings', 'ar': 'الاعدادات'}, + 'language': {'en': 'App Language', 'ar': 'لغة التطبيق'}, + 'lanEnglish': {'en': 'English', 'ar': 'English'}, + 'lanArabic': {'en': 'العربية', 'ar': 'العربية'} + }; + + String get dashboardScreenToolbarTitle => _localizedValues['dashboardScreenToolbarTitle'][locale.languageCode]; + + String get settings => _localizedValues['settings'][locale.languageCode]; + + String get language => _localizedValues['language'][locale.languageCode]; + + String get lanEnglish => _localizedValues['lanEnglish'][locale.languageCode]; + + String get lanArabic => _localizedValues['lanArabic'][locale.languageCode]; + +} + +class TranslationBaseDelegate extends LocalizationsDelegate { + const TranslationBaseDelegate(); + + @override + bool isSupported(Locale locale) => ['en', 'ar'].contains(locale.languageCode); + + @override + Future load(Locale locale) { + return SynchronousFuture(TranslationBase(locale)); + } + + @override + bool shouldReload(TranslationBaseDelegate old) => false; +} diff --git a/pubspec.lock b/pubspec.lock index 14612a67..bdaff9da 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -244,6 +244,11 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.1.4" + flutter_localizations: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" flutter_plugin_android_lifecycle: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 20f3f50a..47f6590e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -20,6 +20,8 @@ dependencies: flutter: sdk: flutter hexcolor: ^1.0.1 + flutter_localizations: + sdk: flutter flutter_device_type: ^0.2.0 intl: ^0.16.1 http: ^0.12.0+4