como puxar o index e a url de uma foto salva no firebase para quando o usuario relogar a foto apareça #190
-
Beta Was this translation helpful? Give feedback.
Replies: 4 comments 3 replies
-
OI @EnzoLuigiScarpa, Para colocar seu código aqui e facilitar a ajuda, coloque o texto do seu código e não imagem e envolva-o com três crases seguido da palavra dart na primeira linha e três crases na última linha, assim ele será formatado Exemplo: ```dart void main() { print('teste'); } ``` Ficará assim: void main() {
print('teste');
} Você precisa também dar mais detalhes do seu caso. Por exemplo se está retornando o índice da foto ou não, se gravou no banco corretamente, etc. |
Beta Was this translation helpful? Give feedback.
-
Ok amigo, irei especificar
Em ter, 30 de abr de 2024 16:07, Eduardo Florence ***@***.***>
escreveu:
… OI @EnzoLuigiScarpa <https://github.com/EnzoLuigiScarpa>,
Para colocar seu código aqui e facilitar a ajuda, coloque o texto do seu
código e não imagem e envolva-o com três crases seguido da palavra dart na
primeira linha e três crases na última linha, assim ele será formatado
Exemplo:
```dart
void main() {
print('teste');
}
```
Ficará assim:
void main() {
print('teste');
}
Você precisa também dar mais detalhes do seu caso. Por exemplo se está
retornando o índice da foto ou não, se gravou no banco corretamente, etc.
—
Reply to this email directly, view it on GitHub
<#190 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/A5VURFLVFGP4XJQKKWXFBMTY77TY5AVCNFSM6AAAAABHAXFGBWVHI2DSMVQWIX3LMV43SRDJONRXK43TNFXW4Q3PNVWWK3TUHM4TENZYHE3TQ>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
class _InicioState extends State<Inicio> {
final CompromissoServico servico = CompromissoServico();
final AutenticaUser deslogar = AutenticaUser();
// Lista de fotos e índice selecionado
List<String> avatars = [
'assets/avatar/avatar1.jpg',
'assets/avatar/avatar2.jpg', // Corrigido o caminho para assets
'assets/avatar/avatar3.jpg',
'assets/avatar/avatar4.jpg',
// Adicione mais caminhos para as suas fotos aqui
];
Future<Object?> obterIndexFoto() async {
try {
// Obtenha o ID do usuário atualmente autenticado
String userId = FirebaseAuth.instance.currentUser!.uid;
// Consulte o documento do usuário para obter o valor do indexfoto
DocumentSnapshot snapshot = await FirebaseFirestore.instance
.collection('users') // Substitua 'users' pelo nome da sua coleção de usuários
.doc(userId)
.get();
// Verifica se o documento existe e contém a chave 'selectedFotoIndex'
if (snapshot.exists && snapshot.data() != null && snapshot.data()!(selectedFotoIndex)) {
return snapshot.data((selectedFotoIndex!);
} else {
// Se o documento não existir, não contiver dados ou não contiver 'selectedFotoIndex', retorne null
return null;
}
} catch (error) {
print('Erro ao obter o indexfoto do Firestore: $error');
return null;
}
}
void carregarAvatar() async {
try {
int? selectedFotoIndex = (await obterIndexFoto()) as int?;
if (selectedFotoIndex != null) {
// Faça o que quiser com o valor de indexfoto
print('Index da foto do usuário: $selectedFotoIndex');
} else {
print('O campo indexfoto não está disponível.');
}
} catch (error) {
print('Erro ao carregar a foto de perfil do usuário: $error');
}
}
@override
void initState() {
super.initState();
carregarAvatar();
}
String fotoPerfil = "";
int? selectedFotoIndex;
String fotoSelecionada = '';
void salvarFotoSelecionada(
int? selectedFotoIndex, String? fotoSelecionada) async {
// Obtém o ID do usuário atualmente autenticado
String userId = FirebaseAuth.instance.currentUser!.uid;
// Consulta a coleção do usuário para encontrar o documento a ser atualizado
QuerySnapshot compromissos = await FirebaseFirestore.instance
.collection(userId) // Use o ID do usuário como nome da coleção
.limit(1) // Limita a consulta a um único documento
.get();
// Verifica se a consulta retornou algum documento
if (compromissos.docs.isNotEmpty) {
// Obtém o ID do primeiro documento retornado pela consulta
String documentoId = compromissos.docs.first.id;
// Obtém uma referência para o documento na coleção do usuário
DocumentReference compromissoRef = FirebaseFirestore.instance
.collection(userId) // Use o ID do usuário como nome da coleção
.doc(documentoId); // Use o ID do documento obtido na consulta
// Atualiza o documento no Firestore com o índice e a URL da foto selecionada
compromissoRef.update({
'selectedFotoIndex': selectedFotoIndex,
'fotoSelecionada': fotoSelecionada,
}).then((_) {
setState(() {
fotoPerfil = fotoSelecionada!;
this.selectedFotoIndex = selectedFotoIndex;
});
print(
'Índice e URL da foto selecionada atualizados com sucesso no banco de dados! $fotoPerfil');
}).catchError((error) {
print('Erro ao atualizar o índice e a URL da foto selecionada: $error');
});
} else {
print('Nenhum documento encontrado para atualizar.');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: PreferredSize(
preferredSize: Size.fromHeight(kToolbarHeight),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
bottomRight: Radius.circular(20),
bottomLeft: Radius.circular(20),
),
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.3),
spreadRadius: 1,
blurRadius: 10,
offset: Offset(0, 3), // changes position of shadow
),
],
),
child: AppBar(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(
bottom: Radius.circular(20),
),
),
title: Container(
child: Row(
children: [
SizedBox(width: 120.0),
Text(
'Notiday',
style: TextStyle(
fontSize: 30,
color: Colors.blue,
),
),
],
),
),
),
),
),
endDrawer: Drawer(
child: ListView(
padding: EdgeInsets.zero,
children: <Widget>[
DrawerHeader(
decoration: BoxDecoration(
color: Colors.blue,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Opções',
style: TextStyle(
color: Colors.white,
fontSize: 24,
),
),
SizedBox(height: 10),
GestureDetector(
onTap: () {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Selecione uma Foto'),
content: Container(
width: double.maxFinite,
child: GridView.count(
crossAxisCount: 2,
mainAxisSpacing: 10.0,
crossAxisSpacing: 10.0,
shrinkWrap: true,
children: avatars.map((avatarsPath) {
return GestureDetector(
onTap: () {
setState(() {
// Atualiza o índice da foto selecionada
selectedFotoIndex =
avatars.indexOf(avatarsPath);
fotoSelecionada = avatarsPath;
// Salva a foto selecionada no banco de dados automaticamente
salvarFotoSelecionada(
selectedFotoIndex, fotoSelecionada);
});
Navigator.of(context)
.pop(); // Fecha o AlertDialog
},
child: CircleAvatar(
backgroundImage: AssetImage(avatarsPath),
radius:
40.0, // Ajuste o tamanho do círculo conforme necessário
),
);
}).toList(),
),
),
);
},
);
},
child: CircleAvatar(
// backgroundImage: AssetImage(avatars[
// selectedFotoIndex]), // Exibe a foto selecionada
backgroundImage:
AssetImage(fotoPerfil), // Exibe a foto selecionada
radius:
40.0, // Ajuste o tamanho do círculo conforme necessário
),
),
],
),
), o que acontece, ele salva no firebase tanto a URL da imagem quanto o indice do avatar, porém ao deslogar e logar novamente, ele não aparece a foto que eu escolhi, e aparece a mensgem no terminal do VScode de: O campo index foto não está disponível. |
Beta Was this translation helpful? Give feedback.
-
if (snapshot.exists && snapshot.data() != null && snapshot.data()![selectedFotoIndex]) // o erro aqui ainda continuou {
return snapshot.data((selectedFotoIndex!); // e aqui o erro no selectedFotoIndex! desculpa ficar mandando mensagem |
Beta Was this translation helpful? Give feedback.
Isso aqui que colocou no
if
está errado:snapshot.data()!(selectedFotoIndex)
O correto é:
snapshot.data()!['selectedFotoIndex']
Obs.:
snapshot.data()
retorna umMap<String, dynamic>