Google search engine
Home Blog Page 76

Implement GraphQL with Flutter

0

GraphQL is a query language, which is used for API. It allows the client to exact data they need from the server(API), With the help of a query, we exact the specific data or component from the server. GraphQL is designed to make APIs pliable and suitable to use so that they are easier to develop. GraphQL helps you to build complex apps.


Table Of Contents:

What is GraphQL

Add Dependency

Usage of GraphQL

Conclusion

GitHub Link


What is GraphQL:-

GraphQL has many edges compared to REST. Rather than using a fixed data structure approach, GraphQL requests specific data the client requires. REST retaliation is notorious for holding too much data or not enough. GraphQL deciphers this by fetching exact data in a single request. GraphQL also has an introversion feature that allows developers to check types & the schema to secure they’re querying for data the right way.


Add Dependency:-

In your project goes to the pubspec. yaml and add the dependencies under the dependencies: add the latest version of graphql_flutter.

dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.2
graphql_flutter: ^5.1.0

Usage of GraphQL:-

GraphQL is very useful for any flutter project who have complex APIs. It is an easy way to fetch the exact data from any Server(API).

GraphQLClient:

For fetching the data first we need to create a client for connecting to the server(API). To connect to the server we use GraphQLClient. GraphQLClient has two required properties cache and link.

final HttpLink httpLink =
HttpLink("https://countries.trevorblades.com/");
final ValueNotifier<GraphQLClient> client = ValueNotifier<GraphQLClient>(
GraphQLClient(
link: httpLink as Link,
cache: OptimisticCache(
dataIdFromObject: typenameDataIdFromObject,
),
),

In this code, as you can see, we create a final Httplink in which we pass the server link(API). And we create a client by using the ValueNotifier in which we pass GraphQLClient. ValueNotifier extends ChangeNotifier implements ValueListenable.

GraphQLClient({
required Link link,
required GraphQLCache cache,
DefaultPolicies? defaultPolicies,
bool alwaysRebroadcast = false,
})

In GraphQLClient we have two properties, link, and client. The Link over which GraphQL documents will be resolved into a Response. In our example, we use GitHub Public API. in which we pass the HTTP link. And we use Cache to store the initial data.


GraphQLProvider:

In GraphQLProvider we pass two parameters, child and client. We already created a client by which we can fetch the server’s data and also store the initial data in the cache. We pass the client as a client and also navigate the next page on which we want to show the data in the child parameter.

GraphQLProvider(
child: HomePage(),
client: client,
);

This is the Syntax of GraphQLProvider:

(new) GraphQLProvider GraphQLProvider({
Key? key,
ValueNotifier ? client,
Widget? child, })

Query:

To fetch the exact data we use query. creating a query is very simple and easy we use GitHub Public API.

In the above picture, we saw a query in which we get the data of all continents’ names and codes.

final String query = r"""
query GetContinent($code : String!){
continent(code:$code){
name
countries{
name
}
}
}
""";

In this, we create a string of queries and use r “”” “”” for writing any query and write a query by which we fetch the data.

After that, we pass the query in Scaffold’s body as a widget.

(new) Query Query({
Key? key,
required QueryOptions options,
required Widget Function(QueryResult ,
{
Future > Function(FetchMoreOptions)? fetchMore, Future ?> Function()? refetch
})
builder, })

In this, we use two parameters in the query, Options, and builder. In QueryOptions we use documents to pass the query which we already defined as a string and we also pass variables in which we pass the code of the country.

options: QueryOptions(
document: query,
variables: <String, dynamic>{"code": "AS"}),

we can also pass many things in options like duration, Context, Object, Operation-name, DocumentNode, FetchPolicy, ErrorPolicy, etc.

(new) QueryOptions QueryOptions
({
required DocumentNode document,
String? operationName,
Map variables = const {},
FetchPolicy? fetchPolicy,
ErrorPolicy? errorPolicy,
CacheRereadPolicy? cacheRereadPolicy,
Object? optimisticResult,
Duration? pollInterval,
Context? context,
Object? Function(Map )? parserFn,
})

we use FetchMoreOption inside Query Builder to perform pagination. Function permits you to run an entirely new GraphQL operation and amalgamate the new results with the original results. You can re-use features of the Original query i.e. the Query or some of the Variables.

builder: (
QueryResult result, {
VoidCallback refetch,
}) {
if (result.loading) {
return Center(child: CircularProgressIndicator());
}
if (result.data == null) {
return Text("No Data Found !");
}
return ListView.builder(
itemBuilder: (BuildContext context, int index) {
return ListTile(
title:
Text(result.data['continent']['countries'][index]['name']),
);
},
itemCount: result.data['continent']['countries'].length,
);
},
),

In the builder, we use QueryResult to fetch the final result and create a voidcallback by using fetch. And we add a condition when the result is loading so its shows a CircularProgressIndicator(), and if there is no data in the list so it shows NO DATA FOUND. And return ListView.Builder(), in item builder we pass context and index and return the ListTile for printing the country name as a list and in the itemCount, we pass the length of a list.


Mutation:

The Mutation is used to update and insert data like for post/delete/put requests. The syntax for mutations is fairly similar to that of a query. The only difference is that the first quarrel of the builder function is a mutation function. Just call it to activate the mutations.

Mutation(
options: MutationOptions(
document: gql(addStar),
update: (GraphQLDataProxy cache, QueryResult result) {
return cache;
},
onCompleted: (dynamic resultData) {
print(resultData);
},
),
builder: (
RunMutation runMutation,
QueryResult result,
) {
return FloatingActionButton(
onPressed: () => runMutation({
'starrableId': <A_STARTABLE_REPOSITORY_ID>,
}),
tooltip: 'Star',
child: Icon(Icons.star),
);
},
);

Conclusion:-

In this article, we almost covered the very topic of GraphQL. We started by introducing, what GraphQL is and how it works. Then, we introduced graphql_flutter with examples of how to make queries, and mutations, from a Flutter app.

❤ ❤ Thanks for reading this article ❤❤

If I got something wrong? Let me know in the comments. I would love to improve.

Clap 👏 If this article helps you.


GitHub Link:

Find the source code of the Implementing GraphQL in Flutter

GitHub – flutter-devs/graphql_demo
You can’t perform that action at this time. You signed in with another tab or window. You signed out in another tab or…github.com


❤ ❤ Thanks for reading this article ❤❤

If I got something wrong? Let me know in the comments. I would love to improve.

Clap 👏 If this article helps you.


From Our Parent Company Aeologic

Aeologic Technologies is a leading AI-driven digital transformation company in India, helping businesses unlock growth with AI automation, IoT solutions, and custom web & mobile app development. We also specialize in AIDC solutions and technical manpower augmentation, offering end-to-end support from strategy and design to deployment and optimization.

Trusted across industries like manufacturing, healthcare, logistics, BFSI, and smart cities, Aeologic combines innovation with deep industry expertise to deliver future-ready solutions.

Feel free to connect with us:
And read more articles from FlutterDevs.com.

FlutterDevs team of Flutter developers to build high-quality and functionally-rich apps. Hire a flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! You can connect with us on Facebook, GitHub, Twitter, and LinkedIn for any flutter-related queries.

We welcome feedback and hope that you share what you’re working on using #FlutterDevs. We truly enjoy seeing how you use Flutter to build beautiful, interactive web experiences.

Related: GraphQL With HTTP In Flutter

Related: GraphQL and Flutter

Need expert help building your Flutter app? Talk to FlutterExperts for architecture, development, and consulting support.

Complete Guide to QA in Agile Flutter 2026

0

What exactly is the role of QA in agile?:

What can a tester do to help initiate a cooperative working relationship with the development team? Here are 6 things software testers should do when working with an agile scrum team:

  • > Attend sprint planning sessions: A member of QA should always attend planning sessions. Attending ensures QA is synchronized with the development team from the start and allows QA to identify possible problem areas and risks early on. Just like developers estimate the effort it will take for them to write code, QA should estimate the effort required for testing the code during the planning session. Without QA present, testing efforts and a realistic time allocation can be overlooked and not included in the sprint’s overall estimates.
  • > Attend daily stand-ups: A member of the QA team should always attend the daily stand-ups. Doing so promotes a collaborative team environment, making QA feel involved and a part of the team. Additionally, by QA being present, they can stay up to date with how the sprint is going, which allows them to plan their workload. If a tester has a blocker, they can bring this up during the stand-up. QA’s presence in stand-ups also gives them a chance to update on known issues, allowing developers to keep up to speed on testing progress and better plan their workload.
  • > Don’t save all the testing for the end; test throughout the sprint: To deliver high-quality software in a short amount of time, you need to work efficiently. QA’s test workload takes place throughout the sprint, which allows for issues to be found earlier instead of only at the sprint’s conclusion. If you find all the bugs at the end of the sprint, it’s too late. Integrating testing and development allows the two teams to work together and resolve issues faster, leading to higher quality results.
  • > Meet with developers for short, hand-off demonstrations: It’s hard to argue against the value of in-person communication. Assuming QA and development work in the same location, schedule a quick face-to-face hand-off demonstration for each feature. Doing this allows QA to see precisely how the new feature works and is also a good time for them to ask the developer any questions. These hand-offs can also bring to light issues the developer may not have considered yet. These interactions also help shorten the feedback loop between development and QA
  • > Attend sprint retrospectives: Don’t miss out on the opportunity to discuss successes and failures that can improve future sprints by failing to attend the final team meeting. No matter how good a team is, there will always be room for improvement. Sprint retrospectives are the opportunity to define weaknesses and determine solutions for them. QA needs to be involved in these discussions to have any concerns addressed before the next sprint begins. For example, maybe a lot of the work was delivered to QA late in the sprint, leading to a rushed testing effort. QA might raise this concern to avoid it happening again the next time.
  • > Document test cases: Just because you’re an agile team doesn’t mean you should skip documentation. Documentation is essential, especially for QA. Keep your documentation lean because changes are bound to happen. Even minimal documentation can add a lot of value to you and your team. For example, if testers shift from project to project, having some test documentation will help get the new team member up to speed faster.

