Setting AmityCoreClient.setup
in main.dart
Below: main.dart
import 'package:amity_sdk/amity_sdk.dart';
import 'package:app/bindings/root_bindings.dart';
import 'package:app/logger.dart';
import 'package:app/constants/app_theme.dart';
import 'package:app/routes.dart';
import 'package:app/screens/onboarding/welcome_screen.dart';
import 'package:app/screens/root_screen.dart';
import 'package:app/services/notification_service.dart';
import 'package:app/screens/onboarding/onboarding_lock_screen1.dart';
import 'package:app/widgets/lock_screen_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter_portal/flutter_portal.dart';
import 'package:get/get.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:home_widget/home_widget.dart';
import 'package:upgrader/upgrader.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
try {
NotificationService().initNotification();
AppLogger.logInfo("Main Setup FlutterLocalNotificationsPlugin Initialized");
} catch (exception) {
AppLogger.logError(
"Main Setup FlutterLocalNotificationsPlugin error = ${exception.toString()}");
}
try {
await HomeWidget.setAppGroupId('group.imhome.lockscreen');
await HomeWidget.registerInteractivityCallback(interactiveCallback);
await HomeWidget.renderFlutterWidget(
const LockScreenWidget(),
key: 'lock_screen',
logicalSize: const Size(200, 200),
);
await HomeWidget.renderFlutterWidget(
const LockScreenWidget(),
key: 'lock_screen',
logicalSize: const Size(200, 200),
);
} catch (exception) {
AppLogger.logError("Main Setup HomeWidget error = ${exception.toString()}");
}
try {
await Firebase.initializeApp();
} catch (exception) {
AppLogger.logError("Main Setup Firebase error = ${exception.toString()}");
}
try {
// Register an Interactivity Callback. It is necessary that this method is static and public
// OneSignal.initialize("ffb70490-5aca-462a-9d51-58adf0dfc2cd");
// OneSignal.Debug.setLogLevel(OSLogLevel.verbose);
await AmityCoreClient.setup(
option: AmityCoreClientOption(
apiKey: 'b0e9be5d39d3f76d1d3fdc1f000a4481d50f84e5b9316a2f',
httpEndpoint: AmityRegionalHttpEndpoint.US,
),
sycInitialization: true,
);
// final imgProvider = AssetImage(screenshot);
// await precacheImage(imgProvider, context);
} catch (exception) {
AppLogger.logError("Main Setup error = ${exception.toString()}");
}
AppLogger.logInfo("Main Setup completed");
runApp(const ImHomeApp());
}
/// Callback invoked by HomeWidget Plugin when performing interactive actions
/// The @pragma('vm:entry-point') Notification is required so that the Plugin can find it
@pragma('vm:entry-point')
Future<void> interactiveCallback(Uri? uri) async {
// Set AppGroup Id. This is needed for iOS Apps to talk to their WidgetExtensions
await HomeWidget.setAppGroupId('group.imhome.lockscreen');
// We check the host of the uri to determine which action should be triggered.
// if (uri?.host == 'increment') {
// await _increment();
// } else if (uri?.host == 'clear') {
// await _clear();
// }
}
class ImHomeApp extends StatelessWidget {
const ImHomeApp({super.key});
@override
Widget build(BuildContext context) {
return Portal(
child: GetMaterialApp(
debugShowCheckedModeBanner: false,
title: 'AtHome Moments',
theme: AppTheme.darkTheme, // Apply the darkTheme from AppTheme
home: const RootScreen(),
initialBinding: RootBinding(),
getPages: routes,
),
);
}
}
Calling AmityCoreClient.login in RootScreen
userSerive.createUser → AmityCoreClient.login
import 'package:app/services/amity/user_service.dart';
import 'package:app/screens/onboarding/onboarding_lock_screen1.dart';
import 'package:app/widgets/lock_screen_widget.dart';
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:app/screens/home/camera_screen.dart';
import 'package:app/screens/legal/privacy_policy_screen.dart';
import 'package:app/screens/onboarding/welcome_screen.dart';
import 'package:app/logger.dart';
import 'package:app/services/hive_service.dart';
import 'package:get/get.dart';
import 'package:home_widget/home_widget.dart';
class RootScreen extends StatefulWidget {
const RootScreen({Key? key}) : super(key: key);
@override
_RootScreenState createState() => _RootScreenState();
}
class _RootScreenState extends State<RootScreen> {
final UserService userService = Get.find<UserService>();
@override
void initState() {
super.initState();
HomeWidget.widgetClicked.listen(_launchedFromWidget);
_renderLockscreenWidget();
HiveService.init();
}
void _launchedFromWidget(Uri? uri) {
AppLogger.logInfo('CameraScreen: Launched from widget');
}
Future<Widget> determineStartScreen() async {
if (FirebaseAuth.instance.currentUser == null) {
return const WelcomeScreen();
}
try {
final userData = await userService.fetchUserProfileData();
if (userData?.username == null) {
AppLogger.logInfo('RootScreen: User does not have a username');
return const WelcomeScreen();
} else {
// Assuming createUser is an asynchronous operation
await userService
.createUser(FirebaseAuth.instance.currentUser!.phoneNumber!);
AppLogger.logInfo('RootScreen: User logged in successfully');
return const CameraScreen();
}
} catch (exception) {
AppLogger.logError('RootScreen: Error: $exception');
return const WelcomeScreen();
}
}
Future<void> _renderLockscreenWidget() async {
await HomeWidget.renderFlutterWidget(
const LockScreenWidget(),
key: 'lock_screen',
logicalSize: const Size(100, 100),
);
}
@override
Widget build(BuildContext context) {
return FutureBuilder<Widget>(
future: determineStartScreen(),
builder: (BuildContext context, AsyncSnapshot<Widget> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Scaffold(
body: Center(child: CircularProgressIndicator()));
} else if (snapshot.hasError) {
return Scaffold(
body: Center(child: Text('Error: ${snapshot.error}')));
} else {
return snapshot.data!;
}
},
);
}
}
userSerive.createUser
method below:
Future<AmityUser> createUser(String userId, {String? dname}) async {
try {
AmityUser user;
if (dname != null) {
user = await AmityCoreClient.login(userId).displayName(dname).submit();
} else {
user = await AmityCoreClient.login(userId).submit();
}
userId = userId;
currentUser = user;
AppLogger.logInfo("Amity Create User = ${user.toString()}");
update();
return user;
} catch (exception) {
AppLogger.logError("Create User error = ${exception.toString()}");
throw Exception("Create User error = ${exception.toString()}");
}
}