尝试调用:ancestorStateOfType('TypeMatcher<NavigatorState>' 的实例

Tried calling: ancestorStateOfType(Instance of 'TypeMatcher<NavigatorState>'

我正在尝试点击列表视图中的行项目来调用新页面,我对 flutter 还很陌生

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(title: "My First Flutter App", home: new Home());
  }
}

class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return new Scaffold(
        appBar: AppBar(
          title: Text("Hello"),
          backgroundColor: Colors.black,
        ),
        body: WordPairState()._buildSugg(context));
  }
}

class WordPairState extends State<RandomWordPair> {
  final _suggetions = <WordPair>[];
  final _bigText = const TextStyle(fontSize: 16);

  @override
  Widget build(BuildContext context) {
    final _wordPair = WordPair.random();
    // TODO: implement build
    return Text(_wordPair.asPascalCase);
  }

  Widget _buildSugg(BuildContext ctx) {
    return ListView.builder(
        padding: const EdgeInsets.all(10),
        itemBuilder: (context, i) {
          if (i.isOdd) return Divider();

          final count = i ~/ 2;

          if (count >= _suggetions.length) {
            _suggetions.addAll(generateWordPairs().take(10));
          }

          return _buildRow(_suggetions[count], count, ctx);
        });
  }

  Widget _buildRow(WordPair wp, final count, BuildContext ctx) {
    return ListTile(
        subtitle: Text("List Sub title " + wp.toString()),
        title: Text(
          wp.asPascalCase,
          style: _bigText,
        ),
        onTap: () {
          Route route = MaterialPageRoute(builder: (context) => SecondRoute());

          Navigator.push(context, route);
        });
  }

我收到如下错误,可能是因为上下文错误,但我不知道应该传递哪个上下文:

══╡手势异常╞═══════════════════════════════════ ══════════════════════════════ I/flutter (15113): 处理手势时抛出以下 NoSuchMethodError: I/flutter (15113): 方法 'ancestorStateOfType' 被调用为 null。 I/flutter (15113):接收者:空 I/flutter (15113):尝试调用:ancestorStateOfType('TypeMatcher' 的实例) I/flutter (15113): I/flutter (15113): 当抛出异常时,这是堆栈: I/flutter (15113): #0 Object.noSuchMethod (飞镖:core/runtime/libobject_patch.飞镖:50:5) I/flutter (15113): #1 Navigator.of (包:flutter/src/widgets/navigator.dart:1376:19) I/flutter (15113): #2 WordPairState._buildRow。 (包:flutter_app/main.dart:99:19) I/flutter (15113): #3 _InkResponseState._handleTap (包:flutter/src/material/ink_well.dart:513:14) I/flutter (15113): #4 _InkResponseState.build。 (包:flutter/src/material/ink_well.dart:568:30) I/flutter (15113): #5 GestureRecognizer.invokeCallback (包:flutter/src/gestures/recognizer.dart:120:24) I/flutter (15113): #6 TapGestureRecognizer._checkUp (包:flutter/src/gestures/tap.dart:242:9) I/flutter (15113): #7 TapGestureRecognizer.acceptGesture (包:flutter/src/gestures/tap.dart:204:7) I/flutter (15113): #8 GestureArenaManager.sweep (包:flutter/src/gestures/arena.dart:156:27) I/flutter (15113): #9 _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (包:flutter/src/gestures/binding.dart:218:20) I/flutter (15113): #10 _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (包:flutter/src/gestures/binding.dart:192:22) I/flutter (15113): #11 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (包:flutter/src/gestures/binding.dart:149:7) I/flutter (15113): #12 _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (包:flutter/src/gestures/binding.dart:101:7) I/flutter (15113): #13 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket(包:flutter/src/gestures/binding.dart:85:7) I/flutter (15113): #17 _invoke1 (飞镖:ui/hooks.飞镖:223:10) I/flutter (15113): #18 _dispatchPointerDataPacket (飞镖:ui/hooks.飞镖:144:5) I/flutter (15113):(从包 dart:async 中删除了 3 帧) I/flutter (15113): I/flutter (15113):处理程序:onTap

你有一个bug/typo方法

 Widget _buildRow(WordPair wp, final count, BuildContext context) { // you named it ctx (and using context in implementation) which was causing the problem
    return ListTile(
        subtitle: Text("List Sub title " + wp.toString()),
        title: Text(
          wp.asPascalCase,
          style: _bigText,
        ),
        onTap: () {
          Route route = MaterialPageRoute(builder: (context) => SecondRoute());

          Navigator.push(context, route);
        });
  }