masamune_module_simpleblog 2.2.0
masamune_module_simpleblog: ^2.2.0 copied to clipboard
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,
);
}