Como sei quando devo utilizar o parâmetro context ? E para que ele serve?
Como sei quando devo utilizar o parâmetro context ? E para que ele serve?
Segundo a documentação oficial a classe BuildContext apresenta um conjunto de métodos que podem ser usados nos métodos StatelessWidget.build e nos métodos em objetos State . Como o próprio nome indica, refere-se ao contexto em que um widget específico é construído.
Se você já usou React antes, esse contexto é semelhante ao contexto do React.
De um modo geral, existem 2 casos de uso para o contexto:
1- Interação com os componentes pai (get/post). 2-Depois de renderizado na tela, obtenha o tamanho e a posição da tela. O segundo ponto é meio raro. Por outro lado, o primeiro ponto é usado em quase todos os lugares.
Por exemplo, quando você deseja enviar uma nova rota, você o fará
Navigator.of(context).pushNamed('myRoute').
Observe o contexto aqui. Ele será usado para obter a instância mais próxima do NavigatorState
widget acima na árvore. Em seguida, chame o método pushNamed
nessa instância.
Beleza, mas quando utilizar?
O BuildContext é realmente útil quando você deseja passar dados sem precisar atribuí-los manualmente a todos os widgets. Configurações por exemplo; você desejará acessá-las em qualquer lugar. Mas você não deseja repassá-lo a cada construtor.
Você poderia fazer um global ou um singleton; mas quando a configuração mudar, seus widgets não serão reconstruídos automaticamente.
Nesse caso, você usa
InheritedWidget
Com ele, você poderia escrever o seguinte:
class Configuration extends InheritedWidget {
final String myConf;
const Configuration({this.myConf, Widget child}): super(child: child);
@override
bool updateShouldNotify(Configuration oldWidget) {
return myConf != oldWidget.myConf;
}
}
E chamá -lo da seguinte maneira:
void main() {
runApp(
new Configuration(
myConf: "Hello world",
child: new MaterialApp(
// usual stuff here
),
),
);
}
Agora em qualquer lugar dentro do seu aplicativo, você pode acessar essas configurações usando o BuildContext. Fazendo
final configuration = context.inheritFromWidgetOfExactType(Configuration);
E ainda mais interessante é que todos os widgets que chamam
inheritFromWidgetOfExactType(Configuration)
serão reconstruídos automaticamente quando as configurações forem alteradas.