dio_sync 1.0.2 copy "dio_sync: ^1.0.2" to clipboard
dio_sync: ^1.0.2 copied to clipboard

add sync mechaniscm to dio requests

example/lib/main.dart

import 'dart:async';
import 'dart:math';

import 'package:dio/dio.dart';
import 'package:dio_sync/dio_sync.dart';
import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart';

void main() async {
  await Hive.initFlutter();
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late final Dio dio;
  LazySyncBox? box;
  StreamSubscription? subscription;
  Iterable<BoxValue> events = [];
  @override
  void initState() {
    dio = Dio(BaseOptions(baseUrl: 'https://jsonplaceholder.typicode.com'));
    dio.interceptors.add(_Interceptor());
    LazySyncBox.create(
      client: dio,
      periodicSyncDuration: const Duration(seconds: 10),
      automaticSyncType: AutomaticSyncType.single,
    ).then((value) {
      setState(() {
        box = value;
        events = box?.values ?? [];
      });
      subscription = box?.listen(_onValuesChanged);
    });
    super.initState();
  }

  void addRequest() {
    dio.post('/tossdos/1',
        queryParameters: {"params1": "params2"},
        data: FormData.fromMap(
          {
            'file': MultipartFile.fromBytes([0, 93, 38, 2, 202])
          },
        ));
  }

  @override
  void dispose() {
    subscription?.cancel();
    box?.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: ListView(
        children: events.map(_buildItem).toList(),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: addRequest,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }

  FutureBuilder<BoxObject?> _buildItem(BoxValue e) {
    return FutureBuilder(
      future: e.value,
      builder: (BuildContext context, AsyncSnapshot<BoxObject?> snapshot) {
        var value = snapshot.data;
        return ListTile(
          title: Text("${value?.path}(${value?.uuid})"),
          subtitle: Text(value?.exception?.message ?? value?.toString() ?? ""),
          trailing: Text(value?.status.name ?? ""),
        );
      },
    );
  }

  void _onValuesChanged(BoxEvent event) {
    setState(() {
      events = box?.values ?? [];
    });
  }
}

class _Interceptor implements Interceptor {
  @override
  void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
    print(
        "Requesting: ${options.path}   extra: ${options.extra} param: ${options.queryParameters}");
    handler.next(options);
  }

  @override
  void onError(DioException err, ErrorInterceptorHandler handler) {
    print(
        "Error: ${err.requestOptions.path}   extra: ${err.requestOptions.extra} param: ${err.requestOptions.queryParameters}");
    handler.next(err);
  }

  @override
  void onResponse(Response response, ResponseInterceptorHandler handler) {
    print(
      "Error: ${response.requestOptions.path}   extra: ${response.requestOptions.extra} param: ${response.requestOptions.queryParameters}",
    );
    handler.next(response);
  }
}
1
likes
140
points
57
downloads

Publisher

unverified uploader

Weekly Downloads

add sync mechaniscm to dio requests

Repository (GitHub)

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

connectivity_plus, dio, flutter, hive, http_parser, uuid

More

Packages that depend on dio_sync