In summary, agile embraces lean, flexible processes, tools, and documentation. There QA can focus on tasks that result in one thing: quickly delivering a high-quality product.

Flutter allows you to build an app for iOS and Android on Agile Methodologies:

Flutter is an open-source, cross-platform SDK that allows developers to share code across platforms. It uses Dart as a programming language and compiles your code into native machine code. You can thus use the same code base and build an app for iOS and Android platforms. Therefore, it ensures speedy app development allowing you to make more profits.

  • > Increases team productivity: Flutter saves a lot of development time and effort for the teams. It allows them to share a single code base and launch applications on multiple platforms. This ensures the higher productivity of members involved in the project.
  • > Offers Great Performance: Flutter is flooded with widgets, widgets that serve various purposes. The Dart compiler comprises its widgets, and hence it doesn’t need a JavaScript bridge to address the gap. Hence, an app developed using Flutter shows better performance than any other.
  • > It is highly compatible: When you are building an app using Flutter, you can rest assured about its performance. The built-in widgets work in the same manner across all the platforms without disturbing the user experience. The uniformity in performance across various platforms is something that developers embrace about Flutter the most.

Agile Sprint Backlog and Planning:

The entire team working together Agile for Flutter app development checks the pending backlogs and plans out a sprint to cover them up.

Many entrepreneurs have this big misconception that Agile for Flutter mobile app development is only for big giants. However, in our opinion, small to medium-sized businesses can leverage the methodology and make a fortune out of it. Small and medium enterprises do not have clear roles and responsibilities defined. They always juggle the tasks, which may impact their productivity and efficiency.

Adopting Agile methodology in Flutter app development will simplify the entire process and make things clear for them. This will allow the small companies to accomplish a complex task that would have found difficult, with much ease & comfort.

Scenario:

A description of each specific scenario of the narrative with the following structure:

  • > Given: the initial context at the beginning of the scenario, in one or more clauses;
  • > when: the event that triggers the scenario;
  • > then: the expected outcome, in one or more clauses.

What I love here is the test verbosity. The text is clear and every situation can be documented and tested. That’s what I’m searching to expose to our non-tech. This would let them know what developers do each day and show non-tech the amount of work they have to do for “simple” things the same thing tested by the testers.


From Our Parent Company Aeologic

Aeologic Technologies is a leading AI-driven digital transformation company in India, helping businesses unlock growth with AI automation, IoT solutions, and custom web & mobile app development. We also specialize in AIDC solutions and technical manpower augmentation, offering end-to-end support from strategy and design to deployment and optimization.

Trusted across industries like manufacturing, healthcare, logistics, BFSI, and smart cities, Aeologic combines innovation with deep industry expertise to deliver future-ready solutions.

Feel free to connect with us:
And read more articles from FlutterDevs.com.

FlutterDevs team of Flutter developers to build high-quality and functionally-rich apps. Hire a flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! You can connect with us on Facebook, GitHub, Twitter, and LinkedIn for any flutter-related queries.

We welcome feedback and hope that you share what you’re working on using #FlutterDevs. We truly enjoy seeing how you use Flutter to build beautiful, interactive web experiences.

Related: How to Implement Role-Based Access Control (RBAC) in Flutter Apps

Related: SMS Using Twilio In Flutter

Need expert help building your Flutter app? Talk to FlutterExperts for architecture, development, and consulting support.

Form Validation with Stream BloC and RxDart

0

In this article, we will explore the Form Validation with Stream BloC and RxDart. We will also implement a demo program and learn how to implement it in your flutter applications.

If you’re looking for the best Flutter app development company for your mobile application then feel free to contact us at — support@flutterdevs.com.


Introduction:

First of all, I would like to introduce you to Validation with Stream BloC and RxDart.

RxDart:

RxDart is an implementation of the popular reactive API for asynchronous programming, leveraging the native Dart Streams API. Changelog.

FlutterBloC:

Flutter Widgets that make it easy to implement the BLoC (Business Logic Component) design pattern. Built to be used with the bloc state management package. Widgets that make it easy to integrate blocs and cubits into Flutter. Built to work with package: bloc.

Implementation:

Let’s see how to Implement the form validation with stream bloc.

First Add these two dependencies in pubsec.yaml file

dependencies:
flutter_bloc: ^8.0.1
rxdart: ^0.27.3

Alright, now we will work on our stream part for this. First of all, we will create a new file and call it login_bloc_state.dart

part of 'login_bloc_cubit.dart';

abstract class LoginBloc {}

class LoginInitial extends LoginBloc {}

Secondly, we will create the login_bloc_cubit.dart file

Behavior Subject:
The BehaviorSubject is, by default, a broadcast (aka hot) controller, to fulfill the Rx Subject contract. This means the Subject’s stream can listen to multiple times.

Rx.combineLatest:
Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. Observables need to be an array. If the result selector is omitted, a list with the elements will be yielded.

import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:rxdart/rxdart.dart';
part 'login_bloc_state.dart';
class LoginScreenCubit extends Cubit<LoginBloc> {
LoginScreenCubit() : super(LoginInitial());
final _userNameController = BehaviorSubject<String>();
final _passwordController = BehaviorSubject<String>();
Stream<String> get userNameStream => _userNameController.stream;
Stream<String> get passwordStream => _passwordController.stream;

void clearStreams() {
updateUserName('');
updatePassword('');
}

void updateUserName(String userName) {
if (userName.length < 4) {
_userNameController.sink.addError("Please enter at least 4 characters of your name here");
} else {
_userNameController.sink.add(userName);
}
}

void updatePassword(String password) {
if (password.length < 4) {
_passwordController.sink.addError("Please enter at least 4 character of the password here");
} else {
_passwordController.sink.add(password);
}
}

Stream<bool> get validateForm => Rx.combineLatest2(
userNameStream,
passwordStream,
(a, b,) => true,
);
}

Note: You can learn more about behavior subjects over here

Setup Bloc Providers file:-

import 'package:flutter_bloc/flutter_bloc.dart';

import 'bloc/login_bloc_cubit.dart';

List<BlocProvider> blocProviders = [
BlocProvider<LoginScreenCubit>(create: (context) => LoginScreenCubit()),
];

Setup main.dart file:-

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

import 'bloc_providers.dart';
import 'login_screen.dart';

void main() {
runApp(const MyApp());
}

class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);

@override
Widget build(BuildContext context) {
return MultiBlocProvider(
providers: blocProviders,
child: const MaterialApp(
debugShowCheckedModeBanner: false,
home: LoginScreen(),
),
);
}
}

Finally, we will design Login Screen UI:

Wrap TextFormField with StreamBuilder widget and provide stream to it.Invoke validator function from on Changed callback of TextFormField.

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

import 'bloc/login_bloc_cubit.dart';
import 'custom_widgets/custom_plain_button.dart';
import 'custom_widgets/custom_text_field.dart';

class LoginScreen extends StatefulWidget {
const LoginScreen({Key? key}) : super(key: key);

@override
State<LoginScreen> createState() => _LoginScreenState();
}

class _LoginScreenState extends State<LoginScreen> {
LoginScreenCubit? _loginScreenCubit;

@override
void initState() {
WidgetsBinding.instance?.addPostFrameCallback((_) {
_loginScreenCubit?.clearStreams();
});
super.initState();
}

@override
Widget build(BuildContext context) {
_loginScreenCubit = BlocProvider.of<LoginScreenCubit>(
context,
listen: false,
);
return Scaffold(
appBar: AppBar(
title: const Text('Validation with BloC'),
),
backgroundColor: Colors.white,
body: SafeArea(
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 20,
vertical: 10,
),
child: Column(
children: [
Expanded(child: _buildMiddleView()),
_buildBottomButtonView()
],
),
),
),
);
}

_buildMiddleView() {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text(
'Login In',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 30),
),
const SizedBox(
height: 10,
),
StreamBuilder(
stream: _loginScreenCubit?.userNameStream,
builder: (context, snapshot) {
return CustomTextField(
onChange: (text) {
_loginScreenCubit?.updateUserName(text);
},
labelText: 'Username',
textInputType: TextInputType.emailAddress,
);
}),
const SizedBox(
height: 10,
),
StreamBuilder(
stream: _loginScreenCubit?.passwordStream,
builder: (context, snapshot) {
return CustomTextField(
onChange: (text) {
_loginScreenCubit?.updatePassword(text);
},
labelText: 'Password',
textInputType: TextInputType.text,
isObscureText: true,
);
}),
const SizedBox(
height: 10,
),
],
);
}

