Home Blog Page 67

5 Mistakes Flutter Beginner make or any software developer does

0
5 Mistakes Flutter Beginner make

Hi Guys, Welcome to Proto Coders Point.

Here are some key point that you need to take care off while your are into learning of flutter development or any other programming language.

This Blog post is special for beginner in flutter developer but same point also applies for others.

TOP 5 MISTAKES WILE LEARNING DEVELOPMENT

  1. Being too much a tutorial watching Guy.
  2. Start directly with cross platform development.
  3. Not staying consistent in learning flutter or any other.
  4. Directly Jumping/Implementing trending flutter library.
  5. Not Implementing knowledge in real projects.

1. Being too much a tutorial watching Guy

Don’t be rely to much on tutorials, if you are beginner consider learning flutter or any other development from multiple sources so that you get idea and find your own ways to solve your software development problem.

2. Start directly with cross platform development

Do not jump directly into learning cross platform development with flutter or React Native or any other cross development, always start with learning native like (Android – Java / kotlin or IOS – swift) is a key to learn how individual platform is built.
If you start directly with cross playform then there are more chances that you may get stuck because of individual platform requirement.

3. Not staying consistent in learning flutter or any other.

Upgrading ourselves by being consistent in learning flutter or any other programming stuff.

Being upgraded with latest technology is very important in an IT field.

Being consistent in any field is the way to success.

Many beginner in flutter jump directly into library that are in trending such as statemanagement using GetX, Bloc ,Provider.

If you do this then you many miss many basic feature of flutter dart, so just complete the basic of flutter first, understand how flutter setState works then use those libraries, some library are necessary other feature can be achieved by DIY Solution.

5. Not Implementing knowledge in real projects.

I saw people, they just complete a course in a particular field (flutter course) an start searching for a job as soon as they complete the futter course or any other. some people may get job immediatly but maximum people will fail to clear job interview due to lack of experience. (Check out Flutter Interview Question and answer asked in interview round)
Instead, As soon as you complete the course start making flutter apps or any other android, IOS, Web for your practice or just try to get a freelance projects work for them get knowlegde & experience then apply for a good job.

Check out Pros of flutter in 2021

Solution for Flutter app not working on some devices

0
Solution for flutter app not running on some devices

Hi Guys, Welcome to Proto Coders Point, I got query from one of my subscriber on youtube channel saying his flutter application is not working on some of devices.

Then i tried to solve his problem manually by myself then after some research on stackoverflow, github and all, i got to the solution.

Solution for flutter app not running on some devices

Here are some solution i have tried on my flutter app and that worked for me. (HOPE IT WORKS FOR YOU TO)

  1. Run the app on a Physical Device :
    If you are using a Emulator to test your flutter application then, just check in your physical device.
  2. Sign in config Debug / Release :
    With my experience i observed that beginner in flutter forgot to change sign in config from debug to release, if app is generated in debug mode, that particular app will not work on mobile devices where developers mode is disable.
    CHECK OUT THIS VIDEO BELOW TO GENERATE SIGNED APK

Proper way to generate signed apk from flutter application project

Suggested Atricles

How to get Flutter device info

How to change package name in flutter

0
how to change package name in flutter
how to change package name in flutter

This package library will make it very easy and fast to change flutter android package name.

How to use flutter change package name

So, Let’s begin with how to alter android package name in your flutter application.

1. Adding dev dependencies

Open <flutter project> / pubspec.yaml under this file look for dev_dependencies : section, just below it add change app package name, as shown in below screenshot.

dev_dependencies:
  change_app_package_name: ^0.1.2  
alter package name

2. Updating Flutter pub get

Once you have added any new dependencies in pubspec.yaml file, you always need to update it,

Then, to do that you need to run a commant i.e.

flutter pub get

Then, this commend will download the latest dependencies library files in your flutter project External Libraries, in our case it change_app_package_name.

3. Running a command to alter package name

