File tree Expand file tree Collapse file tree 5 files changed +76
-3
lines changed
Expand file tree Collapse file tree 5 files changed +76
-3
lines changed Original file line number Diff line number Diff line change @@ -5,6 +5,7 @@ import 'package:provider/provider.dart';
55import 'package:tmdb_flutter/app/cubit/favorite_movies_cubit.dart' ;
66import 'package:tmdb_flutter/app/cubit/home_cubit.dart' ;
77import 'package:tmdb_flutter/app/cubit/movie_details_cubit.dart' ;
8+ import 'package:tmdb_flutter/app/data/local/app_settings_local_data_source.dart' ;
89import 'package:tmdb_flutter/app/injection.dart' ;
910import 'package:tmdb_flutter/app/providers/localization_provider.dart' ;
1011import 'package:tmdb_flutter/app/view/main_page.dart' ;
@@ -18,7 +19,7 @@ class App extends StatelessWidget {
1819 return MultiProvider (
1920 providers: [
2021 ChangeNotifierProvider (
21- create: (_) => LocalizationProvider (),
22+ create: (_) => LocalizationProvider (getIt < AppSettingsLocalDataSource >() ),
2223 ),
2324 BlocProvider (
2425 create: (context) => getIt <HomeCubit >(),
Original file line number Diff line number Diff line change 1+ import 'package:sqflite/sqflite.dart' ;
2+ import 'package:tmdb_flutter/app/data/local/database_helper.dart' ;
3+
4+ class AppSettingsLocalDataSource {
5+ AppSettingsLocalDataSource (this ._databaseHelper);
6+
7+ final DatabaseHelper _databaseHelper;
8+ static const String _localeKey = 'locale' ;
9+
10+ Future <void > saveLocale (String languageCode) async {
11+ final db = await _databaseHelper.database;
12+ await db.insert (
13+ 'app_settings' ,
14+ {
15+ 'key' : _localeKey,
16+ 'value' : languageCode,
17+ },
18+ conflictAlgorithm: ConflictAlgorithm .replace,
19+ );
20+ }
21+
22+ Future <String ?> getLocale () async {
23+ final db = await _databaseHelper.database;
24+ final result = await db.query (
25+ 'app_settings' ,
26+ where: 'key = ?' ,
27+ whereArgs: [_localeKey],
28+ );
29+ if (result.isEmpty) return null ;
30+ return result.first['value' ]! as String ;
31+ }
32+ }
Original file line number Diff line number Diff line change @@ -19,8 +19,9 @@ class DatabaseHelper {
1919 final path = join (await getDatabasesPath (), 'favorite_movies.db' );
2020 return openDatabase (
2121 path,
22- version: 1 ,
22+ version: 2 ,
2323 onCreate: _onCreate,
24+ onUpgrade: _onUpgrade,
2425 );
2526 }
2627
@@ -37,5 +38,25 @@ class DatabaseHelper {
3738 createdAt TEXT NOT NULL
3839 )
3940 ''' );
41+
42+ await db.execute ('''
43+ CREATE TABLE app_settings(
44+ id INTEGER PRIMARY KEY,
45+ key TEXT NOT NULL UNIQUE,
46+ value TEXT NOT NULL
47+ )
48+ ''' );
49+ }
50+
51+ Future <void > _onUpgrade (Database db, int oldVersion, int newVersion) async {
52+ if (oldVersion < 2 ) {
53+ await db.execute ('''
54+ CREATE TABLE app_settings(
55+ id INTEGER PRIMARY KEY,
56+ key TEXT NOT NULL UNIQUE,
57+ value TEXT NOT NULL
58+ )
59+ ''' );
60+ }
4061 }
4162}
Original file line number Diff line number Diff line change @@ -2,6 +2,7 @@ import 'package:get_it/get_it.dart';
22import 'package:injectable/injectable.dart' ;
33import 'package:tmdb_flutter/app/cubit/favorite_movies_cubit.dart' ;
44import 'package:tmdb_flutter/app/cubit/home_cubit.dart' ;
5+ import 'package:tmdb_flutter/app/data/local/app_settings_local_data_source.dart' ;
56import 'package:tmdb_flutter/app/data/local/database_helper.dart' ;
67import 'package:tmdb_flutter/app/data/local/favorite_movies_local_data_source.dart' ;
78import 'package:tmdb_flutter/app/data/remote/movie_api.dart' ;
@@ -18,6 +19,9 @@ Future<void> configureDependencies() async {
1819 ..registerSingleton <MovieAPI >(MovieAPI ())
1920
2021 // Register factories
22+ ..registerFactory <AppSettingsLocalDataSource >(
23+ () => AppSettingsLocalDataSource (getIt <DatabaseHelper >()),
24+ )
2125 ..registerFactory <FavoriteMoviesLocalDataSource >(
2226 () => FavoriteMoviesLocalDataSource (getIt <DatabaseHelper >()),
2327 )
Original file line number Diff line number Diff line change 11import 'package:flutter/material.dart' ;
2+ import 'package:tmdb_flutter/app/data/local/app_settings_local_data_source.dart' ;
23
34class LocalizationProvider extends ChangeNotifier {
5+ LocalizationProvider (this ._appSettingsLocalDataSource) {
6+ _loadLocale ();
7+ }
8+
9+ final AppSettingsLocalDataSource _appSettingsLocalDataSource;
410 Locale _locale = const Locale ('en' );
511
612 Locale get locale => _locale;
713
8- void setLocale (String languageCode) {
14+ Future <void > _loadLocale () async {
15+ final savedLocale = await _appSettingsLocalDataSource.getLocale ();
16+ if (savedLocale != null ) {
17+ _locale = Locale (savedLocale);
18+ notifyListeners ();
19+ }
20+ }
21+
22+ Future <void > setLocale (String languageCode) async {
923 _locale = Locale (languageCode);
24+ await _appSettingsLocalDataSource.saveLocale (languageCode);
1025 notifyListeners ();
1126 }
1227}
You can’t perform that action at this time.
0 commit comments