import 'package:dynamic_color/dynamic_color.dart'; import 'package:flutter/material.dart'; import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:tstor_ui/api/client.dart'; import 'package:tstor_ui/screens/downloads.dart'; import 'package:tstor_ui/screens/file_view.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); // This widget is the root of your application. @override Widget build(BuildContext context) { return DynamicColorBuilder(builder: (ColorScheme? lightDynamic, ColorScheme? darkDynamic) { return MaterialApp( title: 'tStor', theme: lightDynamic != null ? ThemeData.from(colorScheme: lightDynamic) : ThemeData.light(), darkTheme: darkDynamic != null ? ThemeData.from(colorScheme: darkDynamic) : ThemeData.dark(), home: GraphQLProvider( client: ValueNotifier(client), child: const MyHomePage(), ), ); }); } } class MyHomePage extends StatefulWidget { const MyHomePage({super.key}); @override State createState() => _MyHomePageState(); } class _MyHomePageState extends State { int currentPageIndex = 0; @override Widget build(BuildContext context) { return Scaffold( body: [ const FileViewScreen(), const DownloadsScreen(), ][currentPageIndex], bottomNavigationBar: BottomNavigationBar( currentIndex: currentPageIndex, onTap: (i) => setState(() { currentPageIndex = i; }), items: const [ BottomNavigationBarItem( icon: Icon(Icons.folder_copy_outlined), activeIcon: Icon(Icons.folder_copy), label: 'Files', ), BottomNavigationBarItem( icon: Icon(Icons.download_outlined), activeIcon: Icon(Icons.download), label: 'Downloads', ), ], ), ); } } class NavigationExample extends StatefulWidget { const NavigationExample({super.key}); @override State createState() => _NavigationExampleState(); } class _NavigationExampleState extends State { int currentPageIndex = 0; @override Widget build(BuildContext context) { final ThemeData theme = Theme.of(context); return Scaffold( bottomNavigationBar: NavigationBar( onDestinationSelected: (int index) { setState(() { currentPageIndex = index; }); }, indicatorColor: Colors.amber, selectedIndex: currentPageIndex, destinations: const [ NavigationDestination( selectedIcon: Icon(Icons.home), icon: Icon(Icons.home_outlined), label: 'Home', ), NavigationDestination( icon: Badge(child: Icon(Icons.notifications_sharp)), label: 'Notifications', ), NavigationDestination( icon: Badge( label: Text('2'), child: Icon(Icons.messenger_sharp), ), label: 'Messages', ), ], ), body: [ /// Home page Card( shadowColor: Colors.transparent, margin: const EdgeInsets.all(8.0), child: SizedBox.expand( child: Center( child: Text( 'Home page', style: theme.textTheme.titleLarge, ), ), ), ), /// Notifications page const Padding( padding: EdgeInsets.all(8.0), child: Column( children: [ Card( child: ListTile( leading: Icon(Icons.notifications_sharp), title: Text('Notification 1'), subtitle: Text('This is a notification'), ), ), Card( child: ListTile( leading: Icon(Icons.notifications_sharp), title: Text('Notification 2'), subtitle: Text('This is a notification'), ), ), ], ), ), /// Messages page ListView.builder( reverse: true, itemCount: 2, itemBuilder: (BuildContext context, int index) { if (index == 0) { return Align( alignment: Alignment.centerRight, child: Container( margin: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0), decoration: BoxDecoration( color: theme.colorScheme.primary, borderRadius: BorderRadius.circular(8.0), ), child: Text( 'Hello', style: theme.textTheme.bodyLarge!.copyWith(color: theme.colorScheme.onPrimary), ), ), ); } return Align( alignment: Alignment.centerLeft, child: Container( margin: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0), decoration: BoxDecoration( color: theme.colorScheme.primary, borderRadius: BorderRadius.circular(8.0), ), child: Text( 'Hi!', style: theme.textTheme.bodyLarge!.copyWith(color: theme.colorScheme.onPrimary), ), ), ); }, ), ][currentPageIndex], ); } }