You just need to run a command that will alter package name of your flutter android module.

See down of your IDE(Android Studio/VsCode) you may see terminal open it and just paste below cmd that will automatically change package name of your project.

flutter pub run change_app_package_name:main com.new.package.name

What this library does:

  • Update AndroidManifest.xml file release,debug & profile.
  • Update build.gradle file.
  • Update Activity’s file in your android module, Both java & Kotlin is supported.
  • Moves MainActivity file to new package directory.
  • Delete old package directory.

Video Tutorial

Recommended post

How to change Flutter App Launcher Icon.

How to install Flutter Plugin in android Studio.

How to Generate Signed apk in flutter android studio

0
How to Generate Signed apk in flutter android studio

Hi Guys,

Welcome to Proto Coders Point, In this article we will learn how to generate signed apk of your flutter code in android studio. There are various ways to create a APK file, But in this article we will check out the simplest & easiest way to do it.

NOTE: THIS ARTICLE WILL BE JUST ON GENERATING SIGNED APK FOR ANDROID PUBLICATION.

How to Build Signed APK?

You have completed your flutter project & is ready to be published to the world through play store.

Then, now you are here to know how to generate signed apk of your flutter project.

Let’s Begin, Here is my Flutter Project built in android Studio(IDE),

Flutter Project Structure – Generate Signed APK.

So let’s see the process of building a signed APK in flutter project.

VIDEO TUTORIAL

Time needed: 5 minutes

How to generate signed apk in flutter android studio

  1. Open Android module in android studio

    In Android Studio tab bar, Navigate towords Tools > Flutter > then Open Android module in android Studio.

    Check out the screenshot for path reference.
    open android module in android studo - flutter

  2. Open Project in new window

    This will open android module version of your flutter project
    Open as new window - android studio

  3. Generate Signed Bundle/APK file

    Now, you will have a new window of your android studio, where your flutter project android verison is been opened.

    Click on Build > Generate Signed Bundle/APK


    build generate signed bundle apk
    After Clicking on it you will see a new pop dialog box, there select apk/bundle.

  4. Creating new key store path

    Click on create new
    creating new keystore
    Here set a key store path there you want to create key store for your flutter project.

  5. Configure signing in gradle

    Open /android/app/build.gradle file
    Just before android block: add below keystoreProperties

    def keystoreProperties = new Properties()
    def keystorePropertiesFile = rootProject.file(‘key.properties’)
    if (keystorePropertiesFile.exists()) {
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
    }
    android {

    }


    then add below code before buildType block:

    signingConfigs {
    release {
    keyAlias keystoreProperties['keyAlias']
    keyPassword keystoreProperties['keyPassword']
    storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
    storePassword keystoreProperties['storePassword'] }
    }
    buildTypes {
    release {
    signingConfig signingConfigs.release
    }
    }

  6. flutter clear

    Please note that after making any changes in build.gradle file, you need to run as comment in your IDE “flutter clear” so the the changes will affect in signing process.

  7. Select Build Varient as release

    After creating keystore & seting Alias & password hit next button.

    final step release app
    If you are creating apk for final app release on play store then select release else if you are giving for testing you can select as bebug.

  8. Full APK Signature

    You can see in above 5th step i have selected V2 (Full APK signature) to create full release version of my android flutter project

  9. Locate to the path

    Now we have created signed apk successfully, To locate to the path where release version of apk is created check out below screenshot.
    locate the path where apk is created

This article is been Refered from StackoverFlow : How to build signed apk from Android Studio for Flutter.

Easy way to set Flutter app icon

How to add Search Filter to Recyclerview – Android Recyclerview Filterable

1

Hi Guys, Welcome to Proto Coders Point, In this android tutorial article we will learn how to add a Search filter to a RecycleView in Toolbar SearchView in Real-time.

Video Tutorial on filter recyclerview android using SearchView

Android Recyclerview Adapter Filterable – Android search filter

Required Dependencies

