Flutter: recuperar o estado de nível superior do filho retorna nulo
Estou tentando obter o estado de nível superior do meu aplicativo usando um método .of () -, semelhante à função Scaffold.of (). Este é o código (simplificado):
class IApp extends StatefulWidget {
@override
IAppState createState() => new IAppState();
static IAppState of(BuildContext context) =>
context.ancestorStateOfType(const TypeMatcher<IAppState>());
}
O aplicativo é iniciado usando o runApp (novo IApp)
Este widget cria uma página inicial:
@override
Widget build(BuildContext context) {
return new MaterialApp(
// ommitted: some localization and theming details
home: new HomePage(),
);
}
Em seguida, tento acessar o Estado a partir da HomePage (um próprio StatefulWidget):
@override
Widget build(BuildContext context) {
return new Scaffold(
// ommited: some Scaffold properties such as AppBar
// runtimeType not actual goal, but just for demonstration purposes
body: new Text(IApp.of(context).runtimeType.toString()),
);
}
O estranho é que o código funciona quando eu coloco o código para a HomePageno mesmo arquivo como o IApp, mas apenas como uma classe extra. No entanto, quando coloco o HomePageem um arquivo separado (main.dart e homepage.dart importando um ao outro), o valor de retorno de IApp.of (contexto) é nulo.
O que causa isso? E como posso corrigir isso?