import 'package:dynamic_sdk/dynamic_sdk.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
DynamicSDK.init(
props: ClientProps(
environmentId: 'your-environment-id',
appLogoUrl: 'https://your-app.com/logo.png',
appName: 'Your App',
),
);
runApp(
ChangeNotifierProvider(
create: (_) => SessionManager(),
child: const MyApp(),
),
);
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Dynamic App',
home: Stack(
children: [
const AppContent(),
DynamicSDK.instance.dynamicWidget,
],
),
);
}
}
class AppContent extends StatelessWidget {
const AppContent({super.key});
@override
Widget build(BuildContext context) {
return Consumer<SessionManager>(
builder: (context, session, child) {
if (session.isLoading) {
return const LoadingView();
}
if (session.isAuthenticated) {
return MainAppView(
user: session.user,
wallets: session.wallets,
);
}
return const LoginView();
},
);
}
}
class MainAppView extends StatelessWidget {
final dynamic user;
final List<BaseWallet> wallets;
const MainAppView({
super.key,
required this.user,
required this.wallets,
});
@override
Widget build(BuildContext context) {
final session = context.read<SessionManager>();
return Scaffold(
appBar: AppBar(
title: const Text('My App'),
actions: [
IconButton(
icon: const Icon(Icons.account_circle),
onPressed: () {
DynamicSDK.instance.ui.showUserProfile();
},
),
IconButton(
icon: const Icon(Icons.logout),
onPressed: () async {
await session.logout();
},
),
],
),
body: Column(
children: [
if (user != null)
Padding(
padding: const EdgeInsets.all(16.0),
child: Text('Welcome, ${user.email ?? "User"}!'),
),
if (wallets.isNotEmpty)
Expanded(
child: ListView.builder(
itemCount: wallets.length,
itemBuilder: (context, index) {
final wallet = wallets[index];
return ListTile(
title: Text(wallet.address),
subtitle: Text('Chain: ${wallet.chain}'),
);
},
),
),
],
),
);
}
}