Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
93aaf89
feat: add dart_feed_utils to dependabot configuration
freekvandeven Jun 12, 2025
b96b103
feat: add workflow for releasing packages
freekvandeven Jun 12, 2025
a64ff33
feat: add flutter_catalog implementation of flutter_feed
freekvandeven Jun 13, 2025
aba04ed
feat: add restful api implementation of the CatalogRepository
freekvandeven Jun 19, 2025
5f87d9b
feat: add method for creating catalog items
freekvandeven Jul 2, 2025
0b0669a
feat: use generic type that extends CategoryItem for CatalogRepository
freekvandeven Jul 2, 2025
0edac19
feat: update catalogitem
freekvandeven Jul 4, 2025
89b7060
feat: add image upload to the catalog repository
freekvandeven Jul 4, 2025
3d35e2b
feat: add update/delete method for the CatalogRepository
freekvandeven Jul 6, 2025
1beba93
feat: add catalog modification screen
freekvandeven Jul 6, 2025
3a7466f
feat: add separate user repository for fetching user information
freekvandeven Jul 7, 2025
d0a381c
feat: update catalog detail view UI
freekvandeven Jul 7, 2025
2594b3d
feat: add getAllUsers for fetching all posters at once
freekvandeven Jul 7, 2025
a666854
feat: add riverpod caching layer for the catalog repositories
freekvandeven Jul 8, 2025
fbad48e
feat: add user location when creating and fetching items for the catalog
freekvandeven Jul 10, 2025
7928532
fix: add the catalog user repository to the catalog service
freekvandeven Jul 11, 2025
ff38e3d
feat: finish filter selection UI
freekvandeven Jul 11, 2025
55a0ca8
chore: export pop handler for better scope usage
FlutterJoey Jan 20, 2026
b475e6b
feat: export catalog grid item
FlutterJoey Jan 20, 2026
6640391
chore: export catalog views
FlutterJoey Jan 21, 2026
0c237e5
fix: correct endpoint to normal scheme using dashes instead of unders…
Quirille Feb 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 28 additions & 3 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,41 @@ version: 2

updates:
- package-ecosystem: "pub"
directory: "/packages/flutter_timeline"
directory: "/packages/dart_feed_utilities"
schedule:
interval: "weekly"

- package-ecosystem: "pub"
directory: "/packages/flutter_timeline_interface"
directory: "/packages/flutter_catalog"
schedule:
interval: "weekly"

- package-ecosystem: "pub"
directory: "/packages/flutter_catalog_interface"
schedule:
interval: "weekly"

- package-ecosystem: "pub"
directory: "/packages/flutter_catalog_rest_api"
schedule:
interval: "weekly"

- package-ecosystem: "pub"
directory: "/packages/flutter_catalog_riverpod"
schedule:
interval: "weekly"

- package-ecosystem: "pub"
directory: "/packages/flutter_feed_utils"
schedule:
interval: "weekly"

- package-ecosystem: "pub"
directory: "/packages/flutter_timeline"
schedule:
interval: "weekly"

- package-ecosystem: "pub"
directory: "/packages/flutter_timeline_interface"
schedule:
interval: "weekly"
14 changes: 14 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
name: Iconica Standard Component Release Workflow
# Workflow Caller version: 1.0.0

on:
release:
types: [published]

workflow_dispatch:

jobs:
call-global-iconica-workflow:
uses: Iconica-Development/.github/.github/workflows/component-release.yml@master
secrets: inherit
permissions: write-all
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ repos:
hooks:
- id: dart-format
args:
- packages/dart_feed_utils/lib/*
- packages/dart_feed_utilities/lib/*
- packages/flutter_feed_utils/lib/*
- packages/flutter_timeline/lib/*
- packages/flutter_timeline/example/lib/*
Expand Down
43 changes: 43 additions & 0 deletions packages/flutter_catalog/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
migrate_working_dir/

# IntelliJ related
*.iml
*.ipr
*.iws
.idea/

# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
.vscode/

# Flutter/Dart/Pub related
**/doc/api/
**/ios/Flutter/.last_build_id
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.pub-cache/
.pub/
/build/

# Symbolication related
app.*.symbols

# Obfuscation related
app.*.map.json

# Android Studio will place build artifacts here
/android/app/debug
/android/app/profile
/android/app/release
11 changes: 11 additions & 0 deletions packages/flutter_catalog/analysis_options.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# SPDX-FileCopyrightText: 2025 Iconica
#
# SPDX-License-Identifier: GPL-3.0-or-later

include: package:flutter_iconica_analysis/components_options.yaml

