Localization Flutter - ChangeNotifier

Last updated Jul 24, 2020


Supporting multiple languages is the best practice to connect with a large section of audiences

In this post we are going to learn how to change localization content with ChangeNotifier provider in flutter.

We are using the provider plugin to handle the selected language option.

Let’s take an example we will support two languages English and Hindi

Let's Start

Step 1: Create Flutter Application

Step 2: Add Dependencies

Add below dependencies in pubspec.yaml file

 
provider: 3.1.0+1
toggle_switch: "^0.1.4"

toggle_switch plugin in used for create custom toggle button.

Step 3: Create provider class

This class is use to handle the dynamic changes of the content

UpdateDataProvider.dart
import 'package:flutter/material.dart';

class UpdateDataProvider with ChangeNotifier{

  int lang_selected;
  UpdateDataProvider({this.lang_selected});
  set setLang(val)
  {
    lang_selected=val;
    notifyListeners();
  }

  get lang
  {
    return lang_selected;
  }
}

 

Step 4: Update main dart file

 
import 'package:flutter/material.dart';
import 'package:flutter_languagechange/updateData.dart';
import 'package:provider/provider.dart';
import 'package:toggle_switch/toggle_switch.dart';

void main() => runApp(
    ChangeNotifierProvider(builder: (_){
      return UpdateDataProvider(lang_selected: 0);
    },child: MyLangState(),)
);

/*class MyLang extends StatelWidget{
  @override
  State createState() {
    // TODO: implement createState
    return MyLangState();
  }


}*/

class MyLangState extends StatelessWidget
{
  @override
  Widget build(BuildContext context) {
    final dataProvider = Provider.of(context);
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("Language Change"),backgroundColor: Colors.pink,),
        body: Container(
          margin: EdgeInsets.all(16),
          child: Column(
            children: [
              Row(
                mainAxisAlignment: MainAxisAlignment.end,

                children: [
                  ToggleSwitch(
                      minWidth: 60.0,
                      cornerRadius: 20,
                      activeBgColor: Colors.green,
                      activeTextColor: Colors.white,
                      inactiveBgColor: Colors.grey,
                      inactiveTextColor: Colors.white,
                      labels: ['EN', 'Hindi'],

                      onToggle: (index) {
                        dataProvider.setLang=index;
                      }),
                ],
              ),
              SizedBox(height: 20,),
          Row(

            mainAxisSize: MainAxisSize.max,
            children: [
              Container(width:100,child: Text((dataProvider.lang==0)?"Enter Name":"??? ????",style: TextStyle(fontSize: 18))),
            SizedBox(width: 20,),
            Container(
              width: 200,
                height: 40,
                child: TextField(decoration: InputDecoration(border: OutlineInputBorder(borderRadius:BorderRadius.circular(2))),))
            ],
          ),
              SizedBox(height: 20,),
              Row(

                mainAxisSize: MainAxisSize.max,
                children: [
                  Container(width:100,child: Text((dataProvider.lang==0)?"Enter Email":"???? ???? ????",style: TextStyle(fontSize: 18))),
                  SizedBox(width: 20,),
                  Container(
                      width: 200,
                      height: 40,
                      child: TextField(decoration: InputDecoration(border: OutlineInputBorder(borderRadius:BorderRadius.circular(2))),))
                ],
              ),
              SizedBox(height: 20,),
              Row(

                mainAxisSize: MainAxisSize.max,
                children: [
                  Container(width:100,child: Text((dataProvider.lang==0)?"Enter Password":"??? ???? ???? ????",style: TextStyle(fontSize: 18),)),
                  SizedBox(width: 20,),
                  Container(
                      width: 200,
                      height: 40,
                      child: TextField(decoration: InputDecoration(border: OutlineInputBorder(borderRadius:BorderRadius.circular(2))),))
                ],
              ),
              SizedBox(height: 40,),
              FlatButton(
                child: Container(width:80,child: Center(child: Text((dataProvider.lang==0)?"Submit":"????????",style: TextStyle(color: Colors.pink,fontSize: 20),))),
                shape: RoundedRectangleBorder(

                    borderRadius: BorderRadius.circular(18),side: BorderSide(color: Colors.pink)),
              )
            ],
          ),

        ),
      ),
    );
  }

}
 

 

Step 5: Run application

Localization flutter

 

Localization


Article Contributed By :
https://www.rrtutors.com/site_assets/profile/assets/img/avataaars.svg

869 Views

Subscribe For Daily Updates

Flutter Questions
Android Questions