2
respostas

Dúvida sobre pegar variável de outra tela.

Para realizar esse desafio eu coloquei dentro do desafio anterior de mudar a cor conforme a maestria dessa forma assim que for mudar a cor eu adicionaria um nível ao usuário, só que para isso eu iria exibir esse valor de nível usando um LinearProgressIndicator no bottom do AppBar, só que não consigo de forma alguma pegar essa variável int nivelUser que está dentro da Task.

2 respostas

Trazendo de uma forma mais visual: eu estou tentando atualizar o valor do usuário na initial_screen.dart usando o valor do nivelUser que está dentro da task.dart

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Nesse value estou tentando pegar o valor que eu somo assim que a maestria da tarefa é completa:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Logo assim que mudasse a cor da maestria ele iria subir um nível no usuário, mas estou apanhando muito para pegar esse valor do nivelUser para utilizar no AppBar.

Olá, Kauã!

Para acessar a variável nivelUser que está dentro da classe Task em outra tela, você pode utilizar o conceito de gerenciamento de estado. Existem várias maneiras de fazer isso no Flutter, mas uma opção comum é utilizar o pacote provider.

Primeiro, você precisa adicionar o pacote provider ao seu arquivo pubspec.yaml. Para fazer isso, adicione a seguinte linha sob a seção dependencies:

dependencies:
  flutter:
    sdk: flutter
  provider: ^4.3.2

Em seguida, importe o pacote provider no arquivo em que você deseja acessar a variável nivelUser. Por exemplo, se você deseja acessá-la em uma nova tela chamada NovaTela, adicione o seguinte import:

import 'package:provider/provider.dart';

Agora, você precisa envolver a tela em que você deseja acessar a variável nivelUser com um ChangeNotifierProvider. Supondo que você esteja navegando para a tela NovaTela a partir da tela atual, você pode fazer o seguinte:

Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => ChangeNotifierProvider.value(
      value: task,
      child: NovaTela(),
    ),
  ),
);

No exemplo acima, task é uma instância da classe Task que contém a variável nivelUser.

Dentro da tela NovaTela, você pode acessar a variável nivelUser da seguinte maneira:

final task = Provider.of<Task>(context);
int nivelUser = task.nivelUser;

Agora você pode utilizar a variável nivelUser para exibir o valor do nível do usuário no LinearProgressIndicator ou em qualquer outro lugar da tela NovaTela.

Espero ter ajudado e bons estudos!