_buildBottomButtonView() {
return StreamBuilder(
stream: _loginScreenCubit?.validateForm,
builder: (context, snapshot) {
return CustomPlainButton(
isEnabled: snapshot.hasData,
btnColor: snapshot.hasData ? Colors.red : Colors.grey,
height: 67,
onTap: snapshot.hasData ? _loginBtnTap : null,
label: 'Log in',
lblColor: Colors.white,
);
},
);
}

_loginBtnTap() {
print('Login Button Pressed');
}
}

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Output
  • > Wrap TextFormField with StreamBuilder widget and provide stream to it:
    StreamBuilder has 2 required parameters, stream and builder callback. StreamBuilder will listen to the provided stream and the builder function will facilitate us to build the UI accordingly.
StreamBuilder(
stream: _loginScreenCubit?.passwordStream,
builder: (context, snapshot) {
return CustomTextField(
onChange: (text) {
_loginScreenCubit?.updatePassword(text);
},
labelText: 'Password',
textInputType: TextInputType.text,
isObscureText: true,
);
}),
  • > Invoke validator function from on Changed callback of TextFormField:

We’ll utilize the on Changed callback of TextFormField and invoke the validator method.

onChange: (text) {
_loginScreenCubit?.updatePassword(text);
},

Then, we will Making button enabled or Disable

We will use RxDart’s combined latest function to check if both streams have data, as a boolean, and again send it as a stream, to be able to utilize it to make the button enabled.

The new stream will emit true when we have passed all the validations by checking if both the streams have data and none has an error with it.

Stream<bool> get validateForm => Rx.combineLatest2(
userNameStream,
passwordStream,
(a, b,) => true,
);

Connecting the resultant stream to the button

Wrap the button with stream builder and provide the combined stream in the stream property.

StreamBuilder(
stream: _loginScreenCubit?.validateForm,
builder: (context, snapshot) {
return CustomPlainButton(
isEnabled: snapshot.hasData,
btnColor: snapshot.hasData ? Colors.red : Colors.grey,
height: 67,
onTap: snapshot.hasData ? _loginBtnTap : null,
label: 'Log in',
lblColor: Colors.white,
);
},
);

For making the button be enabled according to the validations, we will use the stream snapshots has data property to check if it has data and connects it to the buttons onTap property so that if it doesn’t have data we will set it onTap property to null, making button disabled.

onTap: snapshot.hasData ? _loginBtnTap : null,

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Output

❤ ❤ Thanks for reading this article ❤❤

If I got something wrong? Let me know in the comments. I would love to improve.

Clap 👏 If this article helps you.


GitHub Link:

find the source code of the validation_with_stream_bloc:

GitHub – flutter-devs/validation_with_stream_bloc
A new Flutter project. This project is a starting point for a Flutter application. A few resources to get you started…github.com


From Our Parent Company Aeologic

Aeologic Technologies is a leading AI-driven digital transformation company in India, helping businesses unlock growth with AI automation, IoT solutions, and custom web & mobile app development. We also specialize in AIDC solutions and technical manpower augmentation, offering end-to-end support from strategy and design to deployment and optimization.

Trusted across industries like manufacturing, healthcare, logistics, BFSI, and smart cities, Aeologic combines innovation with deep industry expertise to deliver future-ready solutions.

Feel free to connect with us:
And read more articles from FlutterDevs.com.

FlutterDevs team of Flutter developers to build high-quality and functionally-rich apps. Hire a flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! You can connect with us on Facebook, GitHub, Twitter, and LinkedIn for any flutter-related queries.

We welcome feedback and hope that you share what you’re working on using #FlutterDevs. We truly enjoy seeing how you use Flutter to build beautiful, interactive web experiences.

Need expert help building your Flutter app? Talk to FlutterExperts for architecture, development, and consulting support.

Exploration Of Unit Testing In Flutter

0

In this article, we will explore the Unit Testing in Flutter. How unit testing works, how we create the class and how the outcomes appear in your project.

If you’re looking for the best Flutter app development company for your mobile application then feel free to contact us at — support@flutterdevs.com.


Table Of Contents::

Introduction

Steps

Run tests using IntelliJ or VSCode

Run tests in a terminal

Why is unit testing important?

Unit test example

Conclusion


So let’s start with it.


An introduction to Unit Testing:

Unit testing is a software testing technique by which individual units of source code sets of at least one computer program module along with related control information, use procedures, and operating methodology — are tested to decide if they are fit for use. Unit tests are commonly automated tests composed and run by software developers to guarantee that an application meets its plan and acts as intended.

In software testing, unit testing is a strategy for testing more isolated portions (or units) of code. Unit tests are generally directed with test automation scripts on the smallest testable portion of the software.

The unit is usually a function of the code. It is also a part of “white box testing,” which is a type of testing that can be written by someone who knows the architecture of the program.

This methodology can test code functions, strategies, or methods whether using procedural programming or object-oriented programming. If it depends on or converses with some other frameworks, it can’t be qualified as unit testing. The object is to guarantee that every unit of code functions true to form. This takes into consideration quality confirmation to write test cases just for bits of the software that influence the way of behaving of the framework.

Unit tests are handy for verifying the behavior of a single function, method, or class. The test package provides the core framework for writing unit tests, and the flutter_test package provides additional utilities for testing widgets.

Steps:

This recipe demonstrates the core features provided by the test package using the following steps:

  • Add the test or flutter_test dependency.
  • Create a test file.
  • Create a class to test.
  • Write a test for our class.
  • Combine multiple tests in a group.
  • Run the tests.

> Add the test dependency:

The test package provides the core functionality for writing tests in Dart. This is the best approach when writing packages consumed by web, server, and Flutter apps.

dev_dependencies:
test: <latest_version>

> Create a test file:

In this example, create two files: counter.dart and counter_test.dart.

The counter.dart file contains a class that you want to test and resides in the lib folder. The counter_test.dart file contains the tests themselves and lives inside the test folder.

In general, test files should reside inside a test folder located at the root of your Flutter application or package. Test files should always end with _test.dart, this is the convention used by the test runner when searching for tests.

When you’re finished, the folder structure should look like this:

counter_app/
lib/
counter.dart
test/
counter_test.dart

> Create a class to test:

