Skip to content

Instantly share code, notes, and snippets.

@VB10
Created May 17, 2026 21:45
Show Gist options
  • Select an option

  • Save VB10/9851f15f75d0be37a68519ca7ae07167 to your computer and use it in GitHub Desktop.

Select an option

Save VB10/9851f15f75d0be37a68519ca7ae07167 to your computer and use it in GitHub Desktop.
General used package for flutter [SYNC: May 18]
meta:
source: pubspec.yaml
flutter_sdk: ">=3.8.0 <4.0.0"
last_synced: 2026-05-18
groups:
state:
- name: flutter_bloc
current: ^9.1.1
changelog: https://pub.dev/packages/flutter_bloc/changelog
notes: BLoC/Cubit foundation — used with the SafeEmit pattern.
- name: provider
current: ^6.0.3
changelog: https://pub.dev/packages/provider/changelog
view:
- name: easy_localization
current: ^3.0.1
changelog: https://pub.dev/packages/easy_localization/changelog
notes: All translation keys flow through locale_keys.g.dart.
- name: kartal
current: ^4.1.0
changelog: https://pub.dev/packages/kartal/changelog
notes: Provides context.general.colorScheme and other shortcuts.
- name: syncfusion_flutter_pdfviewer
current: ^28.2.5
changelog: https://pub.dev/packages/syncfusion_flutter_pdfviewer/changelog
notes: Watch licensing / version policy — Syncfusion ecosystem.
- name: pdf
current: ^3.10.8
changelog: https://pub.dev/packages/pdf/changelog
codegen:
- name: auto_route
current: ^10.1.1
changelog: https://pub.dev/packages/auto_route/changelog
notes: Must be bumped together with auto_route_generator (dev).
- name: freezed_annotation
current: ^3.1.0
changelog: https://pub.dev/packages/freezed_annotation/changelog
- name: freezed
current: ^3.2.0
changelog: https://pub.dev/packages/freezed/changelog
notes: 3.x is a major breaking line — even minor bumps can affect state unions.
core_network:
- name: vexana
current: ^5.0.1
changelog: https://pub.dev/packages/vexana/changelog
notes: ProductNetworkManager is built on top of this.
- name: hive_ce
current: ^2.11.3
changelog: https://pub.dev/packages/hive_ce/changelog
notes: Must stay compatible with hive_ce_generator (dev).
- name: equatable
current: ^2.0.8
changelog: https://pub.dev/packages/equatable/changelog
- name: collection
current: ^1.18.0
changelog: https://pub.dev/packages/collection/changelog
firebase:
- name: firebase_core
current: ^4.7.0
changelog: https://pub.dev/packages/firebase_core/changelog
notes: All firebase packages should stay on the same major line.
- name: firebase_auth
current: ^6.4.0
changelog: https://pub.dev/packages/firebase_auth/changelog
- name: firebase_crashlytics
current: ^5.2.0
changelog: https://pub.dev/packages/firebase_crashlytics/changelog
- name: firebase_analytics
current: ^12.3.0
changelog: https://pub.dev/packages/firebase_analytics/changelog
- name: firebase_messaging
current: ^16.2.0
changelog: https://pub.dev/packages/firebase_messaging/changelog
- name: google_sign_in
current: ^6.1.4
changelog: https://pub.dev/packages/google_sign_in/changelog
notes: iOS pod integration is coordinated with firebase_auth.
di_and_state_context:
- name: get_it
current: ^8.0.3
changelog: https://pub.dev/packages/get_it/changelog
- name: watch_it
current: ^1.6.1
changelog: https://pub.dev/packages/watch_it/changelog
observability:
- name: sentry_flutter
current: ^9.19.0
changelog: https://pub.dev/packages/sentry_flutter/changelog
- name: talker_flutter
current: ^5.1.17
changelog: https://pub.dev/packages/talker_flutter/changelog
notes: Keep on the same major line as talker_dio_logger and talker_bloc_logger.
- name: talker_dio_logger
current: ^5.1.17
changelog: https://pub.dev/packages/talker_dio_logger/changelog
- name: talker_bloc_logger
current: ^5.1.17
changelog: https://pub.dev/packages/talker_bloc_logger/changelog
responsive_and_ui_utils:
- name: responsive_framework
current: ^1.1.0
changelog: https://pub.dev/packages/responsive_framework/changelog
- name: sizer
current: ^3.1.3
changelog: https://pub.dev/packages/sizer/changelog
notes: ResponsiveSizeExtension (.rw/.rh/.rsp) is built on top of this.
- name: flutter_animate
current: ^4.1.1+1
changelog: https://pub.dev/packages/flutter_animate/changelog
- name: lottie
current: ^3.3.3
changelog: https://pub.dev/packages/lottie/changelog
- name: skeletonizer
current: ^2.1.0+1
changelog: https://pub.dev/packages/skeletonizer/changelog
platform_services:
- name: shared_preferences
current: ^2.5.5
changelog: https://pub.dev/packages/shared_preferences/changelog
- name: connectivity_plus
current: ^4.0.1
changelog: https://pub.dev/packages/connectivity_plus/changelog
- name: share_plus
current: ^11.0.0
changelog: https://pub.dev/packages/share_plus/changelog
- name: local_auth
current: ^2.3.0
changelog: https://pub.dev/packages/local_auth/changelog
notes: The BiometricGuard flow depends on this.
- name: in_app_review
current: ^2.0.9
changelog: https://pub.dev/packages/in_app_review/changelog
- name: file_saver
current: ^0.2.14
changelog: https://pub.dev/packages/file_saver/changelog
- name: open_file
current: ^3.5.10
changelog: https://pub.dev/packages/open_file/changelog
charts_and_media:
- name: fl_chart
current: ^0.70.2
changelog: https://pub.dev/packages/fl_chart/changelog
- name: just_audio
current: ^0.9.30
changelog: https://pub.dev/packages/just_audio/changelog
dev_tooling:
- name: build_runner
current: ^2.15.0
changelog: https://pub.dev/packages/build_runner/changelog
- name: json_serializable
current: ^6.13.2
changelog: https://pub.dev/packages/json_serializable/changelog
- name: very_good_analysis
current: ^5.1.0
changelog: https://pub.dev/packages/very_good_analysis/changelog
notes: Lint ruleset — run `dart fix --apply` after a bump.
- name: auto_route_generator
current: ^10.5.0
changelog: https://pub.dev/packages/auto_route_generator/changelog
- name: melos
current: ^6.3.2
changelog: https://pub.dev/packages/melos/changelog
notes: Workspace bootstrap tool — even minor bumps may change script behavior.
testing:
- name: bloc_test
current: ^9.1.1
changelog: https://pub.dev/packages/bloc_test/changelog
- name: mockito
current: ^5.6.5
changelog: https://pub.dev/packages/mockito/changelog
- name: patrol
current: ^3.15.1
changelog: https://pub.dev/packages/patrol/changelog
notes: Keep aligned with patrol_finders.
- name: patrol_finders
current: ^2.7.2
changelog: https://pub.dev/packages/patrol_finders/changelog
@cagridursun

