私は、Scaffold.of()関数と同様に、.of()メソッドを使ってアプリケーションのトップレベル状態を取得しようとしています。これは、(ストリップダウン)コードです:Flutter:子からトップレベルの状態を取得するとnullが返されます。
class IApp extends StatefulWidget {
@override
IAppState createState() => new IAppState();
static IAppState of(BuildContext context) =>
context.ancestorStateOfType(const TypeMatcher<IAppState>());
}
アプリはrunApp(新しいIAPP)を使用して開始され
このウィジェットは、ホームページ作成:
@override
Widget build(BuildContext context) {
return new MaterialApp(
// ommitted: some localization and theming details
home: new HomePage(),
);
}
はその後、私がアクセスしようとしますホームページからのステート(ステートフルウィジェット自体):
@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()),
);
}
これは奇妙なことですが、彼はIAppと同じファイルにホームページをコードしますが、余分なクラスとしてだけです。しかし、HomePage を別のファイル(相互にインポートするmain.dartとhomepage.dart)に配置すると、IApp.of(context)の戻り値はnullになります。
この原因は何ですか?それをどうやって修正することができますか?
愚かな質問、それはirreleかもしれないファイルをインポートするときに、相対パス( "./homepage.dart")または絶対パス( "package:my_package/homepage.dart")を使用していますか? –
私はパッケージのように絶対パスを使用しています:my_package/etc/file.dart –
私は長い時間前に似たようなバグを抱えていましたが、相対パスを使って解決しましたか、それ以外のものでした^^ –