Next, you need a “unit” to test. Remember: “unit” is another name for a function, method, or class. For this example, create a Counter class inside the lib/counter.dart file. It is responsible for incrementing and decrementing a value starting at 0.class Counter {
int value = 0; void increment() => value++; void decrement() => value–;

> Write a test for our class:

Inside the counter_test.dart file, and write the first unit test. Tests are defined using the top-level test function and you can check if the results are correct by using the top-level expect function. Both of these functions come from the test package.

// Import the test package and Counter class
import 'package:test/test.dart';
import 'package:counter_app/counter.dart';void main() {
test('Counter value should be incremented', () {
final counter = Counter(); counter.increment(); expect(counter.value, 1);
});
}

> Combine multiple tests in a group:

If you have several tests that are related to one another, combine them using the group function provided by the test package.

import 'package:test/test.dart';
import 'package:counter_app/counter.dart';void main() {
group('Counter', () {
test('value should start at 0', () {
expect(Counter().value, 0);
}); test('value should be incremented', () {
final counter = Counter(); counter.increment(); expect(counter.value, 1);
}); test('value should be decremented', () {
final counter = Counter(); counter.decrement(); expect(counter.value, -1);
});
});
}

> Run the tests:

Now that you have a Counter class with tests in place, you can run the tests.

Run tests using IntelliJ or VSCode:

The Flutter plugins for IntelliJ and VSCode support running tests. This is often the best option while writing tests because it provides the fastest feedback loop as well as the ability to set breakpoints.

  • > IntelliJ:-
  • Open the counter_test.dart file
  • Select the Run menu
  • Click the Run 'tests in counter_test.dart' option
Alternatively, use the appropriate keyboard shortcut for your platform.
  • > VSCode:-
  • Open the counter_test.dart file
  • Select the Run menu
  • Click the Start Debugging option
  • Alternatively, use the appropriate keyboard shortcut for your platform.

Run tests in a terminal:

You can also use a terminal to run the tests by executing the following command from the root of the project:

flutter test test/counter_test.dart

For more options regarding unit tests, you can execute this command:

flutter test --help

Why is unit testing important?:

Unit testing is very important as it allows developers to detect bugs earlier in the lifecycle- thus improving the quality of delivered software. Here is a list of great benefits:

  • > This methodology can reduce the overall impact on testing costs as bugs are caught in the early phases of development.
  • > It allows better refactoring of code as it is more reliable code.
  • > This practice also conditions developers to rethink how they code. Meaning, coding modular components that can be mocked if they do have dependencies.
  • > Tests can be automated, which is extremely beneficial when maintaining code at scale.
  • > Overall, it improves the quality of the code.

In DevOps, the process of continuous integration automatically runs tests against the code every time someone commits new code to the repository. If one test fails, the entire team can receive an email (or alert on Slack) of the break. Then the responsible person can rectify the issue.

Unit test example:

Here is a simple example of how to write unit tests.

Let’s say we’re trying to implement the sum function. It takes two numbers a and b as its arguments and returns the number of the total amount.

def sum(a, b):
return a + b

The simplest way to write a unit test is by using the assert function. This function can be found in most programming languages.

# It should pass
assert sum(1, 2) == 3
# It also should pass
assert sum(1, 2) != 0

Conclusion:

If you are performing automated tests consistently, you can see how beneficial unit testing is for catching bugs early on. Without this technique, a defect could make its way farther into the pipeline. Even worse, into production.

This means time and resources are allocated to finding, analyzing, and fixing defects when a simple automated test could have caught them. If your firm seeks a test automation tool to automatically catch bugs and alert developers via Slack.


❤ ❤ Thanks for reading this article ❤❤

If I got something wrong? Let me know in the comments. I would love to improve.

Clap 👏 If this article helps you.


From Our Parent Company Aeologic

Aeologic Technologies is a leading AI-driven digital transformation company in India, helping businesses unlock growth with AI automation, IoT solutions, and custom web & mobile app development. We also specialize in AIDC solutions and technical manpower augmentation, offering end-to-end support from strategy and design to deployment and optimization.

Trusted across industries like manufacturing, healthcare, logistics, BFSI, and smart cities, Aeologic combines innovation with deep industry expertise to deliver future-ready solutions.

Feel free to connect with us:
And read more articles from FlutterDevs.com.

FlutterDevs team of Flutter developers to build high-quality and functionally-rich apps. Hire a flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! You can connect with us on Facebook, GitHub, Twitter, and LinkedIn for any flutter-related queries.

We welcome feedback and hope that you share what you’re working on using #FlutterDevs. We truly enjoy seeing how you use Flutter to build beautiful, interactive web experiences.

Need expert help building your Flutter app? Talk to FlutterExperts for architecture, development, and consulting support.

CupertinoPageTransition In Flutter

0

Whenever you will code for building anything in Flutter, it will be inside a widget. The central design is to build the application out of widgets. It portrays how your application view ought to look with its current design and state. Right when you made any adjustment in the code, the widget alters its depiction by working out the differentiation between the past and current widget to choose the immaterial changes for conveying in the UI of the application.

In Flutter, to build any application, we start with widgets. The construction block of flutter applications. Widgets portray what their view should look like given their current setup and state. It consolidates a text widget, line widget, segment widget, container widget, and some more.

Navigating between routes is very quite default. Flutter benevolently gives you the MaterialPageRoute and CupertinoPageRoute classes and, while their transition animations don’t look awful, there’s surely something more we can do.

In this article, we will explore the CupertinoPageTransition In Flutter. We will implement the Cupertino page transition demo program and learn how to use the same in your flutter applications.

CupertinoPageTransition class – cupertino library – Dart API
API docs for the CupertinoPageTransition class from the Cupertino Library, for the Dart programming language.api.flutter.dev

If you’re looking for the best Flutter app development company for your mobile application then feel free to contact us at — support@flutterdevs.com.


Table Of Contents::

Cupertino Page Transition

Constructor

Properties

Code Implement

Code File

Conclusion

GitHub Link



CupertinoPageTransition:

It is a widget that provides an iOS-style page transition animation. The page slides in from the right and exits backward. It likewise moves to one side in a parallax motion when another page enters to cover it.

Demo Module :

This demo shows how the transition works in an app. It shows how the page transitions from right to left just like your transition to another page on a device running on iOS/Android.

Constructor:

To utilize CupertinoPageTransition, you need to call the constructor underneath:

CupertinoPageTransition({
Key key,
@required Animation<double> primaryRouteAnimation,
@required Animation<double> secondaryRouteAnimation,
@required Widget child,
@required bool linearTransition,
});

In Above Constructor all fields marked with @required must not be empty.

Properties:

There are some properties of CupertinoPageTransition:

  • > Widget Child: The widget below this widget in the tree. Child Property will have only one child.
  • > Animation<double> primaryRouteAnimation: primaryRouteAnimation is a linear route animation from 0.0 to 1.0 when this screen is being pushed.
  • > Animation<double> secondaryRouteAnimation: secondaryRouteAnimation is a linear route animation from 0.0 to 1.0 when another screen is being pushed on top of this one.
  • > bool linearTransition: linear transition is whether to perform the transitions linearly. Used to precisely trackback gesture drags.

How to implement code in dart file:

You need to implement it in your code respectively:

Create a new dart file called main.dart inside the lib folder.

First, we will make a screen that will show the underlying page and a picture in the center that has an on-tap function which will set off the transition. Then we will make a subsequent page and set it up with another picture, then we want to set up a route style which will be the Cupertino page transition widget.

Center(
child: InkWell(
onTap: () => Navigator.of(context).push(PageTwo.route()),
child: Image.asset('assets/pencil.png'),
),
),

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Initial Screen

With the help of this route property, we will transact from the initial page to the final page with a transition style straight from iOS.

static Route<dynamic> route() {
return CupertinoPageRoute(
builder: (BuildContext context) {
return const PageTwo();
},
);
}

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Final Output

Code File:

import 'package:flutter/cupertino.dart' show CupertinoPageRoute;
import 'package:flutter/material.dart';

void main() {
runApp(
const MaterialApp(
debugShowCheckedModeBanner: false,
home: Splash(),
),
);
}

class HomePage extends StatelessWidget {
const HomePage({Key? key}) : super(key: key);

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
automaticallyImplyLeading: false,
title: const Text('Flutter CupertinoPageTransition Demo'),
backgroundColor: Colors.teal,
),
body: Center(
child: InkWell(
onTap: () => Navigator.of(context).push(PageTwo.route()),
child: Image.asset('assets/pencil.png'),
),
),
);
}
}

class PageTwo extends StatelessWidget {
const PageTwo({Key? key}) : super(key: key);

static Route<dynamic> route() {
return CupertinoPageRoute(
builder: (BuildContext context) {
return const PageTwo();
},
);
}

@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: Center(
child: Image.asset('assets/logo.png'),
),
);
}
}

Conclusion:

In the article, I have explained the essential construction of the CupertinoPageTransition widget in a flutter; you can alter this code as indicated according to your choice. This was a little prologue to the CupertinoPageTransition widget on User Interaction from my side, and its functioning utilizing Flutter.

I hope this blog will provide you with sufficient information on Trying up the CupertinoPageTransition widget in your flutter projects. We showed you what the CupertinoPageTransition widget is?, its constructor, and the properties of the CupertinoPageTransition widget. We made a demo program for working CupertinoPageTransition widget, and it shows transitions directly from the iOS/Android in your flutter application. So please try it.

❤ ❤ Thanks for reading this article ❤❤

If I got something wrong? Let me know in the comments. I would love to improve.

Clap 👏 If this article helps you.


GitHub Link:

find the source code of thecupertino_page_transition:

GitHub – flutter-devs/cupertino_page_transition
A new Flutter project. This project is a starting point for a Flutter application. A few resources to get you started…github.com


From Our Parent Company Aeologic

Aeologic Technologies is a leading AI-driven digital transformation company in India, helping businesses unlock growth with AI automation, IoT solutions, and custom web & mobile app development. We also specialize in AIDC solutions and technical manpower augmentation, offering end-to-end support from strategy and design to deployment and optimization.

Trusted across industries like manufacturing, healthcare, logistics, BFSI, and smart cities, Aeologic combines innovation with deep industry expertise to deliver future-ready solutions.

Feel free to connect with us:
And read more articles from FlutterDevs.com.

FlutterDevs team of Flutter developers to build high-quality and functionally-rich apps. Hire a flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! You can connect with us on Facebook, GitHub, Twitter, and LinkedIn for any flutter-related queries.

We welcome feedback and hope that you share what you’re working on using #FlutterDevs. We truly enjoy seeing how you use Flutter to build beautiful, interactive web experiences.

Related: Show/Hide Password Using Riverpod In Flutter

Need expert help building your Flutter app? Talk to FlutterExperts for architecture, development, and consulting support.


Flutter App for Web

0

Hello everyone! This is my first project on Flutter Web. Today we learn about how to create web applications using Flutter. For more understanding, we create a demo on Flutter Web.

Flutter’s web help develops applications that are wealthy in intuitive content. Web helps for Flutter gives a browser-based conveyance model for Flutter mobile applications. Flutter renders web applications similarly as it will deliver your android/iOS applications. It likewise converts your project over completely to native code (HTML, CSS, JS) when you wish to deploy.

If you’re looking for the best Flutter app development company for your mobile application then feel free to contact us at — support@flutterdevs.com.


Table Of Contents:

Requirements For Flutter Web App

Important’s of Flutter Web

How is the performance for Flutter Web and how it is different

Set Up For Flutter Web App

Implementation

Conclusion

GitHub Link


Requirements For Flutter Web App:

We have some important requirements for creating any Flutter Web App.

  • > Flutter SDK. See the Flutter SDK installation instructions.
  • > Chrome; debugging a web app requires the Chrome browser.
  • > Optional: An IDE that supports Flutter. You can install Android Studio, IntelliJ IDEA, or Visual Studio Code and install the Flutter and Dart plugins to enable language support and tools for refactoring, running, debugging, and reloading your web app within an editor. See setting up an editor for more details.

Important’s of Flutter Web:

