I have program which now changes language to desired in cache using shared_preferences and when I open again program it will use language which i selected, but i want to make that my program would automatically change when i select different language. So it should somehow update and be in the same page. I am using riverpod for state management.
main.dart
void main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(
const ProviderScope(
child: MyApp(),
),
);
}
class MyApp extends ConsumerStatefulWidget {
const MyApp({
super.key,
});
@override
ConsumerState<MyApp> createState() => _MyAppState();
}
class _MyAppState extends ConsumerState<MyApp> {
final _locale = StateProvider<Locale>((ref) {
return new Locale('lt');
});
@override
void initState() {
super.initState();
this._fetchLocale().then((locale) {
ref.read(_locale.notifier).state = locale;
});
}
Future<Locale> _fetchLocale() async {
var prefs = await SharedPreferences.getInstance();
String languageCode = prefs.getString('selectedLanguage') ?? 'en';
debugPrint(languageCode);
return Locale(languageCode);
}
@override
Widget build(BuildContext context) {
return GestureDetector(
behavior: HitTestBehavior.opaque,
onPanDown: (_) {
FocusManager.instance.primaryFocus?.unfocus();
},
child: MaterialApp.router(
locale: ref.watch(_locale),
localizationsDelegates: [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: S.delegate.supportedLocales,
title: 'Jonizatorius',
theme: ThemeData(
primaryColor: kPrimaryColor,
),
routerConfig: router,
// home: CheckFirstTimeScreen(),
),
);
}
}
selector.dart
DropdownButton(
value: sellected_language,
items: languages.map((e) {
return DropdownMenuItem(
child: Text(e),
value: e,
);
}).toList(),
onChanged: (val) async {
print(val);
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString('selectedLanguage', val.toString());
},
)
I tried looking up internet, but didn't find someone using riverpod,only outdated data i found.