masamune_module_simpleblog 2.2.0 copy "masamune_module_simpleblog: ^2.2.0" to clipboard
masamune_module_simpleblog: ^2.2.0 copied to clipboard

discontinued

masamune_module for creating simple blogs.

example/lib/main.dart

// Flutter imports:
import 'package:flutter/material.dart';

// Package imports:
import 'package:katana_auth_firebase/katana_auth_firebase.dart';
import 'package:katana_model_firestore/katana_model_firestore.dart';
import 'package:katana_storage_firebase/adapter/web/web.dart';
import 'package:masamune/masamune.dart';
import 'package:masamune_auth_apple/masamune_auth_apple.dart';
import 'package:masamune_auth_google/masamune_auth_google.dart';
import 'package:masamune_module_simpleblog/boot.dart';
import 'package:masamune_module_simpleblog/masamune_module_simpleblog.dart';
import 'package:masamune_module_simpleblog/pages/index.dart';
import 'package:masamune_picker/masamune_picker.dart';
import 'package:masamune_universal_ui/masamune_universal_ui.dart';

// Project imports:
import 'package:simpleblog/firebase_options.dart';

part 'main.theme.dart';
part 'main.localize.dart';

final picker = Picker();

/// [ModuleMasamuneAdapter] for applications.
// TODO: Please configure the module.
final appModule = MasamuneModuleSimpleblogMasamuneAdapter(
  title: const LocalizedValue([
    LocalizedLocaleValue(Locale("en"), "Simple Blog"),
  ]),
  theme: theme,
  appRef: appRef,
  auth: appAuth,
  router: router,
  localize: l,
  option: MasamuneModuleSimpleblogModuleOptions(
    logoImage: const ModelImageUri.parse("assets/icon.png"),
    onPickerSelected: () async {
      final picked = await picker.pickSingle(type: PickerFileType.image);
      if (picked.isEmpty) {
        return null;
      }
      return await picked.upload();
    },
    onGoogleSignIn: (auth) async {
      await auth.signIn(const GoogleSignInAuthProvider());
    },
    onAppleSignIn: (auth) async {
      await auth.signIn(const AppleSignInAuthProvider());
    },
  ),
);

/// App Title.
// TODO: Define the title of the application.
const title = "";

/// Initial page query.
// TODO: Define the initial page query of the application.
final initialQuery = IndexPage.query();

/// App Model.
///
/// By replacing this with another adapter, the data storage location can be changed.
// TODO: Change the database.
final modelAdapter = FirestoreModelAdapter(
  options: DefaultFirebaseOptions.currentPlatform,
);

/// App Auth.
///
/// Changing to another adapter allows you to change to another authentication mechanism.
// TODO: Change the authentication.
final authAdapter = FirebaseAuthAdapter(
  options: DefaultFirebaseOptions.currentPlatform,
);

/// App Storage.
///
/// Changing to another adapter allows you to change to another storage mechanism.
// TODO: Change the storage.
final storageAdapter = FirebaseStorageAdapter(
  options: DefaultFirebaseOptions.currentPlatform,
);

/// App Functions.
///
/// Changing to another adapter allows you to change to another functions mechanism.
// TODO: Change the functions.
const functionsAdapter = RuntimeFunctionsAdapter();

/// Logger adapter list.
///
/// Adapters for logging can be defined here.
// TODO: Change the loggers.
final loggerAdapters = <LoggerAdapter>[
  const ConsoleLoggerAdapter(),
];

/// Masamune adapter.
///
/// The Masamune framework plugin functions can be defined together.
// TODO: Add the adapters.
final masamuneAdapters = <MasamuneAdapter>[
  appModule,
  const UniversalMasamuneAdapter(),
  const UniversalMasamuneAdapter(),
  const PickerMasamuneAdapter(),
];

/// App Theme.
///
/// ```dart
/// theme.color.primary   // Primary color.
/// theme.text.bodyMedium // Medium body text style.
/// theme.asset.xxx       // xxx image.
/// theme.font.xxx        // xxx font.
/// ```
@appTheme
final theme = AppThemeData(
  // TODO: Set the design.
  primary: Colors.blue,
  secondary: Colors.cyan,
  onPrimary: Colors.white,
  onSecondary: Colors.white,
);

/// App Router.
///
/// ```dart
/// router.push(Page.query());  // Push page to Page.
/// router.pop();               // Pop page.
/// ```
final router = AppRouter(
  boot: const Boot(),
  initialQuery: initialQuery,
  redirect: [],
  pages: [],
);

/// App Localization.
///
/// ```dart
/// l().xxx  // Localization for xxx.
/// ```
final l = AppLocalize();

@GoogleSpreadSheetLocalize(
  "https://docs.google.com/spreadsheets/d/1bw7IXEr7BGkZ4U6on0OuF7HQkTMgDSm6u5ThpBkDPeo/edit#gid=551986808",
  version: 1,
)
class AppLocalize extends _$AppLocalize {}

/// App Ref.
///
/// ```dart
/// appRef.controller(Controller.query()); // Get a controller.
/// appRef.model(Model.query());           // Get a model.
/// ```
final appRef = AppRef();

/// App authentication.
///
/// ```dart
/// appAuth.signIn(
///   EmailAndPasswordSignInAuthProvider(
///     email: email,
///     password: password,
///   ),
/// );
/// ```
final appAuth = Authentication();

/// App server functions.
///
/// It is used in conjunction with the server side.
///
/// ```dart
/// appFunction.notification(
///   title: "Notification",
///   text: "Notification text",
///   target: "Topic",
/// );
/// ```
final appFunction = Functions();

/// App logger.
///
/// Used to obtain and send logs.
///
/// ```
/// appLogger.send(
///   AnalyticsValue(
///     userId: "user id",
///   )
/// );
/// ```
final appLogger = Logger();

/// App Flavor.
const flavor = String.fromEnvironment("FLAVOR");

/// App.
void main() {
  runMasamuneApp(
    (adapters) => MasamuneApp(
      title: title,
      appRef: appRef,
      theme: theme,
      routerConfig: router,
      localize: l,
      authAdapter: authAdapter,
      modelAdapter: modelAdapter,
      storageAdapter: storageAdapter,
      functionsAdapter: functionsAdapter,
      loggerAdapters: loggerAdapters,
      masamuneAdapters: adapters,
    ),
    masamuneAdapters: masamuneAdapters,
  );
}