Some important points of flutter web:

  • > Users can open your website in any screen size, you need to make it responsive.
  • > Many packages that bear the web, but always examine the supported platforms before coding.
  • > If you are from a web development background and if you perceive to make any changes in native code, you are highly welcome to do so. You can replace the native code the same way we can change it for Android and iOS.
  • When you want to deploy your web app, you can simply run:
flutter build web

How is the performance for Flutter Web and how it is different:

  • > FlutterWeb works in appealing smooth contrast to native as it creates only a single page and hence generates less cargo on the browser.
  • > With the help of Flutter, you can create some great animations very easily compared to native, hence making your web app more beautiful, and it is very useful for complex web applications.
  • > Flutter Web directly bear installing your website as a unfasten application (Web-App) for which you require to individually code if in native.
  • > Flutter, as it is a cross-platform framework, you can add some platform-specific code without any configuration changes by which we can apply many new things to our web application.

Set Up For Flutter Web App:

  • > First, we have to create a flutter project and choose the web platforms in android studio. We choose android, Ios, and Web. if we want to create an app for Linux, Windows, or Mac OS so we have to select these options
  • > Then, we have to check the flutter channel, for Flutter Channel we use channel beta if your flutter channel is different then you have to change the channel to beta by using this command.
$ flutter channel beta
  • > After changing the channel we have to upgrade the version of flutter by using this command.
$ flutter upgrade
  • > When we change the channel and also upgrade the flutter we have to config or enable the web to run the flutter web app. After running this command we have to restart the Android Studio and run the project on chrome or any other browser.
$ flutter config --enable-web
  • > After running this command we have to restart the android studio. when its opens we find a new folder whose name is the web. In the web folder we find many files like index.html, manifest.json, and also find a folder with the name of icons.

We can start our coding part to create a better Flutter Web Application.


Implementation:

Now we create a Flutter Web Application. Give the name of the application is flutter_web_demo. In main. dart we pass the MyApp() class in the runApp() and create a stateless class with the name of MyApp() and return MaterialApp in the context and pass the new class whose name is HomePage.

return const MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Flutter Demo',
home: HomePage(),
);

In the HomePage class we return the Scaffold and use the properties of the scaffold, in the app-bar we pass the title of the page.

appBar: AppBar(
backgroundColor: Colors.black,
centerTitle: true,
title: const Text('Flutter Web App',
style: TextStyle(
color: Colors.white
),),
),

And create a button in the center of the page. Add a text at the button which is “click me” and by using the GestureDetector() we can tap on the button and go to the new page, which is the second page of the application. On tap, we navigate the screen to a new page by using Navigator. push().

GestureDetector(
onTap: (){
Navigator.push(context,
MaterialPageRoute(builder: (context)=> const NewScreen()));
},
child: Container(
height: 50,
width: 150,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),
color: Colors.black,
),
child: const Center(child: Text('CLICK ME!!!',
style: TextStyle(
color: Colors.white
),)),
),
),

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Output

In the new screen whose class name is NewScreen(), we return Scaffold and pass text in the body of it.

return const Scaffold(
body: Center(child: Text('Welcome to Flutter Web App...',
style: TextStyle(
fontStyle: FontStyle.italic,
fontSize: 30,
fontWeight: FontWeight.w500,
color: Colors.teal
),)),
);

When we run the application, we ought to get the screen’s output like the underneath screen capture.

Output

Conclusion:

I hope you like my article. Flutter web is extremely useful for web developers and also for app developers. Because of this, we don’t need to learn HTML, CSS, or JS. There are many browsers like Chrome, Safari, Edge and Firefox, Chrome (on Windows, macOS, and Linux), and Edge (on Windows).


❤ ❤ Thanks for reading this article ❤❤

If I got something wrong? Let me know in the comments. I would love to improve.

Clap 👏 If this article helps you.


GitHub Link:

Find the source code of the Implementing Flutter App for Web

GitHub – flutter-devs/flutter_web_demo
You can’t perform that action at this time. You signed in with another tab or window. You signed out in another tab or…github.com


From Our Parent Company Aeologic

Aeologic Technologies is a leading AI-driven digital transformation company in India, helping businesses unlock growth with AI automation, IoT solutions, and custom web & mobile app development. We also specialize in AIDC solutions and technical manpower augmentation, offering end-to-end support from strategy and design to deployment and optimization.

Trusted across industries like manufacturing, healthcare, logistics, BFSI, and smart cities, Aeologic combines innovation with deep industry expertise to deliver future-ready solutions.

Feel free to connect with us:
And read more articles from FlutterDevs.com.

FlutterDevs team of Flutter developers to build high-quality and functionally-rich apps. Hire a flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! You can connect with us on Facebook, GitHub, Twitter, and LinkedIn for any flutter-related queries.

We welcome feedback and hope that you share what you’re working on using #FlutterDevs. We truly enjoy seeing how you use Flutter to build beautiful, interactive web experiences.

Related: SMS Using Twilio In Flutter

Related: Using SharedPreferences in Flutter

Need expert help building your Flutter app? Talk to FlutterExperts for architecture, development, and consulting support.


How to Validation with Bloc in Flutter 2026

0

Hello Everyone! In this article, we learn about Bloc in Flutter. we cover many topics of the bloc like Bloc Widgets, Bloc Builder, Bloc Selector, Bloc Provider, Multi Bloc Provider, Bloc Listener, Multi Bloc Listener, etc…

If you’re looking for the best Flutter app development company for your mobile application then feel free to contact us at — support@flutterdevs.com.


Table Of Contents::

What is Bloc?

Bloc Widgets

Implementation

Conclusion

GitHub Link


What Is Bloc?

Flutter Bloc is one of the state management in a flutter. We can use it to handle all the states which we want to perform in our flutter applications.

Bloc is the best and simple way to do state management. We can easily add any type of change to the Flutter application. You can easily learn the concept, no matter what’s your level. You can add this dependency to your project and use it.

Bloc is a design pattern created by Google to help separate business logic from the award layer and authorize a developer to exploit code more efficiently.

A state management library called Bloc was created and maintained by Felix Angelo. It assists developers utensil the Bloc design pattern in their Flutter application. It means that a developer must recognize the state of an app at some time. There should be something exhibited on the screen for every interplay with the app to let users know what is incident.


Bloc Widgets

There are many Wiglets in Flutter Bloc:

> Bloc Builder:

Bloc-builder is a Flutter widget that needs a bloc and a builder function. Bloc-builder holds building the widget in response to new states. Bloc-builder is very alike to Stream-builder but has a more simple API to decrease the quantity of boilerplate code needed. The builder function will potentially be called many times and should be an unalloyed function that returns a widget in reaction to the state.

BlocBuilder<BlocA, BlocAState>(
builder: (context, state) {
// return widget here based on BlocA's state
}
)

> Bloc Selector:

Bloc-selector is a Flutter widget that is comparable to BlocBuilder but permits developers to filter modernize by selecting a new worth based on the contemporary bloc state. dispensable builds are averted if the selected value does not switch. The pick value must be fixed for Bloc Selector to correctly control whether the builder should be called again.

BlocSelector<BlocA, BlocAState, SelectedState>(
selector: (state) {
// return selected state based on the provided state.
},
builder: (context, state) {
// return widget here based on the selected state.
},
)

> Bloc Provider:

Bloc Provider is a Flutter widget that provides a bloc to its children via BlocProvider.of<T>(context). It is worn as a dependency injection (DI) widget to bestow a lone instance of a bloc to beau-coup widgets within a sub-tree.

BlocProvider(
create: (BuildContext context) => BlocA(),
child: ChildA(),
);

> MultiBlocProvider:

Multi Bloc Provider is a Flutter widget that amalgamates multiple Bloc Provider widgets into one. MultiBlocProvider better the readability and removes the need to nest multipleBlocProviders.

BlocProvider<BlocA>(
create: (BuildContext context) => BlocA(),
child: BlocProvider<BlocB>(
create: (BuildContext context) => BlocB(),
child: BlocProvider<BlocC>(
create: (BuildContext context) => BlocC(),
child: ChildA(),
)
)
)

> Bloc Listener:

Bloc Listener is a Flutter widget that clasps a BlocWidgetListener and a voluntary bloc and invokes the listeners in response to state swap in the bloc. It should be worn for functionality that needs to happen once per state change such as navigation, showing a Snack-bar, showing a Dialog, etc…

BlocListener<BlocA, BlocAState>(
listener: (context, state) {
// do stuff here based on BlocA's state
},
child: Container(),
)

> Multi Bloc Listener:

Multi Bloc Listener is a Flutter widget that amalgamates multiple BlocListener widgets into one. MultiBlocListener better the readability and eliminates the requirement to nest multipleBlocListeners. By utilizing multipleBlocListener we can go from:

BlocListener<BlocA, BlocAState>(
listener: (context, state) {},
child: BlocListener<BlocB, BlocBState>(
listener: (context, state) {},
child: BlocListener<BlocC, BlocCState>(
listener: (context, state) {},
child: ChildA(),
),
),
)

Implementation:

First, we have to add dependency in pubspec.ymal file for getting all the properties of the bloc by which we can easily use it for state management.

dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.2
rxdart: ^0.27.3
flutter_bloc: ^8.0.1