implementation 'androidx.recyclerview:recyclerview:1.1.0'  //recycleview

implementation 'androidx.cardview:cardview:1.0.0'

Add both of the above dependencies in your app.level build.gradle file under dependencies.


To achieve this feature, First, you need to create a menu item in your android project.

Steps to create a menu item in android

In your android project > res > create a new package(folder) name it as “menu”,

Then, in the menu package create an XML file “search_menu.xml”

how to create a menu item in android

search_menu.xml

Then, Add the following code to the menu.

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_search"
        android:icon="@drawable/ic_search"
        android:title="Search"
        app:actionViewClass="android.widget.SearchView"
        app:showAsAction="ifRoom|collapseActionView" />
</menu>

Here, In the above code, the menu is given an id, an Icon (a search icon, you need to create a vector search image in your drawable folder),
And to make it expandable I am using shows action with collapseActionView attribute, By doing this we can the menu as an icon in our android app bar when this icon is been pressed/clicked it will expand, and hence the user can input text in Android SearchView.


Add some images

You need to add some images under the drawable folder so that you can show images in your recycler view cards.

Eg: In my case, I have just created few vector images in my drawable, you can see in the below screenshot

android vector images

Now, let’s procedure in creating a Recyclerview with Filterable search filter – android filter recycler view using search view in toolbar


Custom layout for RecyclerView

custom_layout_for_recyclerview.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="5dp"
        android:id="@+id/game_id"
        app:cardBackgroundColor="#E8E0E0"
        app:cardCornerRadius="15dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/imageview"
            android:layout_width="80dp"
            android:layout_height="80dp"
            />

        <TextView
            android:id="@+id/tvName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Name"
            android:textSize="30sp"
            android:textColor="@color/black"
            android:layout_marginLeft="25dp"
            android:layout_gravity="center"/>
    </LinearLayout>
    </androidx.cardview.widget.CardView>

</LinearLayout>

In this custom layout for recycler view, we have 2 views i.e. ImageView & a TextView, Where we will display our Data Model Data in a form of recyclerview.


Data Model that hold List of Data’s

ItemDataModel.java

package com.example.recycleviewexample.DataModel;

public class ItemDataModel {

    int image;
    String txtname;

    public ItemDataModel(int image, String txtname) {
        this.image = image;
        this.txtname = txtname;
    }

    public int getImage() {
        return image;
    }

    public String getTxtname() {
        return txtname;
    }
}



Recyclerview Adapter

Then, we need a RecyclerView Adapter that will help us in creating views and show a list of data in recycleview.

Here, In the below lines of codes, We Implement a Filterable interface into our RecyclerView Adapter class and then create our own Filter Method, Where we are applying filtering logic using perform filtering method which will filter return result to publishresult method and then apply the searched Filter data and show it to the user on the RecyclerViewscreen.

There I am using 2 array list,
First One holds a complete ArrayList of data’s and
the second holds the only ArrayList of Data that a user search in the SearchView Search Filter.

RecyclerAdapter.java

package com.example.recycleviewexample.Adapter;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.example.recycleviewexample.DataModel.ItemDataModel;
import com.example.recycleviewexample.R;

import java.util.ArrayList;

