Hey! We all know that passing datas between one Activity to another Activity is bit messy and tedious to handle in Android. Do you think that it can be processed in an easy way with less coding? Here it is, Dart and Henson
Dart and Henson is an Android dependency Injection library to deal with Intent data passing without using cumbersome putParcelable, putInt, putString, putBundle key mechanism. It is a library created by a team of Groupon developers who presented article at DroidCon Italy 2017.
The library setup is very simple and easy to use by just adding following Gradle dependencies:
compile 'com.f2prateek.dart:dart:2.0.2'
annotationProcessor 'com.f2prateek.dart:dart-processor:2.0.2'
compile 'com.f2prateek.dart:henson:2.0.2'
annotationProcessor 'com.f2prateek.dart:henson-processor:2.0.2'
That’s it you’re done to use Injection mechanism for Intent data sharing in your project.
Hey! We all know that passing datas between one Activity to another Activity is bit messy and tedious to handle in Android. Do you think that it can be processed in an easy way with less coding? Here it is, Dart and Henson
Dart and Henson is an Android dependency Injection library to deal with Intent data passing without using cumbersome putParcelable, putInt, putString, putBundle key mechanism. It is a library created by a team of Groupon developers who presented article at DroidCon Italy 2017.
The library setup is very simple and easy to use by just adding following Gradle dependencies:
compile 'com.f2prateek.dart:dart:2.0.2'
annotationProcessor 'com.f2prateek.dart:dart-processor:2.0.2'
compile 'com.f2prateek.dart:henson:2.0.2'
annotationProcessor 'com.f2prateek.dart:henson-processor:2.0.2'
That’s it you’re done to use Injection mechanism for Intent data sharing in your project.
To simplify the usage, we can deal with two activities named:
Extra “injection” library for Android which uses annotation processing to generate code that does direct field assignment of your extras in the Target Activity. In our case, we’re gonna Inject Dart in DetailsActivity.java
Let’s start injecting variables using Dart
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.widget.Button;
import android.widget.TextView;
import com.f2prateek.dart.Dart;
import com.f2prateek.dart.InjectExtra;
import butterknife.BindView;
import butterknife.ButterKnife;
@BindView(R.id.txt_mobile)
TextView txtMobile;
@BindView(R.id.txt_name)
TextView txtName;
@BindView(R.id.txt_email)
TextView txtEmail;
@BindView(R.id.btn_click_me)
Button btnClickMe;
@InjectExtra User user;
@Nullable
@InjectExtra String fromScreen;
@InjectExtra boolean isSuccess = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_details);
ButterKnife.bind(this);
Dart.inject(this);
}
STEP 1: Make sure that you inject Dart in the Target Activity (DetailsActivity.java)
Dart.inject(this);
STEP 2: Inject all the extras using @InjectExtra Annotations. In our case, we have Injected user (Parcelable), fromScreen (String) and isSuccess (boolean).
It is used to define whether a @InjectExtra is optional or not. In our case, we have made ‘fromScreen’ as optional by adding @Nullable annotations.
Declaring default values is even easy as similar to initialising global variables. In our case we have assigned default value as false for ‘isSuccess’ boolean.
Now we are done with the Dart TargetActivity setup.
Henson is used to navigate between activities. In general, it should be used in the SourceActivity to start an Activity by passing Intent extras
Let’s call Henson method in MainActivity.java to start a DetailsActivity.java
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Button;
import android.widget.EditText;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class MainActivity extends AppCompatActivity {
@BindView(R.id.edt_mobile)
EditText edtMobile;
@BindView(R.id.edt_name)
EditText edtName;
@BindView(R.id.edt_email)
EditText edtEmail;
@BindView(R.id.btn_login)
Button btnLogin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
}
@OnClick(R.id.btn_login)
public void onLoginClicked(){
Intent intent = Henson.with(MainActivity.this)
.gotoDetailsActivity()
.build();
}
}
Yeah! Now Henson setup is done. Click Build — Rebuild Project
Chill! I know compiler throws Compilation error in .build() method as follows
The reason behind this because we haven’t passed any @InjectExtra annotation methods which are created in DetailsActivity.java
@InjectExtra User user;
@Nullable
@InjectExtra String fromScreen;
@InjectExtra boolean isSuccess = false;
Cool. Let’s add all the parameters in the Intent as
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Button;
import android.widget.EditText;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class MainActivity extends AppCompatActivity {
@BindView(R.id.edt_mobile)
EditText edtMobile;
@BindView(R.id.edt_name)
EditText edtName;
@BindView(R.id.edt_email)
EditText edtEmail;
@BindView(R.id.btn_login)
Button btnLogin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
}
@OnClick(R.id.btn_login)
public void onLoginClicked(){
User user = new User();
user.setEmail(edtEmail.getText().toString());
user.setMobile(edtMobile.getText().toString());
user.setName(edtName.getText().toString());
Intent intent = Henson.with(MainActivity.this)
.gotoDetailsActivity()
.isSuccess(true)
.user(user)
.build();
startActivity(intent);
}
}
Note: We haven’t passed fromScreen method since it is optional (By default it will be ‘null’).
What is .gotoDetailsActivity()?
I know everyone would be wondering from where this .gotoDetailsActivity() comes into the picture? Cool we have a answer for the same.
goto (Henson generated appending string to start an Activity) + DetailsActivity (Our own TargetActivity).
Yeah! We’re almost done. Let’s play with the intents in the TargetActivity (DetailsActivity.java)
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.f2prateek.dart.Dart;
import com.f2prateek.dart.InjectExtra;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class DetailsActivity extends AppCompatActivity {
@BindView(R.id.txt_mobile)
TextView txtMobile;
@BindView(R.id.txt_name)
TextView txtName;
@BindView(R.id.txt_email)
TextView txtEmail;
@BindView(R.id.btn_click_me)
Button btnClickMe;
@InjectExtra User user;
@Nullable
@InjectExtra String fromScreen;
@InjectExtra boolean isSuccess = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_details);
ButterKnife.bind(this);
Dart.inject(this);
updateFields();
}
private void updateFields() {
txtMobile.setText(user.getMobile());
txtEmail.setText(user.getEmail());
txtName.setText(user.getName());
}
@OnClick(R.id.btn_click_me)
public void onClickMeClicked(){
if(isSuccess){
Toast.makeText(DetailsActivity.this, "Dart and Henson is really working!", Toast.LENGTH_SHORT).show();
}
}
}
A product development and growth expert, helping founders and startups build and grow their products at lightning speed with a track record of success. Apart from work, I love to network & Travel.
How to Manage App Permissions in Flutter: A Developer's Guide
In our increasingly digital world, app permissions have become a hot topic. With global app downloads hitting a staggering 257 billion in 2023, users are more aware than ever about their digital privacy. As Flutter Develo...
How to Import SVG Files in React Native: A Comprehensive Guide
SVG in React Native has become an important element for creating scalable and crisp graphics across different device sizes. This guide will walk you through the process of using SVG files in your React Native projects, sharin...
Push Notifications in React Native: A Beginner’s Guide
Push notifications are more than just messages sent to a user's device. They're a direct channel of communication between your app and your users, capable of driving engagement, retention, and even revenue when used effective...