We use two dependencies flutter_bloc and rxdart. RxDart extends the capabilities of Dart Streams and Stream-controllers. Flutter_bloc uses Bloc Provider to provide a Counter-cubit to a Counter-Page and react to state changes with BlocBuilder.

First, we have to create a cubit class(login_bloc_cubit.dart) for the app which is an abstract class Cubit extends Bloc-base. We create the class by the name LoginScreenCubit(). In this class first, we have to define the argument constructor. After that, we define all the controllers which we used.

LoginScreenCubit() : super(LoginInitial());

//define controllers
final _userNameController = BehaviorSubject<String>();
final _passwordController = BehaviorSubject<String>();
final _phonenoController = BehaviorSubject<String>();

and we get the data with the help of Stream and defined controllers.

Stream<String> get userNameStream => _userNameController.stream;
Stream<String> get passwordStream => _passwordController.stream;
Stream<String> get phonenoStream => _phonenoController.stream;

we also create a method for clearing the data

void dispose() {
updateUserName('');
updatePassword('');
updatePhoneNumber('');
}

and add the methods for validation which is very important and in which we check the value of the user.

//validation of UserName
void updateUserName(String userName) {
if (userName.length < 3) {
_userNameController.sink.addError("Please enter at least 3 words");
} else {
_userNameController.sink.add(userName);
}
}

//validation of Password
void updatePassword(String password) {
if (password.length < 4) {
_passwordController.sink.addError("Please enter more then 4 words");
} else {
_passwordController.sink.add(password);
}
}

//validation of Phone Number
void updatePhoneNumber(String phoneNo) {
if (phoneNo.length == 10) {
_phonenoController.sink.add(phoneNo);
} else {
_phonenoController.sink.addError("Please enter valid Phone Number");

}
}

After that, we create a provider class(bloc_provider.dart) in which we pass all the providers which are used in the Flutter application.

List<BlocProvider> blocProviders = [
BlocProvider<LoginPageCubit>(create: (context) => LoginPageCubit()),
];

And wrap MaterialApp() with MultiBlocProvider(), which we already define in the bloc_provider.dart in main. dart class. And pass the bloc Provider in providers.

MultiBlocProvider(
providers: blocProviders,
child: const MaterialApp(
debugShowCheckedModeBanner: false,
home: LoginScreen(),
),
);

And create a class with the name of login_bloc_state.dart. In which we define the LoginBloc{} class and LoginInitial which extends to LoginBloc{}.

abstract class LoginBloc {}
class LoginInitial extends LoginBloc {}

In the LoginScreen(login_screen.dart) First we define the LoginScreenCubit. And then add initState(){} in which we add WidgetsBinding.instance and the use dispose method.

LoginScreenCubit? _loginScreenCubit;
@override
void initState() {
WidgetsBinding.instance?.addPostFrameCallback((_) {
_loginScreenCubit?.dispose();
});
super.initState();
}

In _loginScreenCubit, we add BlocProvider.

_loginScreenCubit = BlocProvider.of<LoginScreenCubit>(
context,
listen: false,
);

When we run the application, we ought to get the screen’s output like the underneath screen capture.

In the UI part, we create UI and use StreamBuilder for the text Field to update the data.

StreamBuilder(
stream: _loginScreenCubit?.passwordStream,
builder: (context, snapshot) {
return TextField(
onChanged: (text) {
_loginScreenCubit?.updatePassword(text);
},
decoration: const InputDecoration(
labelText: 'Password',
),
keyboardType: TextInputType.text);
}),

When we run the application, we ought to get the screen’s output like the underneath screen capture.

For Bottombutton we also use StreamBuilder. In this we pass _loginScreenCubit in the stream and cheBloc Widgetsck, whether the data is validated or not? after this we return GestureDetector() and apply a condition that if the data is updated then this screen goes to the next screen otherwise it’s showing an error. When the snapshot. data is true then the color of the button will be teal otherwise it’s grey.

_bottomButton() {
return StreamBuilder(
stream: _loginScreenCubit?.validateForm,
builder: (context, snapshot) {
return GestureDetector(
onTap: () {
if (snapshot.hasData) {
Navigator.push(
context, MaterialPageRoute(builder: (context) => Home1()));
}
},
child: Container(
decoration: BoxDecoration(
color: snapshot.hasData ? Colors.teal : Colors.grey,
borderRadius: BorderRadius.circular(30)),
height: 70,
width: MediaQuery.of(context).size.width,
child: const Center(
child: Text(
'Login',
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 27),
),
),
),
);
},
);
}

When we run the application, we ought to get the screen’s output like the underneath screen capture.


Conclusion:

In this article, we have been through What is Bloc in Flutter along with how to implement it in a Flutter. By using we can perform many state management orations.


❤ ❤ Thanks for reading this article ❤❤

If I got something wrong? Let me know in the comments. I would love to improve.

Clap 👏 If this article helps you.


GitHub Link:

Find the source code of the Validation Using Bloc In Flutter:

GitHub – flutter-devs/validation_using_bloc
You can’t perform that action at this time. You signed in with another tab or window. You signed out in another tab or…github.com


From Our Parent Company Aeologic

Aeologic Technologies is a leading AI-driven digital transformation company in India, helping businesses unlock growth with AI automation, IoT solutions, and custom web & mobile app development. We also specialize in AIDC solutions and technical manpower augmentation, offering end-to-end support from strategy and design to deployment and optimization.

Trusted across industries like manufacturing, healthcare, logistics, BFSI, and smart cities, Aeologic combines innovation with deep industry expertise to deliver future-ready solutions.

Feel free to connect with us:
And read more articles from FlutterDevs.com.

FlutterDevs team of Flutter developers to build high-quality and functionally-rich apps. Hire a flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! You can connect with us on Facebook, GitHub, Twitter, and LinkedIn for any flutter-related queries.

We welcome feedback and hope that you share what you’re working on using #FlutterDevs. We truly enjoy seeing how you use Flutter to build beautiful, interactive web experiences.

Need expert help building your Flutter app? Talk to FlutterExperts for architecture, development, and consulting support.


Security Testing In Flutter

0

Hi everyone!, today we start learning about security testing in a flutter, Security Testing is a type of Software Testing that uncovers vulnerabilities of the system and determines that the data and resources of the system are protected from possible intruders. It ensures that the software system and application are free from any threats or risks that can cause a loss.

If you’re looking for the best Flutter app development company for your mobile application then feel free to contact us at — support@flutterdevs.com.


Table Of Contents::

Security

Security philosophy

How to make a flutter app with high Security

Secure Your Applications through Flutter

Conclusion


So let’s get started! 🙌


Security:

The Flutter group takes the security of Flutter and the applications made with it truly. This page portrays how to report any weaknesses you might find, and records best practices to limit the gamble of presenting a weakness.

Security philosophy:

Flutter security strategy is based on six key pillars

  • > Identify: Track & prioritize key security risks by identifying core assets, key threats, and vulnerabilities.
  • > Detect: Detect and identify vulnerabilities using techniques and tools like vulnerability scanning, static application security testing, and fuzzing.
  • > Protect: Eliminate risks by mitigating known vulnerabilities and protecting critical assets against source threats.
  • > Respond: Define processes to report, triage, and respond to vulnerabilities or attacks.
  • > Recover: Build capabilities to contain and recover from an incident with minimal impact.
  • > Keep your copy of Flutter up to date: Private, customized versions of Flutter tend to fall behind the current version and may not include important security fixes and enhancements. Instead, routinely update your copy of Flutter. If you’re making changes to improve Flutter, be sure to update your fork and consider sharing your changes with the community.

How to make a flutter app with high Security:

When it comes to app development, the biggest concern for developers is app security. Did you know? About 57% of digital media time is spent on mobiles or tablets. With this increase in usage of smartphones and applications, app security has become the biggest concern for developers and as well as users. 75% of apps fail to clear the mobile security risks and ultimately put everything at risk.

Let’s take a look at some of the biggest app security risks and solutions for them.

> Unauthorized access to your application — Giving access to your application without verifying the user’s authentication is the biggest threat to security. Flutter provides various security and authentication plugins. By integrating a sign-in plugin, developers can easily add an authentication check to an app.

> Leaking of sensitive data — Nowadays mobile apps contain all kinds of sensitive data, from IDs, passwords, PINs, financial details, and more. If an app lacks security then these details can be at risk. Flutter offers a secure data storage plugin named NSUserDefault for IOS and SharedPreferences for Android.

> Code injections — Code injections are one of the most common practices by hackers. They insert unauthorized code in an already existing code. This can result in major issues like data loss or a total takeover of the application. Developers can use Flutter plugins which come with permissions that are already inserted into the plugin code.

Secure Your Applications through Flutter:

1. Loopholes in User Authentication:

This is still the most common and widely repeated security issue across mobile apps of all niches. Unauthorized access to the app is a key security threat for many mobile apps. There are two common approaches to deal with this. First of all, the app security measure must ensure that every user is authenticated, and secondly, there should be a secondary safeguard to block an unauthorized user from doing further damage to an app once such an incident is detected.

Fortunately, Flutter offers robust measures to prevent such security flaws. Within the Flutter, you can find several trusted and tested plugins for authentication that follow stringent sign-in and social login protocols leaving no room for unauthorized access. It is advisable to use one of these officially recommended plugins. For instance, when one needs to authenticate with Facebook, the official Facebook Sign in plugin should be trusted.