public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.MyViewHolder>  implements Filterable {

    private ArrayList<ItemDataModel> dataSet;
    private ArrayList<ItemDataModel> FullList;
    
    class MyViewHolder extends RecyclerView.ViewHolder {
        ImageView imageView;
        TextView tvName;

        MyViewHolder(View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.imageview);
            tvName = itemView.findViewById(R.id.tvName);

        }
    }

    public RecycleAdapter(ArrayList<ItemDataModel> itemList) {
        this.dataSet = itemList;
        FullList = new ArrayList<>(itemList);
    }

    @NonNull
    @Override
    public RecycleAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_layout_for_recyclerview,
                parent, false);
        return new MyViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull RecycleAdapter.MyViewHolder holder, int position) {
        ItemDataModel currentItem = dataSet.get(position);
        holder.imageView.setImageResource(currentItem.getImage());
        holder.tvName.setText(currentItem.getTxtname());

    }

    @Override
    public int getItemCount() {
        return dataSet.size();
    }

    @Override
    public Filter getFilter() {
        return Searched_Filter;
    }

    private Filter Searched_Filter = new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            ArrayList<ItemDataModel> filteredList = new ArrayList<>();
            if (constraint == null || constraint.length() == 0) {
                filteredList.addAll(FullList);
            } else {
                String filterPattern = constraint.toString().toLowerCase().trim();
                for (ItemDataModel item : FullList) {
                    if (item.getTxtname().toLowerCase().contains(filterPattern)) {
                        filteredList.add(item);
                    }
                }
            }
            FilterResults results = new FilterResults();
            results.values = filteredList;
            return results;
        }
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            dataSet.clear();
           dataSet.addAll((ArrayList) results.values);
            notifyDataSetChanged();
        }
    };
}

MainActivity.java

Then, In our MainActivity, we are creating a List of Data and passing the data to RecyclerView Adaptor to display them,

To show a Search View Menu in our App Toolbar we are using @Override onCreateOptionsMenu where we will use MenuInflater to show Search Menu,
Then connect our SearchView with our Menu Search,

using setOnQueryTextListener we are detecting onQueryTextChange where user enter Search Filter String we will pass to the string to our adapter method (adapter.getFilter().filter(newText)) 

Then our adapter method will create new dataSet and display the searched data to the user.

MainActivity.java

package com.example.recycleviewexample;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.inputmethod.EditorInfo;
import android.widget.SearchView;

import com.example.recycleviewexample.Adapter.RecycleAdapter;
import com.example.recycleviewexample.DataModel.ItemDataModel;

import java.lang.reflect.Array;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private RecycleAdapter adapter;
    private ArrayList<ItemDataModel> dataSet;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        fillExampleList();
        setUpRecyclerView();
    }

    private void fillExampleList() {
        dataSet = new ArrayList<>();
        dataSet.add(new ItemDataModel(R.drawable.computer, "Computer 1"));
        dataSet.add(new ItemDataModel(R.drawable._self_improvement, "Meditation 1"));
        dataSet.add(new ItemDataModel(R.drawable.rowing, "Rowing 1"));
        dataSet.add(new ItemDataModel(R.drawable.running, "Running 2"));
        dataSet.add(new ItemDataModel(R.drawable.rowing, "Rowing 2"));
        dataSet.add(new ItemDataModel(R.drawable.computer, "Computer 2"));
        dataSet.add(new ItemDataModel(R.drawable.running, "Running 2"));
        dataSet.add(new ItemDataModel(R.drawable._self_improvement, "Meditation 2"));
        dataSet.add(new ItemDataModel(R.drawable.running, "Running 3"));
    }
    private void setUpRecyclerView() {
        RecyclerView recyclerView = findViewById(R.id.recycle_view);
        recyclerView.setHasFixedSize(true);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
        adapter = new RecycleAdapter(dataSet);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setAdapter(adapter);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.search_menu, menu);
        MenuItem searchItem = menu.findItem(R.id.action_search);
        SearchView searchView = (SearchView) searchItem.getActionView();
        searchView.setImeOptions(EditorInfo.IME_ACTION_DONE);
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {

                Log.d("newText1",query);
                return false;
            }
            @Override
            public boolean onQueryTextChange(String newText) {
                Log.d("newText",newText);

                adapter.getFilter().filter(newText);
                return false;
            }
        });
        return true;
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#e0dfdf"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycle_view"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="81"
        android:scrollbars="vertical" />

</LinearLayout>


Recommended Android articles

Send user-entered recyclerview edit text Array list data to database (PHPMyAdmin)

Recyclerview with card view android example – Android X Tutorial

