我试图在列表视图中点击行项目调用新页面,我很新闻
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);
});
}
我得到一个错误如下可能是因为错误的上下文但我不知道我应该传递哪个上下文:
══╡GESTURECAUGHTTION GUSURE╞══════════════════════════════════════════════════════════════════════════════════════════════════════ ═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════方法'ancestorStateOfType'在null上调用。 I / flutter(15113):Receiver: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(package: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(package:flutter / src / gestures / binding.dart:218:20)I / flutter(15113):#10 _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent(package:flutter / src / gestures / binding.dart:192:22)I / flutter(15113):#11 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent(package:flutter / src / gestures / binding.dart:149:7)I / flutter(15113):#12 _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue(package:flutter / src / gesture s / binding.dart:101:7)I / flutter(15113):#13 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket(package:flutter / src / gestures / binding.dart:85:7)I / flutter(15113):#17 _invoke1( dart:ui / hooks.dart:223:10)I / flutter(15113):#18 _dispatchPointerDataPacket(dart:ui / hooks.dart:144:5)I / flutter(15113):(从包镖中删除3帧:异步)I / flutter(15113):I / flutter(15113):处理程序:onTap
你有一个错误/错误的方法
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);
});
}