Search packages, repositories and app categories

GitHub repositorythe-best-is-best/tbib_downloader

tbib_downloader

the-best-is-best/tbib_downloader open-source repository details.

tbib_downloader project cover
Stars
2
Forks
0
Last push (UTC)
Jun 21, 2026
Project status
Active

Original README

English project snapshot. Visit GitHub for the latest content.

tbib_downloader

This package for download file and open it you can display notifications and progress notification and can receive download bytes and total bytes

Note this package use awesome notification

  • Can display progress in your app

  • Notification with progress bar

  • Notification downloaded ended

  • ios configuration

step 1

 Change
  BUILD_LIBRARY_FOR_DISTRIBUTION = YES 
 to 
 BUILD_LIBRARY_FOR_DISTRIBUTION = NO  

step 2

  • in info.plist
    <key>LSSupportsOpeningDocumentsInPlace</key>
    <true/>
    <key>UIFileSharingEnabled</key>
    <true/>

Note:

Notification progress bar not support in ios.

  • How to use

step 1

  • init package in main
void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await TBIBDownloader().init();
  ....
}

step 2

  • add awesome notification listener in main page
  @override
  void initState() {
    super.initState();
    AwesomeNotifications().setListeners(
        onActionReceivedMethod: MyNotificationService.onActionReceivedMethod,
        onNotificationCreatedMethod:
            MyNotificationService.onNotificationCreatedMethod,
        onNotificationDisplayedMethod:
            MyNotificationService.onNotificationDisplayedMethod,
        onDismissActionReceivedMethod:
            MyNotificationService.onDismissActionReceivedMethod);
            ...
  }

step 3

  • Create class: MyNotificationService
import 'dart:developer';

import 'package:awesome_notifications/awesome_notifications.dart';
import 'package:tbib_downloader/tbib_downloader.dart';

class MyNotificationService {
  /// Use this method to detect when a new notification or a schedule is created
  @pragma("vm:entry-point")
  static Future<void> onNotificationCreatedMethod(
      ReceivedNotification receivedNotification) async {
    // Your code goes here
  }

  /// Use this method to detect every time that a new notification is displayed
  @pragma("vm:entry-point")
  static Future<void> onNotificationDisplayedMethod(
      ReceivedNotification receivedNotification) async {
    // Your code goes here
  }

  /// Use this method to detect if the user dismissed a notification
  @pragma("vm:entry-point")
  static Future<void> onDismissActionReceivedMethod(
      ReceivedAction receivedAction) async {
    // Your code goes here
  }

  /// Use this method to detect when the user taps on a notification or action button
  @pragma("vm:entry-point")
  static Future<void> onActionReceivedMethod(
      ReceivedAction receivedAction) async {
    if (receivedAction.buttonKeyPressed == 'tbib_downloader_open_file') {
      var res = await TBIBDownloaderOpenFile()
          .openFile(path: receivedAction.payload!['path']!);

      log(res.message);
    } else if (receivedAction.buttonKeyPressed ==
        'tbib_downloader_delete_file') {
      await TBIBDownloaderOpenFile()
          .deleteFile(receivedAction.payload!['path']!);
    }
  }
}

  • how to download

Note

in version 1.0.1 can use attribute saveFileInDataApp to save in android/data/${package name}/...

 ElevatedButton(
                onPressed: () async {
                  var path = await TBIBDownloader().downloadFile(
                    url: 'http://212.183.159.230/50MB.zip',
                    fileName: 'dummy.zip',
                    directoryName: 'test',
                    onReceiveProgress: ({int? receivedBytes, int? totalBytes}) {
                      if (!context.mounted) {
                        return;
                      }
                      setState(() {
                        progress = (receivedBytes! / totalBytes!);
                      });
                    },
                  );
                  debugPrint('path $path');
                  if (!context.mounted) {
                    return;
                  }
                  setState(() {
                    progress = 0;
                  });
                },
                child: const Text('download'),
              ),
  • now more future in download progress

onReceiveProgress use it for get current downloaded and max file size with bytes

  • package support download one file and download file in background

  • if user leave page download will be continue but not support stop download

support open file with native apps

android support

