├── android
├── settings_aar.gradle
├── gradle.properties
├── app
│ ├── src
│ │ ├── main
│ │ │ ├── res
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── values
│ │ │ │ │ └── styles.xml
│ │ │ │ ├── drawable
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21
│ │ │ │ │ └── launch_background.xml
│ │ │ │ └── values-night
│ │ │ │ │ └── styles.xml
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── lucao
│ │ │ │ │ └── limpazap
│ │ │ │ │ └── MainActivity.java
│ │ │ └── AndroidManifest.xml
│ │ ├── debug
│ │ │ └── AndroidManifest.xml
│ │ └── profile
│ │ │ └── AndroidManifest.xml
│ └── build.gradle.kts
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
├── .gitignore
├── build.gradle.kts
└── settings.gradle.kts
├── fastlane
└── metadata
│ └── android
│ ├── pt
│ ├── title.txt
│ ├── short_description.txt
│ ├── video.txt
│ ├── images
│ │ ├── icon.png
│ │ ├── featureGraphic.png
│ │ └── phoneScreenshots
│ │ │ ├── 1.jpg
│ │ │ ├── 2.jpg
│ │ │ ├── 3.jpg
│ │ │ ├── 4.jpg
│ │ │ ├── 5.jpg
│ │ │ └── 6.jpg
│ └── full_description.txt
│ └── en-US
│ ├── title.txt
│ ├── short_description.txt
│ ├── video.txt
│ ├── images
│ ├── icon.png
│ ├── featureGraphic.png
│ └── phoneScreenshots
│ │ ├── 1.jpg
│ │ ├── 2.jpg
│ │ ├── 3.jpg
│ │ ├── 4.jpg
│ │ ├── 5.jpg
│ │ └── 6.jpg
│ └── full_description.txt
├── demo.webm
├── media
├── logo.png
├── icone-azul.png
├── icone-verde.png
├── icone-azul.svg
├── icone-verde.svg
└── logo.svg
├── renovate.json
├── privacidade.md
├── create_backup
├── lib
├── view
│ ├── SemArquivosWidget.dart
│ ├── ArquivosWidget.dart
│ ├── ArquivoWidget.dart
│ └── ArquivosView.dart
├── model
│ └── ArquivoDeletavelModel.dart
├── main.dart
└── controller
│ └── ArquivoDeletavelController.dart
├── mise.toml
├── .devcontainer
├── devcontainer.json
└── Dockerfile
├── LICENSE
├── README.md
├── .github
└── workflows
│ └── release.yml
├── analysis_options.yaml
├── .gitignore
├── .metadata
├── shell.nix
├── pubspec.yaml
└── pubspec.lock
/android/settings_aar.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt/title.txt:
--------------------------------------------------------------------------------
1 | Limpazap
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/title.txt:
--------------------------------------------------------------------------------
1 | Limpazap
2 |
--------------------------------------------------------------------------------
/demo.webm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/demo.webm
--------------------------------------------------------------------------------
/media/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/media/logo.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/short_description.txt:
--------------------------------------------------------------------------------
1 | Clean old WhatsApp backups
2 |
3 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt/short_description.txt:
--------------------------------------------------------------------------------
1 | Limpa backups antigos do WhatsApp
2 |
--------------------------------------------------------------------------------
/media/icone-azul.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/media/icone-azul.png
--------------------------------------------------------------------------------
/media/icone-verde.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/media/icone-verde.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/video.txt:
--------------------------------------------------------------------------------
1 | https://raw.githubusercontent.com/lucasew/limpazap/master/demo.webp
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt/video.txt:
--------------------------------------------------------------------------------
1 | https://raw.githubusercontent.com/lucasew/limpazap/master/demo.webp
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/fastlane/metadata/android/pt/images/icon.png
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 | android.enableR8=true
5 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/fastlane/metadata/android/en-US/images/icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt/images/featureGraphic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/fastlane/metadata/android/pt/images/featureGraphic.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/featureGraphic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/fastlane/metadata/android/en-US/images/featureGraphic.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt/images/phoneScreenshots/1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/fastlane/metadata/android/pt/images/phoneScreenshots/1.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt/images/phoneScreenshots/2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/fastlane/metadata/android/pt/images/phoneScreenshots/2.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt/images/phoneScreenshots/3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/fastlane/metadata/android/pt/images/phoneScreenshots/3.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt/images/phoneScreenshots/4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/fastlane/metadata/android/pt/images/phoneScreenshots/4.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt/images/phoneScreenshots/5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/fastlane/metadata/android/pt/images/phoneScreenshots/5.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt/images/phoneScreenshots/6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/fastlane/metadata/android/pt/images/phoneScreenshots/6.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucasew/limpazap/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/6.jpg
--------------------------------------------------------------------------------
/renovate.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3 | "extends": [
4 | "github>lewtec/renovate-config:base",
5 | "config:recommended"
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/android/app/src/main/java/com/lucao/limpazap/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.lucao.limpazap;
2 |
3 | import io.flutter.embedding.android.FlutterActivity;
4 |
5 | public class MainActivity extends FlutterActivity {
6 | }
7 |
--------------------------------------------------------------------------------
/privacidade.md:
--------------------------------------------------------------------------------
1 | :us:
2 |
3 | - Nothing is collected by the app
4 | - All processing happens locally
5 |
6 | :brazil:
7 |
8 | - Nada é coletado pelo aplicativo
9 | - Todo o processamento acontece localmente
10 |
--------------------------------------------------------------------------------
/create_backup:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -euf -o pipefail
3 |
4 | MB=$1;shift
5 | adb shell mkdir -p /sdcard/WhatsApp/Databases
6 | adb shell dd if=/dev/zero of=/sdcard/WhatsApp/Databases/msgstore-$RANDOM-$RANDOM-$RANDOM.1.db.crypt12 bs=1m count=$MB
7 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Fri Jun 23 08:50:38 CEST 2017
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-all.zip
7 |
--------------------------------------------------------------------------------
/lib/view/SemArquivosWidget.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class SemArquivosWidget extends StatelessWidget {
4 | Widget build(BuildContext ctx) {
5 | return Center(
6 | child: Icon(Icons.done_sharp, size: 250, color: Colors.green)
7 | );
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/mise.toml:
--------------------------------------------------------------------------------
1 | [tools]
2 | android-sdk = "19.0"
3 | flutter = "3.35.7-stable"
4 | java = "22.0.0"
5 | usage = "latest"
6 | yq = "latest"
7 |
8 | [tasks.setup-androidsdk]
9 | run = "yes | sdkmanager \"platforms;android-29\" \"build-tools;29.0.3\" \"platform-tools\" && yes | flutter doctor --android-licenses"
10 |
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 | .cxx/
9 |
10 | # Remember to never publicly share your keystore.
11 | # See https://flutter.dev/to/reference-keystore
12 | key.properties
13 | **/*.keystore
14 | **/*.jks
15 |
--------------------------------------------------------------------------------
/lib/model/ArquivoDeletavelModel.dart:
--------------------------------------------------------------------------------
1 | import 'dart:io';
2 |
3 | class ArquivoDeletavel {
4 | final FileSystemEntity arquivo;
5 | late DateTime dataCriacao;
6 | late int tamanho;
7 | late bool isUltimo;
8 | ArquivoDeletavel(this.arquivo, {this.isUltimo = false}) {
9 | var stat = this.arquivo.statSync();
10 | this.dataCriacao = stat.modified;
11 | this.tamanho = stat.size;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/full_description.txt:
--------------------------------------------------------------------------------
1 | For those who don't know, WhatsApp needs to backup the conversations because it doesn't work based on cloud, like Telegram or Messenger, but instead of just keeping the last one. It keeps the last one and up to 7 backups prior to it. Why? I don't know. When I run out of space the first thing I do is delete these old backups and that's what this application is for.
2 |
3 | The big letters were a feedback received by potential users who no longer have such a good view.
4 |
5 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt/full_description.txt:
--------------------------------------------------------------------------------
1 | Para quem não sabe, o WhatsApp necessita fazer backup das conversas por que não trabalha baseado em núvem, como o Telegram ou o Messenger, porém, ao invés de só manter o último ele mantém o ultimo e até 7 backups anteriores a este. Por que? Eu não sei. Quando eu fico sem espaço a primeira coisa que eu faço é apagar esses backups antigos e é para isso que esse aplicativo serve.
2 |
3 | As letras grandes foram um feedback recebido por potenciais usuários que já não tem uma visão tão boa.
4 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/lib/view/ArquivosWidget.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '../model/ArquivoDeletavelModel.dart';
3 | import './ArquivoWidget.dart';
4 | import 'dart:async';
5 |
6 | class ArquivosWidget extends StatelessWidget {
7 | late List arquivos;
8 | late List widgets;
9 | late StreamController chan;
10 | ArquivosWidget(this.arquivos, this.chan) {
11 | this.widgets = arquivos.map((a) => ArquivoWidget(a, chan)).toList();
12 | }
13 | Widget build(BuildContext ctx) {
14 | return ListView(children: widgets);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/.devcontainer/devcontainer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "flutter_docker",
3 | "context": "..",
4 | "dockerFile": "Dockerfile",
5 | "remoteUser": "developer",
6 | "mounts": [
7 | "source=/dev/bus/usb,target=/dev/bus/usb,type=bind"
8 | ],
9 | "settings": {
10 | "terminal.integrated.shell.linux": null
11 | },
12 | "runArgs": ["--privileged"],
13 | "extensions": ["dart-code.flutter"],
14 | "workspaceMount": "source=${localWorkspaceFolder},target=/home/developer/workspace,type=bind,consistency=delegated",
15 | "workspaceFolder": "/home/developer/workspace"
16 | }
--------------------------------------------------------------------------------
/android/build.gradle.kts:
--------------------------------------------------------------------------------
1 | allprojects {
2 | repositories {
3 | google()
4 | mavenCentral()
5 | }
6 | }
7 |
8 | val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get()
9 | rootProject.layout.buildDirectory.value(newBuildDir)
10 |
11 | subprojects {
12 | val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name)
13 | project.layout.buildDirectory.value(newSubprojectBuildDir)
14 | }
15 | subprojects {
16 | project.evaluationDependsOn(":app")
17 | }
18 |
19 | tasks.register("clean") {
20 | delete(rootProject.layout.buildDirectory)
21 | }
22 |
--------------------------------------------------------------------------------
/android/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | val flutterSdkPath = run {
3 | val properties = java.util.Properties()
4 | file("local.properties").inputStream().use { properties.load(it) }
5 | val flutterSdkPath = properties.getProperty("flutter.sdk")
6 | require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" }
7 | flutterSdkPath
8 | }
9 |
10 | includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
11 |
12 | repositories {
13 | google()
14 | mavenCentral()
15 | gradlePluginPortal()
16 | }
17 | }
18 |
19 | plugins {
20 | id("dev.flutter.flutter-plugin-loader") version "1.0.0"
21 | id("com.android.application") version "8.11.1" apply false
22 | id("org.jetbrains.kotlin.android") version "2.2.21" apply false
23 | }
24 |
25 | include(":app")
26 |
--------------------------------------------------------------------------------
/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'view/ArquivosView.dart';
3 |
4 | import 'package:wakelock_plus/wakelock_plus.dart';
5 | import 'package:flutter/foundation.dart';
6 | import 'package:permission_handler/permission_handler.dart';
7 |
8 | Future checarPermissao() async {
9 | while (true) {
10 | if (!await Permission.manageExternalStorage.status.isGranted) {
11 | Permission.manageExternalStorage.request();
12 | }
13 | if (await Permission.storage.status.isGranted) {
14 | return;
15 | } else if (await Permission.storage.isPermanentlyDenied) {
16 | await openAppSettings();
17 | } else {
18 | print(await Permission.storage.request());
19 | }
20 | }
21 | }
22 |
23 | void main() async {
24 | WidgetsFlutterBinding.ensureInitialized();
25 | if (!kReleaseMode) {
26 | await WakelockPlus.enable();
27 | }
28 | checarPermissao();
29 | runApp(
30 | MaterialApp(home: ArquivosView())
31 | );
32 | }
33 |
34 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Lucas Eduardo Wendt
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/.devcontainer/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM ubuntu:24.04@sha256:c35e29c9450151419d9448b0fd75374fec4fff364a27f176fb458d472dfc9e54
2 |
3 | # Prerequisites
4 | RUN apt update && apt install -y curl git unzip xz-utils zip libglu1-mesa openjdk-8-jdk wget
5 |
6 | # Set up new user
7 | RUN useradd -ms /bin/bash developer
8 | USER developer
9 | WORKDIR /home/developer
10 |
11 | # Prepare Android directories and system variables
12 | RUN mkdir -p Android/sdk
13 | ENV ANDROID_SDK_ROOT /home/developer/Android/sdk
14 | RUN mkdir -p .android && touch .android/repositories.cfg
15 |
16 | # Set up Android SDK
17 | RUN wget -O sdk-tools.zip https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
18 | RUN unzip sdk-tools.zip && rm sdk-tools.zip
19 | RUN mv tools Android/sdk/tools
20 | RUN cd Android/sdk/tools/bin && yes | ./sdkmanager --licenses
21 | RUN cd Android/sdk/tools/bin && ./sdkmanager "build-tools;29.0.2" "patcher;v4" "platform-tools" "platforms;android-29" "sources;android-29"
22 | ENV PATH "$PATH:/home/developer/Android/sdk/platform-tools"
23 |
24 | # Download Flutter SDK
25 | RUN git clone https://github.com/flutter/flutter.git
26 | ENV PATH "$PATH:/home/developer/flutter/bin"
27 |
28 | # Run basic check to download Dark SDK
29 | RUN flutter doctor
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Para quem não sabe, o WhatsApp necessita fazer backup das conversas por que não trabalha baseado em núvem, como o Telegram ou o Messenger, porém, ao invés de só manter o último ele mantém o ultimo e até 7 backups anteriores a este. Por que? Eu não sei. Quando eu fico sem espaço a primeira coisa que eu faço é apagar esses backups antigos e é para isso que esse aplicativo serve.
12 |
13 | As letras grandes foram um feedback recebido por potenciais usuários que já não tem uma visão tão boa.
14 |
15 | 
16 |
17 | [
](https://f-droid.org/packages/com.lucao.limpazap/)
20 |
21 | # TODO
22 | - [ ] [Mandar para a PlayStore](https://github.com/lucasew/limpazap/issues/41)
23 |
--------------------------------------------------------------------------------
/.github/workflows/release.yml:
--------------------------------------------------------------------------------
1 | # This is a basic workflow to help you get started with Actions
2 |
3 | name: release
4 | on: push
5 | jobs:
6 | build:
7 | name: Build APK
8 | runs-on: ubuntu-latest
9 | steps:
10 | - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
11 | - name: Setup environment
12 | uses: jdx/mise-action@146a28175021df8ca24f8ee1828cc2a60f980bd5 # v3
13 |
14 | - name: Setup the Android SDK part that sucks
15 | run: mise run setup-androidsdk
16 |
17 | - name: Extract branch name
18 | shell: bash
19 | run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
20 | id: extract_branch
21 |
22 | - run: flutter pub get
23 | - run: flutter pub run flutter_launcher_icons:main
24 | # - run: flutter test
25 | - run: flutter build apk --release
26 | - run: flutter build appbundle --release
27 |
28 | - name: Create a Release APK
29 | uses: ncipollo/release-action@b7eabc95ff50cbeeedec83973935c8f306dfcd0b # v1
30 | with:
31 | artifacts: "build/app/outputs/bundle/release/app-release.aab,build/app/outputs/flutter-apk/app-release.apk"
32 | name: Compilação automática ${{ github.sha }} para branch ${{ steps.extract_branch.outputs.branch }}
33 | token: ${{ secrets.GITHUB_TOKEN }}
34 | commit: ${{ steps.extract_branch.outputs.branch }}
35 | tag: commit-${{ github.sha }}
36 | draft: true
37 | prerelease: true
38 |
--------------------------------------------------------------------------------
/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | # This file configures the analyzer, which statically analyzes Dart code to
2 | # check for errors, warnings, and lints.
3 | #
4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled
5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
6 | # invoked from the command line by running `flutter analyze`.
7 |
8 | # The following line activates a set of recommended lints for Flutter apps,
9 | # packages, and plugins designed to encourage good coding practices.
10 | include: package:flutter_lints/flutter.yaml
11 |
12 | linter:
13 | # The lint rules applied to this project can be customized in the
14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml`
15 | # included above or to enable additional rules. A list of all available lints
16 | # and their documentation is published at https://dart.dev/lints.
17 | #
18 | # Instead of disabling a lint rule for the entire project in the
19 | # section below, it can also be suppressed for a single line of code
20 | # or a specific dart file by using the `// ignore: name_of_lint` and
21 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file
22 | # producing the lint.
23 | rules:
24 | # avoid_print: false # Uncomment to disable the `avoid_print` rule
25 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
26 |
27 | # Additional information about this file can be found at
28 | # https://dart.dev/guides/language/analysis-options
29 |
--------------------------------------------------------------------------------
/media/icone-azul.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/media/icone-verde.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/android/app/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | id("com.android.application")
3 | id("kotlin-android")
4 | // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
5 | id("dev.flutter.flutter-gradle-plugin")
6 | }
7 |
8 | android {
9 | namespace = "com.lucao.limpazap"
10 | compileSdk = flutter.compileSdkVersion
11 | // ndkVersion = flutter.ndkVersion
12 | ndkVersion = "27.0.12077973"
13 |
14 | compileOptions {
15 | sourceCompatibility = JavaVersion.VERSION_11
16 | targetCompatibility = JavaVersion.VERSION_11
17 | }
18 |
19 | kotlinOptions {
20 | jvmTarget = JavaVersion.VERSION_11.toString()
21 | }
22 |
23 | defaultConfig {
24 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
25 | applicationId = "com.lucao.limpazap"
26 | // You can update the following values to match your application needs.
27 | // For more information, see: https://flutter.dev/to/review-gradle-config.
28 | minSdk = flutter.minSdkVersion
29 | targetSdk = flutter.targetSdkVersion
30 | versionCode = flutter.versionCode
31 | versionName = flutter.versionName
32 | }
33 |
34 | buildTypes {
35 | release {
36 | // TODO: Add your own signing config for the release build.
37 | // Signing with the debug keys for now, so `flutter run --release` works.
38 | signingConfig = signingConfigs.getByName("debug")
39 | }
40 | }
41 | }
42 |
43 | flutter {
44 | source = "../.."
45 | }
46 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # custom
2 | .flutter-plugins-dependencies
3 |
4 | # Miscellaneous
5 | *.class
6 | # *.lock
7 | *.log
8 | *.pyc
9 | *.swp
10 | .DS_Store
11 | .atom/
12 | .buildlog/
13 | .history
14 | .svn/
15 |
16 | # IntelliJ related
17 | *.iml
18 | *.ipr
19 | *.iws
20 | .idea/
21 |
22 | # Visual Studio Code related
23 | .vscode/
24 |
25 | # Flutter/Dart/Pub related
26 | **/doc/api/
27 | .dart_tool/
28 | .flutter-plugins
29 | .packages
30 | .pub-cache/
31 | .pub/
32 | build/
33 |
34 | # Android related
35 | **/android/**/gradle-wrapper.jar
36 | **/android/.gradle
37 | **/android/captures/
38 | **/android/gradlew
39 | **/android/gradlew.bat
40 | **/android/local.properties
41 | **/android/**/GeneratedPluginRegistrant.java
42 |
43 | # iOS/XCode related
44 | **/ios/**/*.mode1v3
45 | **/ios/**/*.mode2v3
46 | **/ios/**/*.moved-aside
47 | **/ios/**/*.pbxuser
48 | **/ios/**/*.perspectivev3
49 | **/ios/**/*sync/
50 | **/ios/**/.sconsign.dblite
51 | **/ios/**/.tags*
52 | **/ios/**/.vagrant/
53 | **/ios/**/DerivedData/
54 | **/ios/**/Icon?
55 | **/ios/**/Pods/
56 | **/ios/**/.symlinks/
57 | **/ios/**/profile
58 | **/ios/**/xcuserdata
59 | **/ios/.generated/
60 | **/ios/Flutter/App.framework
61 | **/ios/Flutter/Flutter.framework
62 | **/ios/Flutter/Generated.xcconfig
63 | **/ios/Flutter/app.flx
64 | **/ios/Flutter/app.zip
65 | **/ios/Flutter/flutter_assets/
66 | **/ios/ServiceDefinitions.json
67 | **/ios/Runner/GeneratedPluginRegistrant.*
68 |
69 | # Exceptions to above rules.
70 | !**/ios/**/default.mode1v3
71 | !**/ios/**/default.mode2v3
72 | !**/ios/**/default.pbxuser
73 | !**/ios/**/default.perspectivev3
74 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
75 |
--------------------------------------------------------------------------------
/lib/controller/ArquivoDeletavelController.dart:
--------------------------------------------------------------------------------
1 | import '../model/ArquivoDeletavelModel.dart';
2 | import 'dart:io';
3 |
4 | class ArquivoDeletavelController {
5 | final dbAntigo =
6 | RegExp("msgstore-"); // O nome dos backups antigos bate com esse aqui
7 | bool inverter;
8 | bool exibirUltimo;
9 | ArquivoDeletavelController({this.inverter = false, this.exibirUltimo = false});
10 | static const pastas = [
11 | "/sdcard/Android/media/com.whatsapp/WhatsApp/Databases",
12 | "/sdcard/Android/media/com.whatsapp.w4b/WhatsApp Business/Databases",
13 | "/sdcard/WhatsApp/Databases",
14 | "/sdcard/GBWhatsApp/Databases"
15 | ];
16 |
17 | List get arquivos {
18 | var ret = pastas
19 | .map((p) => Directory(p)) // Transforma tudo em Directory
20 | .where((p) => p.existsSync()) // Filtra só os que existem
21 | .map((p) => p.listSync()) // Dá ls em todas as pastas
22 | .expand(
23 | (att) => att) // Teremos uma lista de listas, agora não mais hehe
24 | .map((arq) => ArquivoDeletavel(arq,
25 | isUltimo: !dbAntigo.hasMatch(
26 | arq.path))) // Gera model verificando se é backup antigo ou não
27 | .where((a) =>
28 | this.exibirUltimo ||
29 | dbAntigo.hasMatch(
30 | a.arquivo.path)) // Ignora o ultimo backup se especificado
31 | .toList(); // Expande o iterador
32 | ret.sort(
33 | (x, y) => x.dataCriacao.compareTo(y.dataCriacao)); // Ordena todo mundo
34 | return this.inverter
35 | ? ret.reversed.toList()
36 | : ret; // Inverte se especificado e retorna
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: "nixpkgs000000000000000000000000000000000"
8 | channel: "stable"
9 |
10 | project_type: app
11 |
12 | # Tracks metadata for the flutter migrate command
13 | migration:
14 | platforms:
15 | - platform: root
16 | create_revision: nixpkgs000000000000000000000000000000000
17 | base_revision: nixpkgs000000000000000000000000000000000
18 | - platform: android
19 | create_revision: nixpkgs000000000000000000000000000000000
20 | base_revision: nixpkgs000000000000000000000000000000000
21 | - platform: ios
22 | create_revision: nixpkgs000000000000000000000000000000000
23 | base_revision: nixpkgs000000000000000000000000000000000
24 | - platform: linux
25 | create_revision: nixpkgs000000000000000000000000000000000
26 | base_revision: nixpkgs000000000000000000000000000000000
27 | - platform: macos
28 | create_revision: nixpkgs000000000000000000000000000000000
29 | base_revision: nixpkgs000000000000000000000000000000000
30 | - platform: web
31 | create_revision: nixpkgs000000000000000000000000000000000
32 | base_revision: nixpkgs000000000000000000000000000000000
33 | - platform: windows
34 | create_revision: nixpkgs000000000000000000000000000000000
35 | base_revision: nixpkgs000000000000000000000000000000000
36 |
37 | # User provided section
38 |
39 | # List of Local paths (relative to this file) that should be
40 | # ignored by the migrate tool.
41 | #
42 | # Files that are not part of the templates will be ignored by default.
43 | unmanaged_files:
44 | - 'lib/main.dart'
45 | - 'ios/Runner.xcodeproj/project.pbxproj'
46 |
--------------------------------------------------------------------------------
/shell.nix:
--------------------------------------------------------------------------------
1 | let
2 | nixpkgs = builtins.fetchTarball {
3 | url = "https://github.com/NixOS/nixpkgs/archive/257cbbcd3ab7bd96f5d24d50adc807de7c82e06d.tar.gz";
4 | sha256 = "sha256-hCsGe2nDz+SX4uO+lj0qPVcSGZdt52R9Yk5MOYs4djw=";
5 | };
6 | in
7 | { pkgs ? import nixpkgs {
8 | config.android_sdk.accept_license = true;
9 | }}:
10 |
11 | let
12 | buildToolsVersion = "28.0.3";
13 | android = pkgs.androidenv.composeAndroidPackages {
14 | platformVersions = [ "27" "28" "29" ];
15 | abiVersions = ["armeabi-v7a" "arm64-v8a"];
16 | buildToolsVersions = [buildToolsVersion];
17 | useGoogleAPIs = true;
18 | };
19 | jdk = pkgs.jdk8;
20 | JAVA_HOME = "${jdk.home}";
21 | sdk = android.androidsdk.overrideAttrs (oldAttrs: {
22 | installPhase = oldAttrs.installPhase + ''
23 | mkdir -p "$out/libexec/android-sdk/licenses"
24 | function lic {
25 | echo -e "\n$2" >> "$out/libexec/android-sdk/licenses/$1"
26 | }
27 | lic android-googletv-license 601085b94cd77f0b54ff86406957099ebe79c4d6
28 | lic android-sdk-arm-dbt-license 859f317696f67ef3d7f30a50a5560e7834b43903
29 | lic android-sdk-license 8933bad161af4178b1185d1a37fbf41ea5269c55
30 | lic android-sdk-license 24333f8a63b6825ea9c5514f83c2829b004d1fee
31 | lic android-sdk-preview-license 84831b9409646a918e30573bab4c9c91346d8abd
32 | lic google-gdk-license 33b6a2b64607f11b759f320ef9dff4ae5c47d97a
33 | lic mips-android-sysimage-license e9acab5b5fbb560a72cfaecce8946896ff6aab9d
34 | '';
35 | });
36 | ANDROID_HOME = "${sdk}/libexec/android-sdk";
37 | in
38 | pkgs.mkShell {
39 | shellHook = ''
40 | echo ${sdk}
41 | flutter packages get
42 | flutter packages run flutter_launcher_icons:main
43 | '';
44 | buildInputs = with pkgs; [
45 | sdk
46 | glibc
47 | flutter
48 | jre
49 | dart
50 | ];
51 | # override the aapt2 that gradle uses with the nix-shipped version
52 | GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${ANDROID_HOME}/build-tools/${buildToolsVersion}/aapt2";
53 | inherit ANDROID_HOME;
54 | }
55 |
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
11 |
14 |
22 |
26 |
29 |
30 |
31 |
32 |
33 |
34 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/lib/view/ArquivoWidget.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '../model/ArquivoDeletavelModel.dart';
3 | import 'dart:async';
4 |
5 | class ArquivoWidget extends StatelessWidget {
6 | final ArquivoDeletavel arquivo;
7 | final StreamController chan;
8 | ArquivoWidget(this.arquivo, this.chan);
9 |
10 | Widget build(BuildContext ctx) {
11 | var d = arquivo.dataCriacao;
12 | var texto =
13 | "${d.day}.${d.month}.${d.year} ${d.hour}:${d.minute < 10 ? '0' : ''}${d.minute}";
14 | var tamanho = "${(this.arquivo.tamanho / 1000000).round()} MB";
15 | var elemento = ListTile(
16 | title: ConstrainedBox(
17 | constraints: BoxConstraints(
18 | maxHeight: 50
19 | ),
20 | child: FittedBox(
21 | alignment: Alignment.centerLeft,
22 | child: Row(children: [
23 | Icon(arquivo.isUltimo ? Icons.warning : Icons.history, size: 36),
24 | Text(
25 | texto,
26 | style: TextStyle(fontSize: 36), // TextStyle
27 | ), // Text
28 | ]), // Row
29 | ) // FittedBox
30 | ), // ConstrainedBox
31 | subtitle: Row(children: [
32 | Icon(Icons.sd_card, size: 36),
33 | Text(
34 | tamanho,
35 | style: TextStyle(fontSize: 28), // TextStyle
36 | ) // Text
37 | ], ) // Row
38 | ); // ListTile
39 | return Center(
40 | child: Dismissible(
41 | key: Key(this.arquivo.arquivo.path),
42 | child: Center(child: elemento),
43 | background: Container(
44 | alignment: Alignment.centerLeft,
45 | color: Colors.red,
46 | child: Icon(Icons.delete, size: 36), // Icon
47 | padding: EdgeInsets.symmetric(horizontal: 30)
48 | ), // Container
49 | secondaryBackground: Container(
50 | alignment: Alignment.centerRight,
51 | color: Colors.red,
52 | child: Icon(Icons.delete,size: 36),
53 | padding: EdgeInsets.symmetric(horizontal: 30)
54 | ),
55 | onDismissed: (_) {
56 | chan.add(this.arquivo);
57 | }) // Dismissible
58 | );
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/lib/view/ArquivosView.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 | import 'package:flutter/material.dart';
3 | import '../model/ArquivoDeletavelModel.dart';
4 | import '../controller/ArquivoDeletavelController.dart';
5 | import './ArquivosWidget.dart';
6 | import './SemArquivosWidget.dart';
7 |
8 | class ArquivosView extends StatefulWidget {
9 | createState() => ArquivosViewState();
10 | }
11 |
12 |
13 | class ArquivosViewState extends State {
14 | final chan = new StreamController(); // Esse cara recebe os eventos do que tenque apagar, dps ele atualiza os widgets
15 | List arquivos = [];
16 | bool inverter = false;
17 | bool exibirUltimo = false;
18 |
19 | ArquivosViewState() {
20 | listen();
21 | this.arquivos = updateArquivos();
22 | }
23 |
24 | List updateArquivos() {
25 | return ArquivoDeletavelController(
26 | inverter: this.inverter, exibirUltimo: this.exibirUltimo)
27 | .arquivos;
28 | }
29 |
30 | update() async {
31 | this.setState(() => this.arquivos = updateArquivos());
32 | // this.setState(() => this.arquivos = []);
33 | }
34 |
35 | listen() async {
36 | chan.stream.listen((ad) {
37 | ad.arquivo.deleteSync();
38 | update();
39 | });
40 | }
41 |
42 | Widget build(BuildContext ctx) {
43 | return Scaffold(
44 | appBar: AppBar(
45 | title: Text("Limpazap", overflow: TextOverflow.visible),
46 | backgroundColor: Colors.green,
47 | actions: [
48 | IconButton(
49 | icon: Icon(Icons.refresh),
50 | onPressed: update
51 | ),
52 | IconButton(
53 | icon: Icon(this.inverter
54 | ? Icons.fast_forward
55 | : Icons.fast_rewind), // Icon
56 | onPressed: () {
57 | this.inverter = !this.inverter;
58 | update();
59 | }), // IconButton
60 | IconButton(
61 | icon: Icon(this.exibirUltimo
62 | ? Icons.visibility_off
63 | : Icons.visibility),
64 | onPressed: () {
65 | this.exibirUltimo = !this.exibirUltimo;
66 | update();
67 | })
68 | ]), // AppBar
69 | floatingActionButton: FloatingActionButton(
70 | backgroundColor: Colors.green,
71 | child: Icon(Icons.delete_sweep),
72 | onPressed: () => arquivos.forEach((arq) => chan.add(arq))),
73 | body: this.arquivos.length == 0
74 | ? SemArquivosWidget()
75 | : ArquivosWidget(this.arquivos, chan) // ArquivosWidget
76 | ); // Scaffold
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: limpazap
2 | description: Aplicativo que realiza limpeza de arquivos desnecessários criados pelo WhatsApp
3 |
4 | publish_to: 'none'
5 | # The following defines the version and build number for your application.
6 | # A version number is three numbers separated by dots, like 1.2.43
7 | # followed by an optional build number separated by a +.
8 | # Both the version and the builder number may be overridden in flutter
9 | # build by specifying --build-name and --build-number, respectively.
10 | # In Android, build-name is used as versionName while build-number used as versionCode.
11 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning
12 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
13 | # Read more about iOS versioning at
14 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
15 | version: 4.1.0+17
16 |
17 | environment:
18 | sdk: '^3.8.0'
19 |
20 | dependencies:
21 | flutter:
22 | sdk: flutter
23 |
24 | # The following adds the Cupertino Icons font to your application.
25 | # Use with the CupertinoIcons class for iOS style icons.
26 | cupertino_icons: ^1.0.0
27 | permission_handler: ^12.0.1
28 | flutter_launcher_icons: "^0.14.0" # workaround: this doesn't get downloaded on fdroid
29 | wakelock_plus: ^1.3.2 # for dev mode
30 |
31 | dev_dependencies:
32 | flutter_test:
33 | sdk: flutter
34 |
35 | flutter_icons:
36 | image_path: "media/icone-verde.png"
37 | ios: false
38 | android: true
39 |
40 |
41 | # For information on the generic Dart part of this file, see the
42 | # following page: https://www.dartlang.org/tools/pub/pubspec
43 |
44 | # The following section is specific to Flutter.
45 | flutter:
46 |
47 | # The following line ensures that the Material Icons font is
48 | # included with your application, so that you can use the icons in
49 | # the material Icons class.
50 | uses-material-design: true
51 |
52 | # To add assets to your application, add an assets section, like this:
53 | # assets:
54 | # - images/a_dot_burr.jpeg
55 | # - images/a_dot_ham.jpeg
56 |
57 | # An image asset can refer to one or more resolution-specific "variants", see
58 | # https://flutter.dev/assets-and-images/#resolution-aware.
59 |
60 | # For details regarding adding assets from package dependencies, see
61 | # https://flutter.dev/assets-and-images/#from-packages
62 |
63 | # To add custom fonts to your application, add a fonts section here,
64 | # in this "flutter" section. Each entry in this list should have a
65 | # "family" key with the font family name, and a "fonts" key with a
66 | # list giving the asset and other descriptors for the font. For
67 | # example:
68 | # fonts:
69 | # - family: Schyler
70 | # fonts:
71 | # - asset: fonts/Schyler-Regular.ttf
72 | # - asset: fonts/Schyler-Italic.ttf
73 | # style: italic
74 | # - family: Trajan Pro
75 | # fonts:
76 | # - asset: fonts/TrajanPro.ttf
77 | # - asset: fonts/TrajanPro_Bold.ttf
78 | # weight: 700
79 | #
80 | # For details regarding fonts from package dependencies,
81 | # see https://flutter.dev/custom-fonts/#from-packages
82 |
--------------------------------------------------------------------------------
/media/logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/pubspec.lock:
--------------------------------------------------------------------------------
1 | # Generated by pub
2 | # See https://dart.dev/tools/pub/glossary#lockfile
3 | packages:
4 | archive:
5 | dependency: transitive
6 | description:
7 | name: archive
8 | sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd"
9 | url: "https://pub.dev"
10 | source: hosted
11 | version: "4.0.7"
12 | args:
13 | dependency: transitive
14 | description:
15 | name: args
16 | sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
17 | url: "https://pub.dev"
18 | source: hosted
19 | version: "2.7.0"
20 | async:
21 | dependency: transitive
22 | description:
23 | name: async
24 | sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
25 | url: "https://pub.dev"
26 | source: hosted
27 | version: "2.13.0"
28 | boolean_selector:
29 | dependency: transitive
30 | description:
31 | name: boolean_selector
32 | sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
33 | url: "https://pub.dev"
34 | source: hosted
35 | version: "2.1.2"
36 | characters:
37 | dependency: transitive
38 | description:
39 | name: characters
40 | sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
41 | url: "https://pub.dev"
42 | source: hosted
43 | version: "1.4.0"
44 | checked_yaml:
45 | dependency: transitive
46 | description:
47 | name: checked_yaml
48 | sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f"
49 | url: "https://pub.dev"
50 | source: hosted
51 | version: "2.0.4"
52 | cli_util:
53 | dependency: transitive
54 | description:
55 | name: cli_util
56 | sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c
57 | url: "https://pub.dev"
58 | source: hosted
59 | version: "0.4.2"
60 | clock:
61 | dependency: transitive
62 | description:
63 | name: clock
64 | sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
65 | url: "https://pub.dev"
66 | source: hosted
67 | version: "1.1.2"
68 | collection:
69 | dependency: transitive
70 | description:
71 | name: collection
72 | sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
73 | url: "https://pub.dev"
74 | source: hosted
75 | version: "1.19.1"
76 | crypto:
77 | dependency: transitive
78 | description:
79 | name: crypto
80 | sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf
81 | url: "https://pub.dev"
82 | source: hosted
83 | version: "3.0.7"
84 | cupertino_icons:
85 | dependency: "direct main"
86 | description:
87 | name: cupertino_icons
88 | sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6
89 | url: "https://pub.dev"
90 | source: hosted
91 | version: "1.0.8"
92 | dbus:
93 | dependency: transitive
94 | description:
95 | name: dbus
96 | sha256: "79e0c23480ff85dc68de79e2cd6334add97e48f7f4865d17686dd6ea81a47e8c"
97 | url: "https://pub.dev"
98 | source: hosted
99 | version: "0.7.11"
100 | fake_async:
101 | dependency: transitive
102 | description:
103 | name: fake_async
104 | sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
105 | url: "https://pub.dev"
106 | source: hosted
107 | version: "1.3.3"
108 | ffi:
109 | dependency: transitive
110 | description:
111 | name: ffi
112 | sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418"
113 | url: "https://pub.dev"
114 | source: hosted
115 | version: "2.1.4"
116 | flutter:
117 | dependency: "direct main"
118 | description: flutter
119 | source: sdk
120 | version: "0.0.0"
121 | flutter_launcher_icons:
122 | dependency: "direct main"
123 | description:
124 | name: flutter_launcher_icons
125 | sha256: "10f13781741a2e3972126fae08393d3c4e01fa4cd7473326b94b72cf594195e7"
126 | url: "https://pub.dev"
127 | source: hosted
128 | version: "0.14.4"
129 | flutter_test:
130 | dependency: "direct dev"
131 | description: flutter
132 | source: sdk
133 | version: "0.0.0"
134 | flutter_web_plugins:
135 | dependency: transitive
136 | description: flutter
137 | source: sdk
138 | version: "0.0.0"
139 | http:
140 | dependency: transitive
141 | description:
142 | name: http
143 | sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412"
144 | url: "https://pub.dev"
145 | source: hosted
146 | version: "1.6.0"
147 | http_parser:
148 | dependency: transitive
149 | description:
150 | name: http_parser
151 | sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
152 | url: "https://pub.dev"
153 | source: hosted
154 | version: "4.1.2"
155 | image:
156 | dependency: transitive
157 | description:
158 | name: image
159 | sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928"
160 | url: "https://pub.dev"
161 | source: hosted
162 | version: "4.5.4"
163 | json_annotation:
164 | dependency: transitive
165 | description:
166 | name: json_annotation
167 | sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1"
168 | url: "https://pub.dev"
169 | source: hosted
170 | version: "4.9.0"
171 | leak_tracker:
172 | dependency: transitive
173 | description:
174 | name: leak_tracker
175 | sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
176 | url: "https://pub.dev"
177 | source: hosted
178 | version: "11.0.2"
179 | leak_tracker_flutter_testing:
180 | dependency: transitive
181 | description:
182 | name: leak_tracker_flutter_testing
183 | sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
184 | url: "https://pub.dev"
185 | source: hosted
186 | version: "3.0.10"
187 | leak_tracker_testing:
188 | dependency: transitive
189 | description:
190 | name: leak_tracker_testing
191 | sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
192 | url: "https://pub.dev"
193 | source: hosted
194 | version: "3.0.2"
195 | matcher:
196 | dependency: transitive
197 | description:
198 | name: matcher
199 | sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
200 | url: "https://pub.dev"
201 | source: hosted
202 | version: "0.12.17"
203 | material_color_utilities:
204 | dependency: transitive
205 | description:
206 | name: material_color_utilities
207 | sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
208 | url: "https://pub.dev"
209 | source: hosted
210 | version: "0.11.1"
211 | meta:
212 | dependency: transitive
213 | description:
214 | name: meta
215 | sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
216 | url: "https://pub.dev"
217 | source: hosted
218 | version: "1.17.0"
219 | package_info_plus:
220 | dependency: transitive
221 | description:
222 | name: package_info_plus
223 | sha256: f69da0d3189a4b4ceaeb1a3defb0f329b3b352517f52bed4290f83d4f06bc08d
224 | url: "https://pub.dev"
225 | source: hosted
226 | version: "9.0.0"
227 | package_info_plus_platform_interface:
228 | dependency: transitive
229 | description:
230 | name: package_info_plus_platform_interface
231 | sha256: "202a487f08836a592a6bd4f901ac69b3a8f146af552bbd14407b6b41e1c3f086"
232 | url: "https://pub.dev"
233 | source: hosted
234 | version: "3.2.1"
235 | path:
236 | dependency: transitive
237 | description:
238 | name: path
239 | sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
240 | url: "https://pub.dev"
241 | source: hosted
242 | version: "1.9.1"
243 | permission_handler:
244 | dependency: "direct main"
245 | description:
246 | name: permission_handler
247 | sha256: bc917da36261b00137bbc8896bf1482169cd76f866282368948f032c8c1caae1
248 | url: "https://pub.dev"
249 | source: hosted
250 | version: "12.0.1"
251 | permission_handler_android:
252 | dependency: transitive
253 | description:
254 | name: permission_handler_android
255 | sha256: "1e3bc410ca1bf84662104b100eb126e066cb55791b7451307f9708d4007350e6"
256 | url: "https://pub.dev"
257 | source: hosted
258 | version: "13.0.1"
259 | permission_handler_apple:
260 | dependency: transitive
261 | description:
262 | name: permission_handler_apple
263 | sha256: f000131e755c54cf4d84a5d8bd6e4149e262cc31c5a8b1d698de1ac85fa41023
264 | url: "https://pub.dev"
265 | source: hosted
266 | version: "9.4.7"
267 | permission_handler_html:
268 | dependency: transitive
269 | description:
270 | name: permission_handler_html
271 | sha256: "38f000e83355abb3392140f6bc3030660cfaef189e1f87824facb76300b4ff24"
272 | url: "https://pub.dev"
273 | source: hosted
274 | version: "0.1.3+5"
275 | permission_handler_platform_interface:
276 | dependency: transitive
277 | description:
278 | name: permission_handler_platform_interface
279 | sha256: eb99b295153abce5d683cac8c02e22faab63e50679b937fa1bf67d58bb282878
280 | url: "https://pub.dev"
281 | source: hosted
282 | version: "4.3.0"
283 | permission_handler_windows:
284 | dependency: transitive
285 | description:
286 | name: permission_handler_windows
287 | sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e"
288 | url: "https://pub.dev"
289 | source: hosted
290 | version: "0.2.1"
291 | petitparser:
292 | dependency: transitive
293 | description:
294 | name: petitparser
295 | sha256: "1a97266a94f7350d30ae522c0af07890c70b8e62c71e8e3920d1db4d23c057d1"
296 | url: "https://pub.dev"
297 | source: hosted
298 | version: "7.0.1"
299 | plugin_platform_interface:
300 | dependency: transitive
301 | description:
302 | name: plugin_platform_interface
303 | sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
304 | url: "https://pub.dev"
305 | source: hosted
306 | version: "2.1.8"
307 | posix:
308 | dependency: transitive
309 | description:
310 | name: posix
311 | sha256: "6323a5b0fa688b6a010df4905a56b00181479e6d10534cecfecede2aa55add61"
312 | url: "https://pub.dev"
313 | source: hosted
314 | version: "6.0.3"
315 | sky_engine:
316 | dependency: transitive
317 | description: flutter
318 | source: sdk
319 | version: "0.0.0"
320 | source_span:
321 | dependency: transitive
322 | description:
323 | name: source_span
324 | sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
325 | url: "https://pub.dev"
326 | source: hosted
327 | version: "1.10.1"
328 | stack_trace:
329 | dependency: transitive
330 | description:
331 | name: stack_trace
332 | sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
333 | url: "https://pub.dev"
334 | source: hosted
335 | version: "1.12.1"
336 | stream_channel:
337 | dependency: transitive
338 | description:
339 | name: stream_channel
340 | sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
341 | url: "https://pub.dev"
342 | source: hosted
343 | version: "2.1.4"
344 | string_scanner:
345 | dependency: transitive
346 | description:
347 | name: string_scanner
348 | sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
349 | url: "https://pub.dev"
350 | source: hosted
351 | version: "1.4.1"
352 | term_glyph:
353 | dependency: transitive
354 | description:
355 | name: term_glyph
356 | sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
357 | url: "https://pub.dev"
358 | source: hosted
359 | version: "1.2.2"
360 | test_api:
361 | dependency: transitive
362 | description:
363 | name: test_api
364 | sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55
365 | url: "https://pub.dev"
366 | source: hosted
367 | version: "0.7.7"
368 | typed_data:
369 | dependency: transitive
370 | description:
371 | name: typed_data
372 | sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
373 | url: "https://pub.dev"
374 | source: hosted
375 | version: "1.4.0"
376 | vector_math:
377 | dependency: transitive
378 | description:
379 | name: vector_math
380 | sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
381 | url: "https://pub.dev"
382 | source: hosted
383 | version: "2.2.0"
384 | vm_service:
385 | dependency: transitive
386 | description:
387 | name: vm_service
388 | sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60"
389 | url: "https://pub.dev"
390 | source: hosted
391 | version: "15.0.2"
392 | wakelock_plus:
393 | dependency: "direct main"
394 | description:
395 | name: wakelock_plus
396 | sha256: "9296d40c9adbedaba95d1e704f4e0b434be446e2792948d0e4aa977048104228"
397 | url: "https://pub.dev"
398 | source: hosted
399 | version: "1.4.0"
400 | wakelock_plus_platform_interface:
401 | dependency: transitive
402 | description:
403 | name: wakelock_plus_platform_interface
404 | sha256: "036deb14cd62f558ca3b73006d52ce049fabcdcb2eddfe0bf0fe4e8a943b5cf2"
405 | url: "https://pub.dev"
406 | source: hosted
407 | version: "1.3.0"
408 | web:
409 | dependency: transitive
410 | description:
411 | name: web
412 | sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
413 | url: "https://pub.dev"
414 | source: hosted
415 | version: "1.1.1"
416 | win32:
417 | dependency: transitive
418 | description:
419 | name: win32
420 | sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e
421 | url: "https://pub.dev"
422 | source: hosted
423 | version: "5.15.0"
424 | xml:
425 | dependency: transitive
426 | description:
427 | name: xml
428 | sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025"
429 | url: "https://pub.dev"
430 | source: hosted
431 | version: "6.6.1"
432 | yaml:
433 | dependency: transitive
434 | description:
435 | name: yaml
436 | sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
437 | url: "https://pub.dev"
438 | source: hosted
439 | version: "3.1.3"
440 | sdks:
441 | dart: ">=3.8.0 <4.0.0"
442 | flutter: ">=3.24.0"
443 |
--------------------------------------------------------------------------------