2) Data Leaks and Data Theft:

Instances of data leaks and data theft are steadily increasing, thanks to multiple device interfaces involving different data usage facets. An app needs to deal with multiple types of sensitive data, including personal identity, browsing and transaction data, financial data, etc. Since corporations are always after grabbing more customer or user data to derive data-driven market insights, data theft and data breaches are increasingly becoming common.

Flutter strengthens data security and actively prevents such data security risks by some measures. Let’s have a quick look at these measures to protect data from manipulation and theft.

  1. Flutter comes with a dedicated plugin for shared preferences for every device platform, and this allows for providing persistent storage. Now, developers simply can avoid using these Shared Preferences for storing all kinds of sensitive data like financial information, password, PIN, etc.

2. Every app uses an in-memory cache to store data locally in the device, which further exposes the data to security risks. Now Flutter developer can set a timer for clearing this cache every time the user concludes a session and presses the home button.

3. Apart from the above-mentioned measures, developers can also use app-level encryption to bolster data security further. Flutter developers can access iOS SecKey API and Common Crypto library for using both asymmetric and symmetric encryption keys for the app data. Flutter code is written in Dart, and the language offers several cryptos and encrypts libraries with several cryptographic hashing and encryption functions.

3) Malicious Code Injections:

Another major security threat common to many apps is code injection, which mostly happens through less reliable plugins. The code injections by getting access to the app database can inject malicious code, and result in data loss, data breaches, data tampering, faulty app performance, and complete crashing of the app. The most alarming thing is that such attacks occur every once in a while, and common app security safeguards are not enough to prevent them completely.

Since third-party plugins are mostly responsible for code injections leading to security risks, using official plugins from trusted and reputed sources is the safest practice to prevent such attacks. In case you still have been facing such attacks, detecting the culprit plugin and offloading it or deploying additional code to prevent such an attack is necessary. In such cases, you obviously need Flutter security experts and developers.

4) Data Loss in The Network:

Another way your app is often exposed to security risk is through the network leak and security loopholes in the network. HTTPS coming with a TLS or Transport Layer Security ensures optimum data encryption and authentication. Now, sometimes bad configuration of the TLS security parameters, including weak cipher suites, can cause great security vulnerabilities for the network connection.

The Dart: io library of Flutter ensures that the HTTPS connection is equipped with TLS Certificate Pinning and the HttpClient class for enhanced network security. Thanks to this, the HTTPS requests having custom trusted certificates can be maintained and managed by SecurityContext objects. Thanks to this, Flutter API calls can be protected with security features common in native frameworks.

Conclusion:

For developing a highly secure mobile app equipped with standout security features, Flutter can be the best choice. Google built the Flutter framework keeping all the security concerns and flaws in mind. Flutter almost has the answers to most of the security challenges for modern apps.

❤ ❤ Thanks for reading this article ❤❤

If I got something wrong? Let me know in the comments. I would love to improve.

Clap 👏 If this article helps you.


From Our Parent Company Aeologic

Aeologic Technologies is a leading AI-driven digital transformation company in India, helping businesses unlock growth with AI automation, IoT solutions, and custom web & mobile app development. We also specialize in AIDC solutions and technical manpower augmentation, offering end-to-end support from strategy and design to deployment and optimization.

Trusted across industries like manufacturing, healthcare, logistics, BFSI, and smart cities, Aeologic combines innovation with deep industry expertise to deliver future-ready solutions.

Feel free to connect with us:
And read more articles from FlutterDevs.com.

FlutterDevs team of Flutter developers to build high-quality and functionally-rich apps. Hire a flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! You can connect with us on Facebook, GitHub, Twitter, and LinkedIn for any flutter-related queries.

We welcome feedback and hope that you share what you’re working on using #FlutterDevs. We truly enjoy seeing how you use Flutter to build beautiful, interactive web experiences.

Need expert help building your Flutter app? Talk to FlutterExperts for architecture, development, and consulting support.


Smoke Testing In Flutter

0

Hi everyone! today we start learning about smoke testing in a flutter, Smoke tests take your code, build it, run it, and verify a thing or two. They will not verify that your software is 100% functional and correct. In a production app, they will act as a quick bailout — if the smoke test fails, the whole build fails. And it does so quickly.

If you’re looking for the best Flutter app development company for your mobile application then feel free to contact us at — support@flutterdevs.com.


Table Of Contents::

A Complete Guide to Smoke Testing in Software QA

What Is Smoke Testing in Software Testing?

Features of Smoke Testing

When To Perform a Smoke Test in a flutter

How To Plan a Smoke Test in a flutter

Types of Smoke Tests

Advantages of Smoke Testing

Best Tools for Smoke Testing

Conclusion


A Complete Guide to Smoke Testing in Software QA:

The expression “smoke test” was lifted from the development industry. During this test, water pipelines would be loaded up with smoke to check whether there were any leaks and other underlying issues.

In the tech business, smoke tests were first utilized for equipment testing. In this test, equipment sheets were tried to see whether they would smoke whenever they were connected and turned on. In the event that they transmitted smoke, they would bomb the tests and be promptly turned off. On the off chance that they didn’t, they’d continue on toward the following round of testing.

Smoke testing assumes a comparable part in programming improvement and programming quality affirmation — yet without the strict smoke.

What Is Smoke Testing in Software Testing?

Smoke testing is an essential piece of creating applications and quality confirmation. It is the primary line of protection against defective code in introductory programming fabricates. Smoke tests aren’t utilized to investigate assembles — they are utilized to see if the forms are working in any case.

Not at all like other QA tests that are comprehensive and check the general code, smoke tests are quick and focused. Profoundly or basic elements of the composting program are working appropriately.

Expecting that any of the basic features or components of the item aren’t working, then, the structure is immediately excused or patched up. Testing simply the key functionalities of the item helps save with timing, effort, and costs. Along these lines, smoke tests can help with working on your benefit from speculation on the item.

All things considered, in the event that there is a mistake with the basic region of the form, it would be an exercise in futility to really look at its other, less significant capacities. It would likewise be a loss to keep chipping away at the ongoing form too.

Features of Smoke Testing:

Smoke testing is additionally called build verification testing or build acknowledgment testing. The tests confirm whether the principal functions of the underlying form are working precisely. The build might be acknowledged for the following series of QA tests or dismissed out and out in view of the outcomes.

Smoke tests are now and again additionally alluded to as admission tests, as they choose the following round of testing. There are a few viewpoints engaged with smoke testing. These viewpoints or elements separate smoke testing from different kinds of QA tests.

Some of the key features of smoke testing are as follows:

  • > Quick to run: Just the significant elements or basic functionalities of the form are tried. It typically requires as long as an hour to complete a smoke test.
  • > Flexible: Smoke testing should be possible physically or through robotized processes.
  • > Non-exhaustive: These tests include an extremely predetermined number of experiments. Notwithstanding, they ought to in any case be fit for revealing fundamental mistakes in new forms.
  • > Broad coverage testing: Applicable to different levels of software testing, including integration testing, acceptance testing, and system testing.
  • > Easy to test: Smoke tests should also be easily executed by developers to improve QA processes.

When To Perform a Smoke Test in a flutter:

A smoke test is performed toward the start of the product advancement life cycle or SDLC process. This test ought to generally be finished with any recently finished form or delivery that is incorporated with existing programming.

As such, smoke tests are performed before any detailed regression or functional testing. By directing smoke tests from the get-go in the SDLC, developers or QA analysts can rapidly confirm the form quality and undertaking execution.

Builds with any errors are quickly sent back to development before any time is wasted with tests that are more exhaustive.

How To Plan a Smoke Test in a flutter:

A smoke test might be manual, automated, or a blend of the two. Regardless of what kind of smoke test you choose to lead, the arranging stage remains by and large something almost identical.

Here are some key tips for planning and running a smoke test:

  • > Prepare for testing: Make a point to set the favored air for the smoke test. This includes setting up any documents, servers, and licenses you might require for the test. Make duplicates of your documents and work, also, so you have reinforcements in the event that anything occurs.
  • > Collect all necessary files: Get all the form or code records you will require for the test.
  • > Write test script: Utilize a solitary content to run the tests. Besides, guarantee that your content is composed so it makes and saves a report after each test. Along these lines, any form of disappointment can be appropriately and precisely answered by the engineers.
  • > Clean data: Ensure your trials are in a perfect climate. Eliminate any unessential documents that might influence the smoke test. This additionally incorporates halting the waiter and exhausting data set tables.

Types of Smoke Tests:

There are three different ways developers and QA engineers can lead smoke testing. The kind of smoke test utilized may rely upon the builds you really want to test, time imperatives, or your own inclination.

  • > Manual tests: This is the most widely recognized sort of smoke testing. This technique tests each underlying form or any new highlights added to existing forms. In the manual technique, you should alter or refresh your test scripts in light of each test prerequisite. At times, you might have to make totally new scripts.
  • > Automated tests: Automation smoke testing permits you to test bunches of beginning forms. Utilizing a mechanization device for smoke testing is ideal when you have restricted time before assemble sending.
  • > Hybrid tests: As its name proposes, half-breed tests are a blend of both manual and computerized smoke tests. Joining the two sorts can support the general presentation of the testing.

