Desenvolva Um Aplicativo Com IONIC e React Que Pos
Desenvolva Um Aplicativo Com IONIC e React Que Pos
possua as funcionalidades:
Login de usuário (opcional)
Página inicial com menu
Cadastro de disciplinas (basta nome e semestre)
Checkbox com disciplinas para aluno escolher
Lista exibindo disciplinas escolhidas
Cada funcionalidade deve ser desenvolvida em uma tela própria. NÃO UTILIZE TEMPLATES.
USE A OPÇÃO BLANK.
|Esse projeto deve usar checkbox e navegação de menu
Segue um guia completo para criar do zero (blank) um app Ionic + React com as telas e
funcionalidades que você pediu:
1. Criação do projeto
1. Instale o Ionic CLI (se ainda não tiver):
npm install -g @ionic/cli
3. Entre na pasta:
cd disciplina-app
2. Estrutura de diretórios
Dentro de src/ vamos criar:
contexts/
DataContext.tsx
pages/
Login.tsx
Home.tsx
Register.tsx
Select.tsx
List.tsx
App.tsx (ajustado para nossas rotas)
3. Contexto de dados
Crie src/contexts/DataContext.tsx:
return (
<DataContext.Provider value={{
disciplines,
selected,
addDiscipline,
setSelected
}}>
{children}
</DataContext.Provider>
);
};
4. Configurando as rotas em App.tsx
Substitua o conteúdo de src/App.tsx por:
import {
IonPage, IonHeader, IonToolbar, IonTitle,
IonContent, IonInput, IonButton, IonItem, IonLabel
} from '@ionic/react';
import React, { useState } from 'react';
import { useHistory } from 'react-router';
return (
<IonPage>
<IonHeader>
<IonToolbar>
<IonTitle>Login</IonTitle>
</IonToolbar>
</IonHeader>
<IonContent className="ion-padding">
<IonItem>
<IonLabel position="stacked">Usuário</IonLabel>
<IonInput
value={username}
onIonChange={e => setUsername(e.detail.value!)}
placeholder="Digite seu usuário"
/>
</IonItem>
<IonButton
expand="block"
className="ion-margin-top"
onClick={handleLogin}
>
Entrar
</IonButton>
</IonContent>
</IonPage>
);
};
import {
IonPage, IonHeader, IonToolbar, IonTitle,
IonContent, IonButton
} from '@ionic/react';
import React from 'react';
import { useHistory } from 'react-router';
import {
IonPage, IonHeader, IonToolbar, IonTitle,
IonContent, IonItem, IonLabel, IonInput,
IonButton, IonToast
} from '@ionic/react';
import React, { useState, useContext } from 'react';
import { useHistory } from 'react-router';
import { DataContext } from '../contexts/DataContext';
return (
<IonPage>
<IonHeader>
<IonToolbar>
<IonTitle>Cadastro</IonTitle>
</IonToolbar>
</IonHeader>
<IonContent className="ion-padding">
<IonItem>
<IonLabel position="stacked">Nome</IonLabel>
<IonInput
value={name}
onIonChange={e => setName(e.detail.value!)}
/>
</IonItem>
<IonItem className="ion-margin-top">
<IonLabel position="stacked">Semestre</IonLabel>
<IonInput
value={semester}
onIonChange={e => setSem(e.detail.value!)}
/>
</IonItem>
<IonButton
expand="block"
className="ion-margin-top"
onClick={handleSave}
>
Salvar
</IonButton>
<IonToast
isOpen={showToast}
message="Disciplina cadastrada!"
duration={800}
onDidDismiss={() => setShow(false)}
/>
</IonContent>
</IonPage>
);
};
import {
IonPage, IonHeader, IonToolbar, IonTitle,
IonContent, IonList, IonItem, IonLabel,
IonCheckbox, IonButton, IonToast
} from '@ionic/react';
import React, { useContext, useState } from 'react';
import { useHistory } from 'react-router';
import { DataContext, Discipline } from '../contexts/DataContext';
return (
<IonPage>
<IonHeader>
<IonToolbar>
<IonTitle>Selecionar</IonTitle>
</IonToolbar>
</IonHeader>
<IonContent>
<IonList>
{disciplines.map((d, i) => (
<IonItem key={i}>
<IonLabel>
{d.name} ({d.semester})
</IonLabel>
<IonCheckbox
slot="end"
checked={!!checkedMap[i]}
onIonChange={() => toggle(i)}
/>
</IonItem>
))}
</IonList>
<IonButton
expand="block"
className="ion-margin"
onClick={confirm}
>
Confirmar Seleção
</IonButton>
<IonToast
isOpen={showToast}
message="Seleção salva!"
duration={800}
onDidDismiss={() => setShow(false)}
/>
</IonContent>
</IonPage>
);
};
import {
IonPage, IonHeader, IonToolbar, IonTitle,
IonContent, IonList, IonItem, IonLabel
} from '@ionic/react';
import React, { useContext } from 'react';
import { DataContext } from '../contexts/DataContext';
return (
<IonPage>
<IonHeader>
<IonToolbar>
<IonTitle>Disciplinas Escolhidas</IonTitle>
</IonToolbar>
</IonHeader>
<IonContent>
<IonList>
{selected.length === 0 && (
<IonItem>
<IonLabel>Nenhuma disciplina selecionada</IonLabel>
</IonItem>
)}
{selected.map((d, i) => (
<IonItem key={i}>
<IonLabel>
{d.name} ({d.semester})
</IonLabel>
</IonItem>
))}
</IonList>
</IonContent>
</IonPage>
);
};