cagridursun commented May 17, 2026

Copy link
Copy Markdown

Auto Sync Flutter Package Versions in Gist suggestion:

.github/workflows/sync-gist-packages.yml


name: Sync Flutter Package Versions in Gist

on:
  schedule:
    - cron: "0 6 * * *"

  workflow_dispatch:

jobs:
  sync-gist:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: "3.12"

      - name: Install dependencies
        run: |
          pip install requests pyyaml packaging

      - name: Sync package versions
        env:
          GIST_ID: ${{ secrets.GIST_ID }}
          GIST_TOKEN: ${{ secrets.GIST_TOKEN }}
          GIST_FILENAME: general.yaml
        run: |
          python scripts/sync_gist_packages.py

scripts/sync_gist_packages.py

import os
import sys
import datetime
from typing import Any, Dict

import requests
import yaml
from packaging.version import Version, InvalidVersion


GIST_ID = os.environ.get("GIST_ID")
GIST_TOKEN = os.environ.get("GIST_TOKEN")
GIST_FILENAME = os.environ.get("GIST_FILENAME", "general.yaml")

GIST_API_URL = f"https://api.github.com/gists/{GIST_ID}"


def fail(message: str) -> None:
    print(f"ERROR: {message}", file=sys.stderr)
    sys.exit(1)


def github_headers() -> Dict[str, str]:
    return {
        "Authorization": f"Bearer {GIST_TOKEN}",
        "Accept": "application/vnd.github+json",
        "User-Agent": "gist-package-sync",
    }


