Пробный вызов: ancestorStateOfType (экземпляр TypeMatcher <NavigatorState>' - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь вызвать новую страницу при нажатии элемента строки в представлении списка, я очень плохо знаком с флаттером

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' был вызван для нуля.I / flutter (15113): получатель: null I / flutter (15113): пробный вызов: ancestorStateOfType (экземпляр 'TypeMatcher') I / flutter (15113): I / flutter (15113): когда было сгенерировано исключение, это былостек: I / flutter (15113): # 0 Object.noSuchMethod (dart: core / runtime / libobject_patch.dart: 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 / флаттер (15113): # 3 _InkResponseState._handleTap (пакет: флаттер / src / material / ink_well.dart: 513: 14) I / флаттер (15113): #4 _InkResponseState.build.(пакет: flutter / src / material / ink_well.dart: 568: 30) I / flutter (15113): # 5 GestureRecognizer.invokeCallback (пакет: flutter / src / gestures /ognizer.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 & GindingureBinding.handleEter (пакет:src / gestures / binding.dart: 218: 20) I / flutter (15113): # 10 _WidgetsFlutterBinding & BindingBase & GestureBinding.dispatchEvent (пакет: flutter / src / gestures / binding.dart: 192: 22) I / флаттер (15113): # 11_WidgetsFlutterBinding & BindingBase & GestureBinding.s / binding.dart: 101: 7) I / flutter (15113): # 13 _WidgetsFlutterBinding & BindingBase & GestureBinding._handlePointerDataPacket (пакет: flutter / src / gestures / binding.dart: 85: 7) I / флаттер (15113): # 17 _inkedart: ui / hooks.dart: 223: 10) I / флаттер (15113): # 18 _dispatchPointerDataPacket (dart: ui / hooks.dart: 144: 5) I / флаттер (15113): (исключено 3 кадра из пакета dart:асинхронный) I / флаттер (15113): I / флаттер (15113): обработчик: onTap

1 Ответ

1 голос
/ 12 апреля 2019

У вас есть ошибка / опечатка в методе

 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);
        });
  }
...