NativeScript: ToDo App – Estrutura base

Voltando a estudar sobre NativeScript, resolvi fazer um aplicativo que usa algumas funcionalidades básicas que muitos aplicativos usam, como listview, campos de entrada, navegação e um banco de dados local.
A ideia é desenvolver um aplicativo de tarefas, o famoso ToDo.

Para criar o aplicativo é só executar o comando tns create [nome-aplicativo], como já escrevi em outros posts. A diferença, é que dessa vez será usado a flag ––ng, que criará um projeto com template de TypeScript e Angular.

Esse template já vem com um componente criado e as rotas configuradas.

Para o projeto, não vou usar o componente padrão, então você pode remover a pasta “item“. Consequentemente, terá que remover os imports do componente item nos arquivos app.module.ts e app.routing.ts.

O passo seguinte é organizar a estrutura de pastas e criar os componentes necessários.
Dentro da pasta app, eu crio duas outras: components e shared. Dentro de component ficaram os components e em shared eu separo em outras duas pastas, uma para entities e outra para services.

Dentro de /shared/entites fica a classe que representa a lista de tarefas (todo.ts)

Todo (todo.ts)

Na pasta /shared/services, tenho o serviço de ToDo e uma classe que eu chamei de db.ts, onde ficará a conexão com o banco de dados Sqlite local. A classe TodoService (todo.service.ts) terá os métodos getAll, get, add, update e remove.

Por enquanto, só para deixar a o aplicativo rodando com uma lista e navegação, os métodos retornarão dados fixos.

TodoService (todo.service.ts)

Com isso já podemos consumir os serviços para mostrar algumas coisas na tela.

Nesse ponto, dentro da pasta components, eu crio outra pasta chamada todo, onde vou deixar todos os componentes do todo em si: todo-add.component.tstodo-detail.component.tstodo-list.component.ts. Cada componente tem seus respectivos html’s todo-add.component.htmltodo-detail.component.htmltodo-list.component.html. O código para cada componente está no github.

Com os componentes e serviços criados, as rotas e os módulos já podem ser configurados corretamente. Todos os componentes e serviços que forem ficar disponíveis na aplicação, devem ser importadas no arquivo app.module.ts, no array declarations e providers do @NgModule.

As rotas podem ser criadas assim:

Veja que a primeira rota é só um redirecionamento para a rota de lista. A última é a rota de detalhes, onde é passado um parâmetro :id para o componente. Para isso funcionar, na listview eu adicionei um [nsRouterLink]=”[‘/detail’, item.id]”, que ao clicar, será enviado para essa rota passando o id do ToDo. No componente TodoDetailComponent, é usado a classe ActivatedRoute, que fica em @angular/router, para obter o parâmetro passado com this.route.snapshot.params[‘id‘].

Com os itens criados e configurados, o aplicativo já tem um formato:

O código desenvolvido até agora está no github. Para não deixar o post muito longo, vou deixar a outra parte do desenvolvimento em outro post.