busenet 0.5.0+1 copy "busenet: ^0.5.0+1" to clipboard
busenet: ^0.5.0+1 copied to clipboard

Busenet is a network package that uses Dio underneath. It allows easy integration and quick usage, with request-based caching and generic response model assignment.

example/lib/main.dart

import 'dart:async';

import 'package:busenet/busenet.dart';
import 'package:example/model/post.dart';
import 'package:flutter/material.dart';

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

class MainApp extends StatefulWidget {
  const MainApp({super.key});

  @override
  State<MainApp> createState() => _MainAppState();
}

class _MainAppState extends State<MainApp> {
  Completer<void> initCompleter = Completer<void>();
  late INetworkManager<dynamic> manager;

  bool isLoading = false;
  Post? post;

  bool isError = false;
  String errorMessage = "";

  @override
  void initState() {
    super.initState();
    initializeManager();
  }

  initializeManager() {
    manager = NetworkManager<EmptyResponseModel>()
      ..initialize(
        NetworkConfiguration('https://jsonplaceholder.typicode.com'),
        responseModel: EmptyResponseModel(),
        cacheStoreKey: 'example-cache',
      ).then((value) => initCompleter.complete());
  }

  Future<void> getPost(BuildContext context) async {
    if (!initCompleter.isCompleted) {
      await initCompleter.future;
    }

    changeLoading(true);

    final response = await manager.fetch<Post, Post>(
      '/posts/1',
      parserModel: Post(),
      type: HttpTypes.get,
    ) as EmptyResponseModel;

    changeLoading(false);

    switch (response.statusCode) {
      case 1:
        setState(() {
          post = response.data as Post;
        });
        break;
      default:
        setState(() {
          isError = true;
          errorMessage = response.errorMessage ?? '';
        });
        break;
    }
  }

  changeLoading(bool val) {
    setState(() {
      isLoading = val;
    });
  }

  clearErrors() {
    setState(() {
      isError = false;
      errorMessage = "";
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            if (isLoading) const Text('is loading'),
            if (post == null)
              const Center(child: Text('No post'))
            else
              Center(
                  child: Text(
                post?.title ?? '',
                textAlign: TextAlign.center,
              )),
            if (isError)
              Center(
                  child: Text(
                errorMessage,
                style: const TextStyle(color: Colors.red),
              )),
          ],
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: () {
            clearErrors();
            getPost(context);
          },
          child: const Icon(Icons.get_app),
        ),
      ),
    );
  }
}
1
likes
0
points
76
downloads

Publisher

unverified uploader

Weekly Downloads

Busenet is a network package that uses Dio underneath. It allows easy integration and quick usage, with request-based caching and generic response model assignment.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

dio, dio_cache_interceptor, dio_cache_interceptor_hive_store, flutter, path_provider

More

Packages that depend on busenet