Flutter 从ListTile导航到另一个页面
我的应用程序得到了一个包含多个条目的可扩展列表。我想通过单击最低级别的ListTiles导航到不同的页面。我知道有“onTap”方法,但它需要一个buildContext,我没有编程的方式。 我从网上得到了代码,并对其进行了一些修改。代码如下:Flutter 从ListTile导航到另一个页面,flutter,Flutter,我的应用程序得到了一个包含多个条目的可扩展列表。我想通过单击最低级别的ListTiles导航到不同的页面。我知道有“onTap”方法,但它需要一个buildContext,我没有编程的方式。 我从网上得到了代码,并对其进行了一些修改。代码如下: import 'package:flutter/material.dart'; import '../screens/model_view_screen.dart'; import '../models/entry.dart'; class Entry
import 'package:flutter/material.dart';
import '../screens/model_view_screen.dart';
import '../models/entry.dart';
class EntryItem extends StatelessWidget {
const EntryItem(this.entry);
final Entry entry;
Widget _buildTiles(Entry root) {
if (root.children.isEmpty) {
return Padding(
padding: const EdgeInsets.all(10.0),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
border: Border.all(
width: 2,
color: Color.fromRGBO(3, 120, 163, 1),
),
),
child: ListTile(
leading: Image.asset(root.imageUrl),
title: Text(root.title),
onTap: () {},
),
),
);
}
return Padding(
padding: const EdgeInsets.all(10.0),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
border: Border.all(
width: 3,
color: Color.fromRGBO(3, 120, 163, 1),
),
),
child: ExpansionTile(
key: PageStorageKey<Entry>(root),
leading: Image.asset(root.imageUrl),
title: Text(root.title, style: TextStyle(color: Colors.black)),
children: root.children.map<Widget>(_buildTiles).toList(),
),
),
);
}
@override
Widget build(BuildContext context) {
return _buildTiles(entry);
}
}
导入“包装:颤振/材料.省道”;
导入“../screens/model_view_screen.dart”;
导入“../models/entry.dart”;
类EntryItem扩展了无状态小部件{
const EntryItem(此项);
最终入围;
Widget\u buildTiles(条目根){
if(root.children.isEmpty){
返回填充(
填充:常数边集全部(10.0),
子:容器(
装饰:盒子装饰(
边界半径:边界半径。圆形(15),
边界:边界(
宽度:2,
颜色:颜色。来自RGBO(3,120,163,1),
),
),
孩子:ListTile(
前导:Image.asset(root.imageUrl),
标题:文本(root.title),
onTap:(){},
),
),
);
}
返回填充(
填充:常数边集全部(10.0),
子:容器(
装饰:盒子装饰(
边界半径:边界半径。圆形(15),
边界:边界(
宽度:3,
颜色:颜色。来自RGBO(3,120,163,1),
),
),
子文件:扩展文件(
密钥:PageStorageKey(根),
前导:Image.asset(root.imageUrl),
标题:文本(root.title,style:TextStyle(颜色:Colors.black)),
children:root.children.map(_buildTiles.toList(),
),
),
);
}
@凌驾
小部件构建(构建上下文){
返回(条目);;
}
}
目标的routeName在列表中给出:
class Entry{
final String title;
final String imageUrl;
final String routeName;
final List<Entry> children;
Entry(this.title, this.imageUrl, this.routeName, [this.children = const <Entry>[]]);
}
类条目{
最后的字符串标题;
最终字符串imageUrl;
最终字符串routeName;
最后儿童名单;
条目(this.title、this.imageUrl、this.routeName、[this.children=const[]);
}
提前谢谢。您想将
BuildContext
传递给\u buildTiles
:
Widget\u buildTiles(BuildContext上下文,条目根){
....
孩子:ListTile(
前导:Image.asset(root.imageUrl),
标题:文本(root.title),
onTap:()=>Navigator.of(context.pushName)(root.routeName),
),
....
children:root.children.map((e)=>\u buildTiles(context,e)).toList(),
....
@凌驾
小部件构建(构建上下文){
返回_buildTiles(上下文、条目);
}
您想将BuildContext
传递给\u buildTiles
:
Widget\u buildTiles(BuildContext上下文,条目根){
....
孩子:ListTile(
前导:Image.asset(root.imageUrl),
标题:文本(root.title),
onTap:()=>Navigator.of(context.pushName)(root.routeName),
),
....
children:root.children.map((e)=>\u buildTiles(context,e)).toList(),
....
@凌驾
小部件构建(构建上下文){
返回_buildTiles(上下文、条目);
}
我已经尝试了该解决方案,但当我这样做时,我得到了以下错误:“参数类型”Widget Function(BuildContext,Entry)“无法分配给参数类型”Widget Function(Entry)”.dart(参数类型不可分配)“eroor标记在此行的“\u buildTiles”:children:root.children.map(\u buildTiles.toList(),我已经尝试过该解决方案,但当我这样做时,我得到以下错误:“参数类型”Widget Function(BuildContext,Entry)“无法分配给参数类型”Widget Function(Entry)”.dart(参数类型\u not \u assignable)“eror标记在此行的“\u buildTiles”:children:root.children.map(\u buildTiles.toList(),