RecyclerView With GridLayoutManager Show Grid View in androidx

Firebase UI RecyclerView Adapter Android Tutorial with Example

Flutter Registration – api call in flutter to store data to database

0
call api in flutter example register user data in database
call api in flutter example register user data in database

Hi Guys, Welcome to Proto Coders Point, In this tutorial we will create a registration form with validation and send data to – api call in flutter to store data to database the data in json maped format to php script, and the php script will help in storing data in phpmyadmin database.


So Let’s Begin

#Video Tutorial


My Database  (Phpmyadmin)

phpmyadmin

This is my database, Here in my database i have created a table by name “registered”, This table has 5 field i.e. id, name , email, phone, password. where all our registered use data will get stored.


My PHP API SCRIPT

Connecting to my server database

connect.php

<?php

//replace username with your phpmyadmin username
//replace password with your phpmyadmin password
// replacce database name with your database name 
$conn = mysqli_connect("localhost", "username", "password", "databasename");

if($conn)
{
  //echo "Connection Success";
}
else
{
  //echo "Connection Failed";

}

?>

The above connect.php code is used to get connected to your phpmyadmin database

Inserting data to our registered table

registration.php

<?php

    $name = $_POST["name"];
    $email= $_POST["email"];
    $phone= $_POST["phone"];
    $password = $_POST["password"];
    
    require_once 'connect.php';

$findexist="select * from registered where name='$name'";

        $resultsearch=mysqli_query($conn,$findexist);
    if(mysqli_num_rows($resultsearch)>0)
    {
           while($row=mysqli_fetch_array($resultsearch))
          {
              $result["success"] = "3";
              $result["message"] = "user Already exist";

              echo json_encode($result);
              mysqli_close($conn);
          }
  }
else{

    $sql = "INSERT INTO registered (name,email,phone,password) VALUES ('$name','$email','$phone','$password');";

    if ( mysqli_query($conn, $sql) ) {
        $result["success"] = "1";
        $result["message"] = "Registration success";

        echo json_encode($result);
        mysqli_close($conn);

    } else {
        $result["success"] = "0";
        $result["message"] = "error in Registration";
        echo json_encode($result);
        mysqli_close($conn);
    }
}

?>

The Above php api script will help use in inserting user data to our database.

In Above code, there are 2 query

First query will help in checking if same user data is present in database, if user data exist then php code will send response saying ” user exist ”

Second query will insert data in our database table.


So Now our server script is ready to get data from our flutter app, Now let’s Build flutter app that will send data to php script.

Snippet code that sends  data to server using Flutter http library – api call in flutter

Future RegistrationUser()  async{
    // url to registration php script
    var APIURL = "https://protocoderspoint.com/php/registration.php";

    //json maping user entered details
    Map mapeddate ={
      'name':_name.text,
      'email':_email.text,
      'phone':_phone.text,
      'password':_password.text
    };
    //send  data using http post to our php code
    http.Response reponse = await http.post(APIURL,body:mapeddate );
    
    //getting response from php code, here
    var data = jsonDecode(reponse.body);
    print("DATA: ${data}");

  }

Complete Flutter Code to send registration form data to API Script (PHP Script)

import 'dart:convert';

import 'package:flutter/material.dart';
import 'InputDeco_design.dart';
import 'package:http/http.dart' as http;


class FormPage extends StatefulWidget {
  @override
  _FormPageState createState() => _FormPageState();
}

class _FormPageState extends State<FormPage> {

  TextEditingController _name = TextEditingController();
  TextEditingController _email = TextEditingController();
  TextEditingController _phone = TextEditingController();
  TextEditingController _password = TextEditingController();
  TextEditingController _confirmpassword = TextEditingController();

