A simple friendly network state handler to handle states of a request as it's in a initial, loading, loaded or an error. You can use it with any of your favourite package either it's http or dio.
🎖 Installing
- First goto your pubspec.yaml file and add dependency:
network_state_handler: ^0.0.2
- run flutter pub get to update the packages dependencies.
⚡️ Import
- In your code, you can use it like this: first import the package:
import 'package:network_state_handler/network_state_handler.dart'
🎮 Code Usage
How to use it? It's friendly and easy to work with network_state_handler, checkout inside example folder to understand how it works.
import 'package:flutter/material.dart';
import 'package:network_state_handler/network_state_handler.dart';
import 'package:networking_freezed_dio/repos/api_repo.dart';
import 'model/list_user_response.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: const ListUser(),
);
}
}
class ListUser extends StatefulWidget {
const ListUser({Key? key}) : super(key: key);
@override
_ListUserState createState() => _ListUserState();
}
class _ListUserState extends State<ListUser> {
final APIRepository _apiRepository = APIRepository();
ResultState<ListUserResponse> state = const ResultState.loading();
ResultState<bool> boolstate = const ResultState.loading();
final GlobalKey<ScaffoldState> _scaffoldkey = GlobalKey<ScaffoldState>();
Future getUsers() async {
ApiResult<ListUserResponse> apiResult =
await _apiRepository.fetchListOfUser();
apiResult.when(success: (ListUserResponse? user) {
setState(() {
state = ResultState.data(data: user);
});
}, failure: (NetworkExceptions? error) {
print(error.toString());
setState(() {
state = ResultState.error(error: error);
});
});
return state;
}
Future deleteUser(int userId) async {
ApiResult<bool> apiResult = await _apiRepository.deleteUser(userId);
apiResult.when(success: (bool? user) {
setState(() {
boolstate = ResultState.data(data: user);
});
}, failure: (NetworkExceptions? error) {
print(error.toString());
setState(() {
boolstate = ResultState.error(error: error);
});
});
return state;
}
@override
void initState() {
getUsers();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldkey,
body: SafeArea(
child: state.when(
idle: () => Container(),
loading: () => const Center(
child: CircularProgressIndicator(),
),
data: (ListUserResponse? data) {
return data!.user!.isEmpty
? const Center(
child: Text(
"No Data found",
),
)
: ListView.separated(
itemCount: data.user!.length,
separatorBuilder: (_, __) => const Divider(),
itemBuilder: (ctx, index) => Dismissible(
key: ValueKey(data.user![index].id),
background: Container(
color: Colors.red,
alignment: Alignment.centerLeft,
child: const Icon(
Icons.delete,
color: Colors.white,
),
),
onDismissed: (direction) async {
if (direction == DismissDirection.startToEnd) {
// dismissed to the left
await deleteUser(data.user![index].id!);
data.user!.removeAt(index);
SnackBar snackBar = const SnackBar(
content: Text('Deleted Successfully'),
);
_scaffoldkey.currentState?.showSnackBar(snackBar);
}
},
direction: DismissDirection.startToEnd,
child: ListTile(
title: Text(data.user![index].first_name ?? ""),
subtitle: Text(data.user![index].email ?? ""),
leading: CircleAvatar(
backgroundImage: NetworkImage(
data.user![index].avatar ?? "",
),
radius: 30,
)),
),
);
},
error: (NetworkExceptions? error) {
return Text(NetworkExceptions.getErrorMessage(error!));
}),
),
);
}
}
FOR MORE EXAMPLES REFER TO example/lib folder.
🐛 Bugs/Requests
If you encounter any problems feel free to open an issue. If you feel the library is missing some feature, please raise a ticket on Github. Pull request are also welcome.
🚀 SUPPORT
You liked this package? then give it a star. If you want to help then: Star this repository. Send a Pull Request with new features, see Contribution Guidelines. Share this package. Create issues if you find a Bug or want to suggest something.