{
            {".3gp",    "video/3gpp"},
            {".torrent","application/x-bittorrent"},
            {".kml",    "application/vnd.google-earth.kml+xml"},
            {".gpx",    "application/gpx+xml"},
            {".csv",    "application/vnd.ms-excel"},
            {".apk",    "application/vnd.android.package-archive"},
            {".asf",    "video/x-ms-asf"},
            {".avi",    "video/x-msvideo"},
            {".bin",    "application/octet-stream"},
            {".bmp",    "image/bmp"},
            {".c",      "text/plain"},
            {".class",  "application/octet-stream"},
            {".conf",   "text/plain"},
            {".cpp",    "text/plain"},
            {".doc",    "application/msword"},
            {".docx",   "application/vnd.openxmlformats-officedocument.wordprocessingml.document"},
            {".xls",    "application/vnd.ms-excel"},
            {".xlsx",   "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
            {".exe",    "application/octet-stream"},
            {".gif",    "image/gif"},
            {".gtar",   "application/x-gtar"},
            {".gz",     "application/x-gzip"},
            {".h",      "text/plain"},
            {".htm",    "text/html"},
            {".html",   "text/html"},
            {".jar",    "application/java-archive"},
            {".java",   "text/plain"},
            {".jpeg",   "image/jpeg"},
            {".jpg",    "image/jpeg"},
            {".js",     "application/x-javascript"},
            {".log",    "text/plain"},
            {".m3u",    "audio/x-mpegurl"},
            {".m4a",    "audio/mp4a-latm"},
            {".m4b",    "audio/mp4a-latm"},
            {".m4p",    "audio/mp4a-latm"},
            {".m4u",    "video/vnd.mpegurl"},
            {".m4v",    "video/x-m4v"},
            {".mov",    "video/quicktime"},
            {".mp2",    "audio/x-mpeg"},
            {".mp3",    "audio/x-mpeg"},
            {".mp4",    "video/mp4"},
            {".mpc",    "application/vnd.mpohun.certificate"},
            {".mpe",    "video/mpeg"},
            {".mpeg",   "video/mpeg"},
            {".mpg",    "video/mpeg"},
            {".mpg4",   "video/mp4"},
            {".mpga",   "audio/mpeg"},
            {".msg",    "application/vnd.ms-outlook"},
            {".ogg",    "audio/ogg"},
            {".pdf",    "application/pdf"},
            {".png",    "image/png"},
            {".pps",    "application/vnd.ms-powerpoint"},
            {".ppt",    "application/vnd.ms-powerpoint"},
            {".pptx",   "application/vnd.openxmlformats-officedocument.presentationml.presentation"},
            {".prop",   "text/plain"},
            {".rc",     "text/plain"},
            {".rmvb",   "audio/x-pn-realaudio"},
            {".rtf",    "application/rtf"},
            {".sh",     "text/plain"},
            {".tar",    "application/x-tar"},
            {".tgz",    "application/x-compressed"},
            {".txt",    "text/plain"},
            {".wav",    "audio/x-wav"},
            {".wma",    "audio/x-ms-wma"},
            {".wmv",    "audio/x-ms-wmv"},
            {".wps",    "application/vnd.ms-works"},
            {".xml",    "text/plain"},
            {".z",      "application/x-compress"},
            {".zip",    "application/x-zip-compressed"},
            {"",        "*/*"}
}

ios support

{
  ".rtf": "public.rtf",
  ".txt": "public.plain-text",
  ".html": "public.html",
  ".htm": "public.html",
  ".xml": "public.xml",
  ".tar": "public.tar-archive",
  ".gz": "org.gnu.gnu-zip-archive",
  ".gzip": "org.gnu.gnu-zip-archive",
  ".tgz": "org.gnu.gnu-zip-tar-archive",
  ".jpg": "public.jpeg",
  ".jpeg": "public.jpeg",
  ".png": "public.png",
  ".avi": "public.avi",
  ".mpg": "public.mpeg",
  ".mpeg": "public.mpeg",
  ".mp4": "public.mpeg-4",
  ".3gpp": "public.3gpp",
  ".3gp": "public.3gpp",
  ".mp3": "public.mp3",
  ".zip": "com.pkware.zip-archive",
  ".gif": "com.compuserve.gif",
  ".bmp": "com.microsoft.bmp",
  ".ico": "com.microsoft.ico",
  ".doc": "com.microsoft.word.doc",
  ".xls": "com.microsoft.excel.xls",
  ".ppt": "com.microsoft.powerpoint.​ppt",
  ".wav": "com.microsoft.waveform-​audio",
  ".wm": "com.microsoft.windows-​media-wm",
  ".wmv": "com.microsoft.windows-​media-wmv",
  ".pdf": "com.adobe.pdf"
}

Michelle Raouf GitHub avatar
GitHub author

Michelle Raouf ↗

LanguagesDartKotlinSwiftShellRubyObjective-C

Packages published by this repository

Dependencies used

Dependency list 13 items

How do I choose a repository?

Start with your use case, compare repository activity, and check the original project before adopting it.

  1. Search by repository name, owner or description, then narrow the results by topic.
  2. Compare stars, forks and recent pushes. Stars show community interest, not a guarantee of quality.
  3. Read the README, license and issues on GitHub before using a project.

Sources and maintenance

“A repository is the most basic element of GitHub.”

GitHub Docs — About repositories ↗