  final GlobalKey<FormState> _formkey = GlobalKey<FormState>();


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: SingleChildScrollView(
          child: Form(
             key: _formkey,
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                CircleAvatar(
                  radius: 70,
                  child: Image.network("https://protocoderspoint.com/wp-content/uploads/2020/10/PROTO-CODERS-POINT-LOGO-water-mark-.png"),
                ),
                SizedBox(
                  height: 15,
                ),
                Padding(
                  padding: const EdgeInsets.only(bottom:15,left: 10,right: 10),
                  child: TextFormField(
                    controller: _name,
                    keyboardType: TextInputType.text,
                    decoration: buildInputDecoration(Icons.person,"Full Name"),
                    validator: (String value){
                      if(value.isEmpty)
                        {
                          return "Please enter name";
                        }
                      return null;
                    },
                    onSaved: (String name){

                    },

                  ),
                ),
                Padding(
                  padding: const EdgeInsets.only(bottom: 15,left: 10,right: 10),
                  child: TextFormField(
                    controller: _email,
                    keyboardType: TextInputType.text,
                    decoration:buildInputDecoration(Icons.email,"Email"),
                    validator: (String value){
                      if(value.isEmpty)
                      {
                        return "Please enter  email";
                      }
                      if(!RegExp("^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9.-]+.[a-z]").hasMatch(value))
                      {
                        return "Please enter valid email";
                      }
                      return null;
                    },
                    onSaved: (String email){

                    },

                  ),
                ),
                Padding(
                  padding: const EdgeInsets.only(bottom: 15,left: 10,right: 10),
                  child: TextFormField(
                    controller: _phone,
                    keyboardType: TextInputType.number,
                    decoration:buildInputDecoration(Icons.phone,"Phone No"),
                    validator: (String value){
                      if(value.isEmpty)
                      {
                        return "Please enter  phone";
                      }
                      if(value.length < 9)
                      {
                        return "Please enter valid phone";
                      }
                      return null;
                    },
                    onSaved: (String phone){

                    },
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.only(bottom: 15,left: 10,right: 10),
                  child: TextFormField(
                    controller: _password,
                    keyboardType: TextInputType.text,
                    decoration:buildInputDecoration(Icons.lock,"Password"),
                    validator: (String value){
                      if(value.isEmpty)
                      {
                        return "Please enter password";
                      }

                      return null;
                    },

                  ),
                ),
                Padding(
                  padding: const EdgeInsets.only(bottom: 15,left: 10,right: 10),
                  child: TextFormField(
                    controller: _confirmpassword,
                    obscureText: true,
                    keyboardType: TextInputType.text,
                    decoration:buildInputDecoration(Icons.lock,"Confirm Password"),
                    validator: (String value){
                      if(value.isEmpty)
                      {
                        return "Please enter re-password";
                      }
                      if(_password.text != _confirmpassword.text)
                      {
                        return "Password Do not match";
                      }
                      return null;
                    },


                  ),
                ),

                SizedBox(
                  width: 200,
                  height: 50,
                  child: RaisedButton(
                    color: Colors.redAccent,
                    onPressed: (){

                      if(_formkey.currentState.validate())
                        {
                           RegistrationUser();
                          print("Successful");
                        }else
                          {

                             print("Unsuccessfull");
                          }
                      
                    },
                    shape: RoundedRectangleBorder(
                        borderRadius: BorderRadius.circular(50.0),
                        side: BorderSide(color: Colors.blue,width: 2)
                    ),
                    textColor:Colors.white,child: Text("Submit"),

                  ),
                )
              ],
            ),
          ),
        ),
      ),
    );
  }

  Future RegistrationUser()  async{
    // url to registration php script
    var APIURL = "https://protocoderspoint.com/php/registration.php";

    //json maping user entered details
    Map mapeddate ={
      'name':_name.text,
      'email':_email.text,
      'phone':_phone.text,
      'password':_password.text
    };
    //send  data using http post to our php code
    http.Response reponse = await http.post(APIURL,body:mapeddate );

    //getting response from php code, here
    var data = jsonDecode(reponse.body);
    print("DATA: ${data}");

  }
}