analyzer:
exclude: [lib/l10n/*.dart]

linter:
rules:
48 changes: 48 additions & 0 deletions packages/flutter_catalog/example/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.build/
.buildlog/
.history
.svn/
.swiftpm/
migrate_working_dir/

# IntelliJ related
*.iml
*.ipr
*.iws
.idea/

# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
.vscode/

# Flutter/Dart/Pub related
**/doc/api/
**/ios/Flutter/.last_build_id
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.pub-cache/
.pub/
/build/

# Symbolication related
app.*.symbols

# Obfuscation related
app.*.map.json

# Android Studio will place build artifacts here
/android/app/debug
/android/app/profile
/android/app/release

app_localizations_en.dart
app_localizations.dart
11 changes: 11 additions & 0 deletions packages/flutter_catalog/example/analysis_options.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# SPDX-FileCopyrightText: 2025 Iconica
#
# SPDX-License-Identifier: GPL-3.0-or-later

include: package:flutter_iconica_analysis/analysis_options.yaml

analyzer:
exclude: [lib/l10n/*.dart]

linter:
rules:
4 changes: 4 additions & 0 deletions packages/flutter_catalog/example/l10n.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart
synthetic-package: false
3 changes: 3 additions & 0 deletions packages/flutter_catalog/example/lib/l10n/app_en.arb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"@@locale": "en"
}
52 changes: 52 additions & 0 deletions packages/flutter_catalog/example/lib/main.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import "package:flutter/material.dart";
import "package:flutter_catalog/flutter_catalog.dart";
import "package:flutter_catalog_example/l10n/app_localizations.dart";

void main() {
runApp(const CatalogExampleApp());
}

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

@override
Widget build(BuildContext context) => MaterialApp(
title: "Flutter Catalog",
localizationsDelegates: const [
...AppLocalizations.localizationsDelegates,
...FlutterCatalogLocalizations.localizationsDelegates,
],
supportedLocales: const [Locale("en")],
theme: ThemeData(
useMaterial3: true,
colorScheme: ColorScheme.fromSeed(
seedColor: const Color(0xFFBDE260),
),
appBarTheme: const AppBarTheme(
backgroundColor: Color(0xFFBDE260),
foregroundColor: Colors.black,
),
),
home: const CatalogView(),
);
}

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

@override
Widget build(BuildContext context) => FlutterCatalogUserstory(
userId: "example_user",
options: CatalogOptions(
builders: CatalogBuilders(
baseScreenBuilder: (context, screenType, appBar, title, body) =>
Scaffold(
appBar: appBar,
body: body,
),
),
),
);
}
29 changes: 29 additions & 0 deletions packages/flutter_catalog/example/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: flutter_catalog_example
description: "Flutter Feed Catalog Example Application"
publish_to: "none"

version: 1.0.0+1

environment:
sdk: ">=3.4.0 <4.0.0"
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
flutter_catalog:
path: ../

dependency_overrides:
flutter_hooks: 0.20.4

dev_dependencies:
flutter_test:
sdk: flutter
flutter_iconica_analysis:
hosted: https://forgejo.internal.iconica.nl/api/packages/internal/pub
version: ^7.0.0

flutter:
uses-material-design: true
generate: true
15 changes: 15 additions & 0 deletions packages/flutter_catalog/example/test/widget_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// This is an example unit test.
//
// A unit test tests a single function, method, or class. To learn more about
// writing unit tests, visit
// https://flutter.dev/docs/cookbook/testing/unit/introduction

import "package:flutter_test/flutter_test.dart";

void main() {
group("Plus Operator", () {
test("should add two numbers together", () {
expect(1 + 1, 2);
});
});
}
5 changes: 5 additions & 0 deletions packages/flutter_catalog/l10n.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart
synthetic-package: false
output-class: "FlutterCatalogLocalizations"
21 changes: 21 additions & 0 deletions packages/flutter_catalog/lib/flutter_catalog.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/// A library that provides a complete catalog user story.
///
/// Includes views for Browse, filtering, and viewing item details.
library flutter_catalog;

export "package:flutter_catalog_interface/flutter_catalog_interface.dart";

export "/l10n/app_localizations.dart";
export "src/config/catalog_builders.dart";
export "src/config/catalog_filter_options.dart";
export "src/config/catalog_options.dart";
export "src/config/catalog_theme.dart";
export "src/config/catalog_translations.dart";
export "src/config/screen_types.dart";
export "src/flutter_catalog_userstory.dart";
export "src/repositories/memory_catalog_repository.dart";
export "src/services/catalog_service.dart";
export "src/services/pop_handler.dart";
export "src/utils/scope.dart";
export "src/views/views.dart";
export "src/widgets/catalog_grid_item.dart";
40 changes: 40 additions & 0 deletions packages/flutter_catalog/lib/l10n/app_en.arb
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
{
"@@locale": "en",
"overviewTitle": "Toys near you",
"filtersTitle": "Filters",
"searchHint": "Find toys...",
"filterButton": "Filters",
"noItemsFound": "No items found.",
"itemLoadingError": "Failed to load items.",
"itemCreatePageMandatorySection": "Mandatory",
"detailDescriptionTitle": "Description",
"applyFiltersButton": "Apply filters",
"sendMessageButton": "Send message",
"characteristicsTitle": "Characteristics",
"distanceTitle": "Distance",
"postedSince": "Posted since {date}",
"@postedSince": {
"placeholders": {
"date": {}
}
},
"editItemButton": "Edit",
"contactUserDisabledMessage": "You cannot contact the author of this item.",
"itemCreatePageTitle": "Create Item",
"priceFree": "Free",
"itemEditPageTitle": "Edit Item",
"itemCreatePageTitleHint": "Title",
"itemCreatePageDescriptionHint": "Description",
"itemCreatePageTitleRequiredError": "Title is required.",
"itemCreatePageAddImagesButton": "Add Images",
"itemCreatePageSaveChangesButton": "Save Changes",
"itemCreatePageSavingChangesButton": "Saving...",
"itemCreatePageDeleteItemButton": "Delete Item",
"itemCreatePageDeleteConfirmationTitle": "Delete Item",
"itemCreatePageDeleteConfirmationMessage": "Are you sure you want to delete this item forever?",
"itemCreatePageDeleteConfirmationConfirm": "Delete",
"itemCreatePageDeleteConfirmationCancel": "Cancel",
"itemCreatePageGenericError": "An error occurred.",
"itemCreatePageItemDeletedSuccess": "Item deleted successfully.",
"itemCreatePageItemDeleteError": "Failed to delete item."
}
Loading