Advantages of Smoke Testing:

Smoke testing is an urgent part of the software development process. Starter testing offers various advantages, for example,

  • > Detects bugs early in the development phase
  • > Conducting smoke tests early on helps you ensure the quality of your programs. You can quickly determine which builds need to go back to the drawing board.
  • > Improves effectiveness of QA team.
  • > Why waste time, effort, and manpower testing minor functions if the main purpose of the software already doesn’t perform as intended? By testing only the core functionalities of your build, you can quickly determine whether it would work as intended. This way, your QA team can move on to other projects and tests.
  • > Helps make the QA process highly effective
  • > Uncovering obvious errors immediately saves time and effort for your QA team. It helps streamline the QA process. Additionally, it can promote confidence and job satisfaction among the QA teams.

Best Tools for Smoke Testing:

There are several tools you can use to perform smoke testing. Coming up next are two of the best and most well known apparatuses for mechanized smoke tests:

  • > Selenium: Selenium is utilized widely in the product testing industry as a computerization apparatus. It is an open-source mechanization device and can run utilizing JavaScript. You can perform and get results for up to 250 experiments within three to four hours. Tests led utilizing selenium can be recorded and replayed in a similar climate as the product.
testWidgets('smoke test', (WidgetTester tester) async {
final app = MyApp();
await tester.pumpWidget(app); expect(find.text("0"), findsOneWidget); await tester.tap(find.byIcon(Icons.add));
await tester.pump(); expect(find.text("1"), findsOneWidget);
});
  • > PhantomJS: PhantomJS is the favored robotized smoke testing device for web applications, as long as your tests aren’t broad. It upholds a few web guidelines and works flawlessly with the advancement work process. You can chop down the testing time by 66% by utilizing PhantomJS. Besides, you can utilize this device to perform manual testing simpler, too.

Conclusion:

Quality assurance is an essential advance during the software development life cycle. You can’t place only anyone in control to obtain ideal outcomes and great forms. Individuals accountable for your QA cycle need more than preparing — they need insight and devotion.

❤ ❤ Thanks for reading this article ❤❤

If I got something wrong? Let me know in the comments. I would love to improve.

Clap 👏 If this article helps you.


From Our Parent Company Aeologic

Aeologic Technologies is a leading AI-driven digital transformation company in India, helping businesses unlock growth with AI automation, IoT solutions, and custom web & mobile app development. We also specialize in AIDC solutions and technical manpower augmentation, offering end-to-end support from strategy and design to deployment and optimization.

Trusted across industries like manufacturing, healthcare, logistics, BFSI, and smart cities, Aeologic combines innovation with deep industry expertise to deliver future-ready solutions.

Feel free to connect with us:
And read more articles from FlutterDevs.com.

FlutterDevs team of Flutter developers to build high-quality and functionally-rich apps. Hire a flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! You can connect with us on Facebook, GitHub, Twitter, and LinkedIn for any flutter-related queries.

We welcome feedback and hope that you share what you’re working on using #FlutterDevs. We truly enjoy seeing how you use Flutter to build beautiful, interactive web experiences.

Need expert help building your Flutter app? Talk to FlutterExperts for architecture, development, and consulting support.


Convert Object To Json In Dart & Flutter

0

In this article, we will explore the Convert Object To Json In Dart & Flutter. We see how to execute a demo program. We will tell you the two ways to Convert objects to Json in your Dart & Flutter applications.

If you’re looking for the best Flutter app development company for your mobile application then feel free to contact us at — support@flutterdevs.com.


Table Of Contents::

Using without package

Using json_serializable package

Conclusion



Using without package

This approach includes physically composing functions to convert your Dart object to and from JSON. Here you have full command over the serialization cycle.

Steps:

  • Define your class.
  • Create a method inside the class to convert the object into a Map.
  • Convert the Map object to a JSON string using the jsonEncode() function from the dart:convert library.
import 'dart:convert';
import 'package:flutter/foundation.dart' show debugPrint;

class User {
  final String name;
  final int age;
  final bool isAdult

  User(this.name, this.age, this.isAdult);

  Map<String, dynamic> toJson() {
    return {
      'name': name,
      'age': age,
      "isAdult": isAdult,
    };
  }
}

void main() {
  User user = User('Ray Thomas', 28, true);
  String jsonString = jsonEncode(user.toJson());
  debugPrint(json String);
}

When we run the application, we ought to get the screen’s output like the underneath screen Console Output.

{"name":"Ray Thomas","age":28,"isAdult":true}

This method is adaptable and requires no outer dependencies or packages. The tradeoff is that you need to think of some additional code and the rationale might change on various use cases. As the intricacy of your objects increases, the manual execution can become error-prone and inefficient.

Using json_serializable package

This arrangement involves the json_serializable package that gives code age to JSON serialization and deserialization. In the accompanying model, we’ll characterize a Client class that is more confounded than the one you’ve found in the preceding example. This time, we’ll place the class in a different document named user. dart.

Steps:

  • Install the json_annotationjson_serializable, and build_runner packages by executing this command.
flutter pub add json_annotation json_serializable build_runner

Then run this one:

flutter pub get
  • In the lib directory of your Flutter project, add a new file called user.dart. Define the User class with the @JsonSerializable() annotation like so:
// lib/user.dart
import 'package:json_annotation/json_annotation.dart';

part 'user.g.dart';

@JsonSerializable()
class User {
  String name;
  int age;
  @JsonKey(name: 'is_author')
  bool isAuthor;

  User(this.name, this.age, this.isAuthor);
  Map<String, dynamic> toJson() => _$UserToJson(this);
  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
}
  • Build the JSON serialization code with build_runner by performing the following command
dart run build_runner build

A new file named user.g.dart will be automatically generated in your lib folder:

// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'user.dart';

// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************

User _$UserFromJson(Map<String, dynamic> json) => User(
      json['name'] as String,
      json['age'] as int,
      json['is_admin'] as bool,
    );

Map<String, dynamic> _$UserToJson(User instance) => <String, dynamic>{
      'name': instance.name,
      'age': instance.age,
      'is_author': instance.isAthor,
    };


Use the generated toJson() method to convert the object or a list of objects to a JSON string. You can also use the generated fromJson() method to convert a JSON string back to an object or a list of objects.

// lib/main.dart
import 'dart:convert' show jsonEncode;
import 'package:flutter/foundation.dart' show kDebugMode;
import 'user.dart';

void main() {
  User user = User('Roy Thomas', 28, true);

  Map<String, dynamic> jsonUser = user.toJson();

  if (kDebugMode) {
    print(jsonEncode(jsonUser));
    // Prints: {"name":"Roy Thomase","age":28,"is_author":true}
  }

  List<User> users = [
    User('FlutterFevs.com', 33, true),
    User('Sam Fand', 22, false),
    User('Allen', 30, false),
  ];
  List<Map<String, dynamic>> jsonUsers =
      users.map((user) => user.toJson()).toList();

  if (kDebugMode) {
    print(jsonEncode(jsonUsers));
    // Prints: [{"name":"FlutterFevs.com","age":33,"is_admin":true},{"name":"Sam Fand',"age":22,"is_admin":false},{"name":"Allen","age":30,"is_admin":false}]
  }
}

This approach supports converting nested objects and complex types such as dates or enums to JSON strings with annotations. However, it requires adding a bunch of external dependencies and packages to your project. You’ll also have to run  a command to generate the code for the toJson() and fromJson() methods every time you make changes to your classes.

Conclusion:

In the article, I have explained the Convert Object To Json In Dart & Fluttert; you can modify this code according to your choice. This was a small introduction to Convert Object To Json In Dart & Flutter User Interaction from my side, and it’s working using Flutter.

I hope this blog will provide you with sufficient information on Trying the Convert Object To Json In Dart & Flutter of your projects. We’ve examined two different ways to turn a class object into JSON. The first one is quick and works well for simple use cases. The second one is powerful and shines with complex data structures. So please try it.

❤ ❤ Thanks for reading this article ❤❤

If I got something wrong? Let me know in the comments. I would love to improve.

Clap 👏 If this article helps you.


From Our Parent Company Aeologic

Aeologic Technologies is a leading AI-driven digital transformation company in India, helping businesses unlock growth with AI automation, IoT solutions, and custom web & mobile app development. We also specialize in AIDC solutions and technical manpower augmentation, offering end-to-end support from strategy and design to deployment and optimization.

Trusted across industries like manufacturing, healthcare, logistics, BFSI, and smart cities, Aeologic combines innovation with deep industry expertise to deliver future-ready solutions.

Feel free to connect with us:
And read more articles from FlutterDevs.com.

FlutterDevs team of Flutter developers to build high-quality and functionally-rich apps. Hire a Flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! For any flutter-related queries, you can connect with us on FacebookGitHubTwitter, and LinkedIn.

We welcome feedback and hope that you share what you’re working on using #FlutterDevs. We truly enjoy seeing how you use Flutter to build beautiful, interactive web experiences.

Related: Flutter Rendering Widgets Using JSON Data

Related: Parsing JSON in Flutter

Need expert help building your Flutter app? Talk to FlutterExperts for architecture, development, and consulting support.