web-dev-qa-db-ja.com

NoSuchMethodError:メソッド 'ancestorStateOfType'がnullで呼び出されました

私はストリームのこのiamリストのように画面変更を行っており、それが発生したら画面を変更します

 @override
 void initState() {
    super.initState();

     appBloc.error.listen((data) {
     _scaffoldKey.currentState.showSnackBar(new SnackBar(content: new 
        Text(data)));
    });

     appBloc.success.listen((_) => goToDashBoardScreen(context));

}

そしてdoToDashBoardScreenはこのようになります

Navigator.pushReplacement(context, new SlideRightRoute(widget: 
DashBoardScreen()));

このようなエラーが発生しますが、ページを変更します。

22:05:02.446 3 info flutter.tools E/flutter (13216): NoSuchMethodError: 
The method 'ancestorStateOfType' was called on null.
22:05:02.446 4 info flutter.tools E/flutter (13216): Receiver: null
22:05:02.446 5 info flutter.tools E/flutter (13216): Tried calling: 
ancestorStateOfType(Instance of 'TypeMatcher<NavigatorState>')
22:05:02.446 6 info flutter.tools E/flutter (13216): #0      
Object.noSuchMethod (Dart:core/runtime/libobject_patch.Dart:48:5)
22:05:02.446 7 info flutter.tools E/flutter (13216): #1      
Navigator.of (package:flutter/src/widgets/navigator.Dart:1270:19)
22:05:02.446 8 info flutter.tools E/flutter (13216): #2      
Navigator.pushReplacement 
(package:flutter/src/widgets/navigator.Dart:952:22)
3
shakil.k

ウィジェットがツリーから削除された可能性があります。したがって、contextはもうありません。

問題は、あなたのStreamの購読を解除するのを忘れたことです。したがって、ツリーから削除された後でも、ウィジェットは更新を試みます。

解決策は、dispose呼び出しで購読を解除することです。

class Foo extends StatefulWidget {
  @override
  _FooState createState() => _FooState();
}

class _FooState extends State<Foo> {
  StreamSubscription streamSubscription;

  @override
  void initState() {
    super.initState();

    streamSubscription = Bloc.of(context).myStream.listen((value) {
      print(value);
    });
  }

  @override
  void dispose() {
    streamSubscription.cancel();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Container();
  }
}
12
Rémi Rousselet

問題:子ウィジェットに渡されたコンテキストが間違っていました。

ソリューション:子ウィジェットに渡す正しいコンテキストであるビルドメソッドコンテキストを渡した後、私の問題は解決されました。

4
Usman