def get_gist() -> Dict[str, Any]:
    response = requests.get(GIST_API_URL, headers=github_headers(), timeout=20)

    if response.status_code != 200:
        fail(f"Failed to fetch gist. Status={response.status_code}, Body={response.text}")

    return response.json()


def get_yaml_content(gist: Dict[str, Any]) -> str:
    files = gist.get("files", {})

    if GIST_FILENAME not in files:
        fail(f"File '{GIST_FILENAME}' not found in gist.")

    content = files[GIST_FILENAME].get("content")

    if not content:
        fail(f"File '{GIST_FILENAME}' has no content.")

    return content


def get_latest_pub_version(package_name: str) -> str | None:
    url = f"https://pub.dev/api/packages/{package_name}"
    response = requests.get(url, timeout=20)

    if response.status_code == 404:
        print(f"Package not found on pub.dev: {package_name}")
        return None

    if response.status_code != 200:
        print(f"Could not fetch package {package_name}. Status={response.status_code}")
        return None

    data = response.json()
    latest = data.get("latest", {})
    version = latest.get("version")

    return version


def is_newer_version(latest: str, current: str) -> bool:
    try:
        return Version(latest) > Version(current)
    except InvalidVersion:
        # Dart versions are usually semver-compatible.
        # If parsing fails, fallback to simple inequality.
        return latest != current


def update_gist(content: str) -> None:
    payload = {
        "files": {
            GIST_FILENAME: {
                "content": content
            }
        }
    }

    response = requests.patch(
        GIST_API_URL,
        headers=github_headers(),
        json=payload,
        timeout=20,
    )

    if response.status_code != 200:
        fail(f"Failed to update gist. Status={response.status_code}, Body={response.text}")

    print("Gist updated successfully.")


def main() -> None:
    if not GIST_ID:
        fail("GIST_ID secret/env is missing.")

    if not GIST_TOKEN:
        fail("GIST_TOKEN secret/env is missing.")

    gist = get_gist()
    raw_yaml = get_yaml_content(gist)

    data = yaml.safe_load(raw_yaml)

    if not isinstance(data, dict):
        fail("YAML root must be a map/object.")

    packages = data.get("packages")

    if not isinstance(packages, dict):
        fail("YAML must contain a 'packages' map.")

    changed = False

    for package_name, package_info in packages.items():
        if not isinstance(package_info, dict):
            print(f"Skipping invalid package entry: {package_name}")
            continue

        current_version = str(package_info.get("current", "")).strip()

        if not current_version:
            print(f"Skipping {package_name}: current version is missing.")
            continue

        latest_version = get_latest_pub_version(package_name)

        if not latest_version:
            continue

        if is_newer_version(latest_version, current_version):
            print(f"Updating {package_name}: {current_version} -> {latest_version}")

            package_info["previous"] = current_version
            package_info["current"] = latest_version
            package_info["updated_at"] = datetime.date.today().isoformat()

            if "changelog" not in package_info or not package_info["changelog"]:
                package_info["changelog"] = f"https://pub.dev/packages/{package_name}/changelog"

            changed = True
        else:
            print(f"No update for {package_name}: {current_version}")

    if not changed:
        print("No package updates found.")
        return

    data["last_synced"] = datetime.date.today().isoformat()

    updated_yaml = yaml.safe_dump(
        data,
        sort_keys=False,
        allow_unicode=True,
        width=120,
    )

    update_gist(updated_yaml)


if __name__ == "__main__":
    main()

Required Github Secrets:
GIST_ID = "9851f15f75d0be37a68519ca7ae07167"
GIST_TOKEN = -> Go to GitHub → Settings → Developer settings → Personal access tokens

@VB10

VB10 commented May 17, 2026

Copy link
Copy Markdown
Author

week1-
syncfusion_flutter_pdfviewer: 33.2.6 -> bug fix var genel olarak.
freezed 3.2.6-dev.1 -> analyzer support
firebase 4.9.0 -> native support paket pigeon update
sentry 9.20.0 -> geniş destkelr bug fix
connectivity_plus 7.0.1 -> sdk update bug fixp
file_saver 0.4.0 -> özellikler geliştirmeler
local_auth 3.0.1 -> bug fix

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment