import flet as ft from utils import AppView, Title from .functions import Theme, config def Settings(page: ft.Page): settingsContainer = ft.ListView( expand=True, ) settingsContainer.controls.append(ft.Text('General')) def _on_name_change(e: ft.ControlEvent): newName = ft.CupertinoTextField(value=config.get('general', 'name')) dlg = ft.CupertinoAlertDialog( modal=True, title=ft.Text('Enter your Full name'), content=newName, actions=[ ft.CupertinoButton( 'Save', on_click=lambda _: ( setattr( dlg, 'open', False, ), config.save( 'general', 'name', newName.value, ), page.update(), ), ), ft.CupertinoButton( 'Close', on_click=lambda _: ( setattr(dlg, 'open', False), page.update(), ), ), ], ) page.dialog = dlg dlg.open = True page.update() def _on_phone_change(e: ft.ControlEvent): newPhone = ft.CupertinoTextField(value=config.get('general', 'phone')) dlg = ft.CupertinoAlertDialog( modal=True, title=ft.Text('Enter your Mobile'), content=newPhone, actions=[ ft.CupertinoButton( 'Save', on_click=lambda _: ( setattr( dlg, 'open', False, ), config.save( 'general', 'phone', newPhone.value, ), page.update(), ), ), ft.CupertinoButton( 'Close', on_click=lambda _: ( setattr(dlg, 'open', False), page.update(), ), ), ], ) page.dialog = dlg dlg.open = True page.update() def _on_email_change(e: ft.ControlEvent): newEmail = ft.CupertinoTextField(value=config.get('general', 'email')) dlg = ft.CupertinoAlertDialog( modal=True, title=ft.Text('Enter your Email'), content=newEmail, actions=[ ft.CupertinoButton( 'Save', on_click=lambda _: ( setattr( dlg, 'open', False, ), config.save( 'general', 'email', newEmail.value, ), page.update(), ), ), ft.CupertinoButton( 'Close', on_click=lambda _: ( setattr(dlg, 'open', False), page.update(), ), ), ], ) page.dialog = dlg dlg.open = True page.update() def _on_nid_change(e: ft.ControlEvent): newNID = ft.CupertinoTextField(value=config.get('general', 'nid')) dlg = ft.CupertinoAlertDialog( modal=True, title=ft.Text('Enter your NID'), content=newNID, actions=[ ft.CupertinoButton( 'Save', on_click=lambda _: ( setattr( dlg, 'open', False, ), config.save( 'general', 'nid', newNID.value, ), page.update(), ), ), ft.CupertinoButton( 'Close', on_click=lambda _: ( setattr(dlg, 'open', False), page.update(), ), ), ], ) page.dialog = dlg dlg.open = True page.update() generalSettings = ft.Container( content=ft.Column( controls=[ ft.Card( content=ft.Container( ink=True, content=ft.Column( [ ft.ListTile( leading=ft.Icon(ft.icons.PERSON), title=ft.Text('Username'), subtitle=ft.Text( 'The greeting message', ), ), ], ), padding=10, on_click=_on_name_change, ), ), ft.Card( content=ft.Container( ink=True, content=ft.Column( [ ft.ListTile( leading=ft.Icon(ft.icons.PHONE), title=ft.Text('Phone'), subtitle=ft.Text( 'Personal Phone number', ), ), ], ), padding=10, on_click=_on_phone_change, ), ), ft.Card( content=ft.Container( ink=True, content=ft.Column( [ ft.ListTile( leading=ft.Icon(ft.icons.EMAIL), title=ft.Text('Email'), subtitle=ft.Text( 'Personal Email', ), ), ], ), padding=10, on_click=_on_email_change, ), ), ft.Card( content=ft.Container( ink=True, content=ft.Column( [ ft.ListTile( leading=ft.Icon(ft.icons.CARD_TRAVEL), title=ft.Text('NID'), subtitle=ft.Text( 'National Idenity Number', ), ), ], ), padding=10, on_click=_on_nid_change, ), ), ], ), ) settingsContainer.controls.append( generalSettings, ) # settingsContainer.controls.append(ft.Divider()) # settingsContainer.controls.append(ft.Text('Notifications')) # notificationsSettings = ft.Container( # content=ft.Column( # controls=[ # ft.Card( # content=ft.Container( # ink=True, # content=ft.Column( # [ # ft.ListTile( # leading=ft.Icon(ft.icons.TELEGRAM), # title=ft.Text('Telegram'), # subtitle=ft.Text( # 'Telegram Notifications for reminders and Bill pays', # ), # ), # ], # ), # padding=10, # on_click=lambda _: print('clicked username'), # ), # ), # ], # ), # ) # settingsContainer.controls.append( # notificationsSettings, # ) settingsContainer.controls.append(ft.Divider()) settingsContainer.controls.append(ft.Text('Apps')) appsSettings = ft.Container( content=ft.Column( controls=[ ft.Card( content=ft.Container( ink=True, content=ft.Column( [ ft.ListTile( leading=ft.Image( border_radius=ft.border_radius.all(10), fit=ft.ImageFit.CONTAIN, src='https://asset.brandfetch.io/idZJsIaold/id9-VJM_HU.png', ), title=ft.Text('Dhiraagu'), subtitle=ft.Text( 'An ISP Service.', ), ), ], ), padding=10, on_click=lambda _: page.go('/settings/dhiraagu'), ), ), ft.Card( content=ft.Container( ink=True, content=ft.Column( [ ft.ListTile( leading=ft.Image( border_radius=ft.border_radius.all(10), fit=ft.ImageFit.CONTAIN, src='https://asset.brandfetch.io/idR1xFKHLD/idu6J-WQsm.jpeg', ), title=ft.Text('Ooredoo'), subtitle=ft.Text( 'An ISP Service.', ), ), ], ), padding=10, on_click=lambda _: page.go('/settings/ooredoo'), ), ), ft.Card( content=ft.Container( ink=True, content=ft.Column( [ ft.ListTile( leading=ft.Image( border_radius=ft.border_radius.all(10), fit=ft.ImageFit.CONTAIN, src='https://www.stelco.com.mv/wp-content/uploads/2022/02/unnamed.png', ), title=ft.Text('STELCO'), subtitle=ft.Text( 'Electricity Bills', ), ), ], ), padding=10, on_click=lambda _: page.go('/settings/stelco'), ), ), ft.Card( content=ft.Container( ink=True, content=ft.Column( [ ft.ListTile( leading=ft.Image( border_radius=ft.border_radius.all(10), fit=ft.ImageFit.CONTAIN, src='https://asset.brandfetch.io/idOZWUOUm-/idNastd9Bg.jpeg', ), title=ft.Text('MWSC'), subtitle=ft.Text( 'Water Bills', ), ), ], ), padding=10, on_click=lambda _: page.go('/settings/mwsc'), ), ), ft.Card( content=ft.Container( ink=True, content=ft.Column( [ ft.ListTile( leading=ft.Image( border_radius=ft.border_radius.all(10), fit=ft.ImageFit.CONTAIN, src='https://asset.brandfetch.io/idLMZnv5SC/iduyX4keYN.jpeg', ), title=ft.Text('Medianet'), subtitle=ft.Text( 'Online Television Service', ), ), ], ), padding=10, on_click=lambda _: page.go('/settings/medianet'), ), ), ], ), ) settingsContainer.controls.append(appsSettings) settingsContainer.controls.append(ft.Divider()) settingsContainer.controls.append(ft.Text('Theme')) def _on_theme_change(e: ft.ControlEvent): if page.theme_mode == ft.ThemeMode.LIGHT: e.value = False config.save('general', 'theme', 'dark') else: e.value = True config.save('general', 'theme', 'light') Theme(page).change( ( ft.ThemeMode.DARK if page.theme_mode == ft.ThemeMode.LIGHT else ft.ThemeMode.LIGHT ), ) themeSettings = ft.Container( content=ft.Column( controls=[ ft.Card( content=ft.Container( content=ft.Container( ft.Switch( label=' Switch to dark theme', on_change=_on_theme_change, value=True, ), ), padding=10, on_click=None, ), ), ], ), ) settingsContainer.controls.append(themeSettings) return AppView( '/settings', [ ft.AppBar( leading=ft.IconButton( ft.icons.ARROW_BACK_IOS_NEW_ROUNDED, on_click=lambda _: page.go('/'), ), title=ft.Text(Title(str(__file__))), bgcolor=ft.colors.TRANSPARENT, ), settingsContainer, ], )