I'm trying to save the tasks between the app restarts but I get the following error:
Exception in thread Thread-24 (add_clicked):
ValueError: Circular reference detected
Then the next restart I get this:
'dict' object has no attribute '_build_add_commands'
PD: in the first try it let me add only 1 task. The error comes when a create the second task.
Here is my code:
import flet as ft
def main(page: ft.Page):
page.window_width = 400
page.window_height = 600
page.bgcolor = "#141414"
page.window_center()
rows = list()
#BARRA SUPERIOR
page.appbar = ft.AppBar(bgcolor= "#303030",
leading=ft.Icon(ft.icons.CHECKLIST),
title= ft.Text("Tareas", font_family="Roboto"))
def add_clicked(e):
#SI TAREA NO ESTA VACIA
if(new_task.value != ""):
#FUNCION BORRAR
def clear(e):
#BORRA DE LA LISTA
rows.remove(row)
page.update()
#VARIABLES CHECKBOX, TAREA Y BOTON DE BORRAR
checkbox = ft.Checkbox()
task = ft.Text(value=new_task.value, width=258)
remove = ft.IconButton(icon="remove_circle", icon_size="32", icon_color="#D05050", on_click=clear)
#FILA QUE CONTIENE LAS 3 VARIABLES
row = (ft.Row(controls=[
checkbox,
task,
remove
]))
#AÑADE UNA TAREA A TAREAS
rows.append(row)
print(rows)
page.client_storage.set("tasks", rows)
#ACTUALIZA LA PAGINA
page.update()
#TAREA ESTA VACIA
new_task.value = ""
new_task.update()
#BORRAR TODAS LAS TAREAS
def clearall(e):
rows.clear()
page.update()
print(len(rows))
#VARIABLE TAREA
new_task = ft.TextField(hint_text="Agregar tarea", width=300)
#TAREA Y BOTON AGREGAR TAREA
page.add(ft.Row(
[new_task, ft.FloatingActionButton(icon="add", on_click=add_clicked, bgcolor="#4B90BE", scale=0.95)
]))
#BOTON BORRAR TODAS LAS TAREAS
page.add(ft.FloatingActionButton(icon=ft.icons.CLEANING_SERVICES_ROUNDED, on_click=clearall, bgcolor="#4B90BE", scale=0.95))
savedtasks = page.client_storage.get("tasks")
page.add(ft.Column(savedtasks))
page.add(ft.Column(rows))
ft.app(target=main)
I tried several times saving the tasks individually, saving the checkbox status, the task text and the remove task button separately or saving those 3 in a different variable "list".
An example of a similar application for working with client_storage
pay attention to the use of
dataalso, using
data, you can delete only what you need using events