user_identity_feature 0.0.3
user_identity_feature: ^0.0.3 copied to clipboard
MyCS user authentication, registration and profile management feature module
example/lib/main.dart
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:window_manager/window_manager.dart';
import 'package:logging/logging.dart';
import 'package:get_it/get_it.dart';
import 'package:amplify_flutter/amplify_flutter.dart';
import 'package:amplify_auth_cognito/amplify_auth_cognito.dart';
import 'package:utilities_ab/logging/init_logging.dart';
import 'package:platform_utilities_component/platform_utilities.dart';
import 'package:nav_layouts_component/nav_layouts.dart';
import 'package:identity_service/identity_service.dart' as identity;
import 'aws_amplify_config.dart';
import 'config/app_config.dart';
import 'screens/home_page.dart';
import 'screens/login_view_flow.dart';
import 'package:user_identity_feature/user_auth_feature.dart';
void main() async {
initLogging(
Level.ALL,
logToConsole: true,
);
// On Desktop platforms the minimum size
// of the window is fixed at 240x400
if (!AppPlatform.isWeb && !AppPlatform.isMobile) {
WidgetsFlutterBinding.ensureInitialized();
await windowManager.ensureInitialized();
WindowManager.instance.setMinimumSize(AppConfig.minWindowSize);
WindowManager.instance.setTitle(AppConfig.title);
}
// Initialize Amplify
await _configureAmplify();
AppPlatform.init().then(
(_) => runApp(
StatefulWrapper(
onInit: () {
GetIt.instance.registerLazySingleton<identity.Provider>(
() {
return identity.AWSProvider();
},
);
},
onDespose: () {
GetIt.instance.unregister<identity.Provider>(
disposingFunction: (service) async => await service.dispose(),
);
},
child: MainApp(),
),
),
);
}
class MainApp extends StatelessWidget {
late final AuthRouter _authRouter;
MainApp({super.key}) {
_authRouter = AuthRouter(
navigatorKey: GlobalNavigator.key,
initialLocation: '/',
authRoute: LoginViewFlow(),
publicRoutes: [
const HomePage().route(),
],
privateRoutes: [],
);
}
@override
Widget build(BuildContext context) {
AppPlatform.initOnBuild(context);
if (AppPlatform.isDesktop && Platform.isMacOS) {
// On macOS a system menu is a required part of every application
final List<PlatformMenuItem> menus = <PlatformMenuItem>[
PlatformMenu(
label: '', // In macOS the application name is shown in the menu bar
menus: <PlatformMenuItem>[
PlatformMenuItemGroup(
members: <PlatformMenuItem>[
PlatformMenuItem(
label: 'About',
onSelected: () {
showAboutDialog(
context: context,
applicationName: AppConfig.title,
applicationVersion: AppConfig.version,
);
},
),
],
),
if (PlatformProvidedMenuItem.hasMenu(
PlatformProvidedMenuItemType.quit))
const PlatformProvidedMenuItem(
type: PlatformProvidedMenuItemType.quit),
],
),
];
WidgetsBinding.instance.platformMenuDelegate.setMenus(menus);
}
return AuthScope(
auth: GetIt.instance.get<identity.Provider>(),
app: MaterialApp.router(
debugShowCheckedModeBanner: false,
title: AppConfig.title,
localizationsDelegates: const [
UserIdentityLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: const [
Locale('en'), // English
],
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(
seedColor: Colors.indigo,
),
useMaterial3: false,
),
darkTheme: ThemeData(
colorScheme: ColorScheme.fromSeed(
brightness: Brightness.dark,
seedColor: Colors.indigo,
),
useMaterial3: false,
),
routerConfig: _authRouter.config,
),
);
}
}
Future<void> _configureAmplify() async {
// Add any Amplify plugins you want to use
final authPlugin = AmplifyAuthCognito();
await Amplify.addPlugin(authPlugin);
// You can use addPlugins if you are going to be adding multiple plugins
// await Amplify.addPlugins([authPlugin, analyticsPlugin]);
// Once Plugins are added, configure Amplify
// Note: Amplify can only be configured once.
try {
await Amplify.configure(amplifyconfig);
} on AmplifyAlreadyConfiguredException {
safePrint(
"Tried to reconfigure Amplify; this can occur when your app restarts on Android.");
}
}