unrar_file 1.1.0 copy "unrar_file: ^1.1.0" to clipboard
unrar_file: ^1.1.0 copied to clipboard

flutter wrapper around junrar library for extracting RAR files, in addition to that custom functionality to unrar RAR5(not supported by junrar).

example/lib/main.dart

import 'dart:io';

import 'package:flutter/material.dart';
import 'dart:async';
import 'package:path/path.dart';

import 'package:flutter/services.dart';
import 'package:unrar_file/unrar_file.dart';
import 'package:path_provider/path_provider.dart';

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  String rar_path = 'assets/sample.rar';
  String rar5_path = 'assets/sample5.rar';
  String rar_password_path = "assets/rar4-password-junrar.rar";
  late String file_path;
  late String destination_path ;
  late Directory tempDir;

  extraction() async{
    await extract_file(rar_path);
    await extract_file(rar5_path);
    await extract_file(rar_password_path, password:"junrar");
  }

  // prints content of the temporary directory.
  print_files() async {
    print("\n");
    print("extraction done ... input and output files : ");
    tempDir.list(recursive: true, followLinks: false)
        .listen((FileSystemEntity entity) {
      print(entity.path);
    });
  }

  delete_file() async{
    tempDir.list(recursive: true, followLinks: false)
        .listen((FileSystemEntity entity) {
      new File(entity.path).deleteSync();
    });
  }

  Future<List<String>>get_input_and_destination_path(asset_file_path) async{
    // for this example
    // inside tempDir rar files kept and later
    // extracted outputs are also stored in the same directory.
    if (Platform.isIOS) {
      tempDir = await getApplicationDocumentsDirectory();
    }
    else{
      tempDir = await getTemporaryDirectory();
    }
    //empty the directory removing previous results.
    await delete_file();
    var input_path = join(tempDir.path, basename(asset_file_path));
    // inside the file_path first copy the file from the assets folder.

    ByteData data = await rootBundle.load(asset_file_path);
    List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
    await File(input_path).writeAsBytes(bytes);
    destination_path = tempDir.path;
    return [input_path, destination_path];
  }

  Future<void> extract_file(file_path, {password=""}) async {
    var input_output = await get_input_and_destination_path(file_path);
    var input_file_path = input_output[0];
    var destination_path = input_output[1];
    // Extraction may fail, so we use a try/catch PlatformException.
    try {
      var result = await UnrarFile.extract_rar(input_file_path,  destination_path, password: password);
      print(result);
      await print_files();
    } catch(e) {

      print("extraction failed $e");
    }
  }

  // this is where it all started.
  @override
  void initState() {
    super.initState();
    extraction();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Text('status message : $_platformVersion\n'),
        ),
      ),
    );
  }
}
8
likes
140
pub points
76%
popularity

Publisher

unverified uploader

flutter wrapper around junrar library for extracting RAR files, in addition to that custom functionality to unrar RAR5(not supported by junrar).

Repository (GitHub)
View/report issues

Documentation

API reference

License

Apache-2.0 (license)

Dependencies

flutter, path

More

Packages that depend on unrar_file