bloom_admin library

Automatic server-rendered HTML administration interface for Bloom applications.

Modeled on djangors-admin and Django's Admin interface, bloom_admin provides introspective form and changelist generation from ORM metadata, real SQL database pagination, auto-escaping template rendering, and cryptographic HMAC-SHA256 CSRF verification.

Example usage:

import 'package:bloom_server/bloom_server.dart';
import 'package:bloom_db/bloom_db.dart';
import 'package:bloom_admin/bloom_admin.dart';

void main() async {
  // 1. Initialize router and admin site
  final router = BloomApiRouter();
  final adminSite = BloomAdminSite()
    .withSiteHeader('My Bloom App Admin')
    .withSiteTitle('Bloom Control Center');

  // 2. Register model with customized admin settings
  adminSite.register<Article>(
    meta: Article.meta,
    fromRow: Article.fromRow,
    config: const BloomModelAdminConfig(
      listDisplay: ['id', 'title', 'isPublished'],
      searchFields: ['title', 'content'],
      listFilter: ['isPublished'],
      listEditable: ['title'],
    ),
  );

  // 3. Mount admin routes under /admin
  final db = Database(config: DatabaseConfig(url: 'sqlite::memory:'));
  adminSite.mount(router, db: db, basePath: '/admin');

  // 4. Start serving HTTP requests
  await router.serve(port: 8080);
}

Classes

AdminCsrf
Cryptographic CSRF token manager for bloom_admin.
AdminTemplate
Base class for template evaluation and rendering.
BaseTemplate
Base layout HTML template for bloom_admin.
BloomAdminAction
Bulk admin action definition.
BloomAdminSite
Central administration site registry managing registered models and mounting admin routes.
BloomChangelistPage
Struct containing page data for a model's changelist view.
BloomInlineConfig
Configuration for inline child model display on admin forms.
BloomModelAdmin<T extends Model>
Pluggable administration interface for managing ORM models.
BloomModelAdminConfig
Configuration options for custom model admin registration.
BloomRelatedObjectSummary
Summary of related objects affected by a deletion action.
BloomSiteBranding
Branding customization for the Bloom admin interface.
BulkDeleteConfirmTemplate
Bulk Delete Confirmation HTML template.
ChangelistTemplate
Changelist / Table HTML template.
DefaultBloomModelAdmin<T extends Model>
Default implementation of BloomModelAdmin for model T.
DeleteConfirmTemplate
Delete Confirmation HTML template.
EditFormTemplate
Edit/Add Form HTML template.
IndexTemplate
Index / Dashboard HTML template.
SafeHtml
Safe-by-default server-side HTML rendering engine for bloom_admin.

Constants

changelistPerPage → const int
Default number of items displayed per page on admin changelist views.

Functions

addGetView({required BloomRequest request, required BloomModelAdmin<Model> admin, required DbExecutor db, required BloomSiteBranding branding, required AdminCsrf csrf}) Future<BloomResponse>
HTTP GET handler for rendering the model creation form (/:app/:model/add/).
addPostView({required BloomRequest request, required BloomModelAdmin<Model> admin, required DbExecutor db, required BloomSiteBranding branding, required AdminCsrf csrf}) Future<BloomResponse>
HTTP POST handler for processing a new model creation form submission (/:app/:model/add/).
buildQueryString(Map<String, String?> pairs) String
Builds a ?key=value query string from a map of parameter pairs.
bulkActionView({required BloomRequest request, required BloomModelAdmin<Model> admin, required DbExecutor db, required AdminCsrf csrf}) Future<BloomResponse>
HTTP POST handler for executing custom or bulk actions selected on the changelist table.
bulkDeletePostView({required BloomRequest request, required BloomModelAdmin<Model> admin, required DbExecutor db, required BloomSiteBranding branding, required AdminCsrf csrf}) Future<BloomResponse>
HTTP POST handler for rendering bulk delete confirmation or executing bulk deletion (/:app/:model/bulk-delete/).
changeGetView({required BloomRequest request, required BloomModelAdmin<Model> admin, required DbExecutor db, required BloomSiteBranding branding, required AdminCsrf csrf}) Future<BloomResponse>
HTTP GET handler for rendering the model modification form (/:app/:model/:pk/change/).
changelistView({required BloomRequest request, required BloomModelAdmin<Model> admin, required DbExecutor db, required BloomSiteBranding branding, required AdminCsrf csrf}) Future<BloomResponse>
HTTP GET handler for rendering the model changelist table view.
changePostView({required BloomRequest request, required BloomModelAdmin<Model> admin, required DbExecutor db, required BloomSiteBranding branding, required AdminCsrf csrf}) Future<BloomResponse>
HTTP POST handler for saving updates submitted from a model edit form (/:app/:model/:pk/change/).
csvEscapeField(String s) String
Escapes a CSV field string according to RFC 4180 rules.
deleteGetView({required BloomRequest request, required BloomModelAdmin<Model> admin, required DbExecutor db, required BloomSiteBranding branding, required AdminCsrf csrf}) Future<BloomResponse>
HTTP GET handler for rendering the single-object deletion confirmation page (/:app/:model/:pk/delete/).
deletePostView({required BloomRequest request, required BloomModelAdmin<Model> admin, required DbExecutor db, required AdminCsrf csrf}) Future<BloomResponse>
HTTP POST handler for executing single-object deletion (/:app/:model/:pk/delete/).
exportCsvView({required BloomRequest request, required BloomModelAdmin<Model> admin, required DbExecutor db}) Future<BloomResponse>
HTTP GET handler for exporting filtered model records as a CSV attachment.
htmlEscape(String input) String
Helper extension or function for HTML string escaping.
parseFieldValue(FieldMeta field, String? raw) → (dynamic, String?)
Parses and validates a form string input according to a FieldMeta specification.
parseRelationValue(RelationMeta relation, String? raw) → (dynamic, String?)
Parses and validates a form string input for a relation foreign key.
rowsToCsv(List<String> columns, List<List<String>> rows) String
Formats changelist columns headers and rows data into a standard CSV string.
saveChangelistView({required BloomRequest request, required BloomModelAdmin<Model> admin, required DbExecutor db, required AdminCsrf csrf}) Future<BloomResponse>
HTTP POST handler for saving multi-row inline edits from the changelist table.
urlEncodeQueryValue(String s) String
Percent-encodes a value for query parameters.