kingame21/BioTech.ai
0
1import flet as ft2 3from state import AppState4from config import CYAN, TEXT_MAIN, TEXT_GREY, BG_CARD, BG_RESALT, BORDER5from auth import login_user, register_user6 7SP_UID = "biomech.user_id"8SP_USER = "biomech.username"9 10 11def show_login(page: ft.Page, state: AppState, content_area: ft.Container, *, on_success=None):12 remember = ft.Checkbox(label="Resta connesso", value=True)13 14 username = ft.TextField(15 label="Username",16 hint_text="es: mario",17 bgcolor=BG_RESALT,18 color=TEXT_MAIN,19 border_color=BORDER,20 autocorrect=False,21 )22 23 pin = ft.TextField(24 label="PIN (min 4)",25 hint_text="****",26 password=True,27 can_reveal_password=True,28 bgcolor=BG_RESALT,29 color=TEXT_MAIN,30 border_color=BORDER,31 keyboard_type=ft.KeyboardType.NUMBER,32 )33 34 msg = ft.Text("", size=12, color=ft.Colors.RED_700)35 36 async def _persist_session(uid: str, user: str):37 try:38 sp = ft.SharedPreferences(page)39 if remember.value:40 await sp.set(SP_UID, str(uid))41 await sp.set(SP_USER, str(user))42 else:43 await sp.remove(SP_UID)44 await sp.remove(SP_USER)45 except Exception as ex:46 print(f"[WARN] SharedPreferences error: {ex}")47 48 async def do_login(e=None):49 msg.value = ""50 u = (username.value or "").strip()51 p = (pin.value or "").strip()52 53 if not u or not p:54 msg.value = "Inserisci username e PIN."55 page.update()56 return57 58 uid = login_user(u, p)59 if not uid:60 msg.value = "Credenziali errate."61 page.update()62 return63 64 state.username = u.lower()65 state.user_id = str(uid)66 67 await _persist_session(state.user_id, state.username)68 69 if callable(on_success):70 on_success()71 page.update()72 73 async def do_register(e=None):74 msg.value = ""75 u = (username.value or "").strip()76 p = (pin.value or "").strip()77 78 if not u or not p:79 msg.value = "Inserisci username e PIN."80 page.update()81 return82 83 try:84 uid = register_user(u, p)85 except Exception as ex:86 msg.value = str(ex)87 page.update()88 return89 90 state.username = u.lower()91 state.user_id = str(uid)92 93 await _persist_session(state.user_id, state.username)94 95 if callable(on_success):96 on_success()97 page.update()98 99 content_area.content = ft.Column(100 [101 ft.Container(height=30),102 ft.Text("BIOMECH AI", size=30, weight="bold", color=TEXT_MAIN),103 ft.Text("Accedi o crea un account", size=12, color=TEXT_GREY),104 ft.Container(height=16),105 ft.Container(106 content=ft.Column(107 [108 username,109 pin,110 remember,111 msg,112 ft.Row(113 [114 ft.FilledButton(115 "ACCEDI",116 on_click=do_login,117 style=ft.ButtonStyle(bgcolor=CYAN, color="white"),118 ),119 ft.OutlinedButton(120 "REGISTRATI",121 on_click=do_register,122 style=ft.ButtonStyle(color=TEXT_MAIN, side=ft.BorderSide(1, BORDER)),123 ),124 ],125 alignment=ft.MainAxisAlignment.CENTER,126 spacing=12,127 ),128 ],129 spacing=12,130 ),131 padding=20,132 bgcolor=BG_CARD,133 border_radius=16,134 border=ft.Border.all(1, BORDER),135 width=360,136 ),137 ],138 horizontal_alignment=ft.CrossAxisAlignment.CENTER,139 spacing=10,140 )141 page.update()