Flutter 省道/颤振:在没有上下文的页面之间导航(使用导航器)(因此没有导航器。推?)
在我的应用程序中,我有6个不同的页面。 有一个名为“收藏夹页面”的页面,其中列出了用户选择的收藏夹。它们由一列显示,该列使用另一个类的列表。名单编号如下:Flutter 省道/颤振:在没有上下文的页面之间导航(使用导航器)(因此没有导航器。推?),flutter,dart,flutter-layout,flutter-test,Flutter,Dart,Flutter Layout,Flutter Test,在我的应用程序中,我有6个不同的页面。 有一个名为“收藏夹页面”的页面,其中列出了用户选择的收藏夹。它们由一列显示,该列使用另一个类的列表。名单编号如下: List<Widget> favoriteContainerLists() { DatabaseProvider.db.queryDb(); List<Widget> localList = []; if (DatabaseProvider.publicFavoriteList == nul
List<Widget> favoriteContainerLists() {
DatabaseProvider.db.queryDb();
List<Widget> localList = [];
if (DatabaseProvider.publicFavoriteList == null ||
DatabaseProvider.publicFavoriteList.isEmpty) {
localList.add(
Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
"Hier erscheinen deine Favoriten!",
style: TextStyle(
fontFamily: "Hind",
fontSize: 22,
),
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
"Makiere Bilder auf der Informationsseite mit ",
style: TextStyle(
color: Colors.indigo,
fontFamily: "Hind",
fontSize: 15,
),
),
Icon(
Icons.star_border,
color: Colors.orange,
),
],
),
Text(
" um sie hinzuzufügen!",
style: TextStyle(
color: Colors.indigo,
fontFamily: "Hind",
fontSize: 15,
),
),
],
),
);
} else {
localList.add(Padding(
padding: const EdgeInsets.only(bottom: 15.0),
child: Text(
"Deine Favoriten:",
textAlign: TextAlign.left,
style: TextStyle(
fontSize: 30,
color: Colors.indigoAccent,
fontFamily: "Hind",
),
),
));
for (var i = 0; i < DatabaseProvider.publicFavoriteList.length; i++) {
DatabaseProvider.db.queryDb();
int currentIdInt = DatabaseProvider.publicFavoriteList[i];
localList.add(
Padding(
padding: const EdgeInsets.only(bottom: 15),
child: MaterialButton(
onPressed: ***null***,
padding: const EdgeInsets.only(bottom: 0),
child: Container(
width: double.infinity,
height: 120,
decoration: BoxDecoration(
color: buttonColor,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(8),
topRight: Radius.circular(8),
bottomLeft: Radius.circular(8),
bottomRight: Radius.circular(8)),
boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.5),
spreadRadius: 5,
blurRadius: 7,
offset: Offset(0, 3), // changes position of shadow
),
],
),
child: Padding(
padding: const EdgeInsets.fromLTRB(10, 8, 10, 8),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Center(
child: Container(
width: 70,
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(8),
topRight: Radius.circular(8),
bottomLeft: Radius.circular(8),
bottomRight: Radius.circular(8)),
),
child: Image.asset(
AppBrain().contentList[currentIdInt].imageAdress),
),
),
VerticalDivider(
thickness: 2,
indent: 15,
endIndent: 15,
),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
AppBrain().contentList[currentIdInt].artName,
style: TextStyle(
fontFamily: "Hind",
fontSize: 23,
color: Colors.blueGrey),
),
Expanded(
child: Container(
child: RichText(
maxLines: 2,
softWrap: true,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
text: TextSpan(
style: TextStyle(
fontSize: 14,
color: Colors.black,
fontFamily: "Hind"),
text:
(contentList[currentIdInt].description),
),
),
),
)
],
),
),
],
),
),
),
),
),
);
}
}
return localList;
}
它们位于两个不同的类中。包含该列表的类没有BuildContext,也应该有非BuildContext。理想情况下,当它说onTap:null时,
此时我希望它是空的
Navigator.of(context).push(
toInformationPage(),
);
但我知道我不能使用任何需要上下文的东西。有什么想法吗?您可以使用GlobalKey作为导航器。已经有很多文章介绍了如何实现这一点,这里是另一个选项,即将FavoriteContainerList包装到单个小部件(可能是包装它的列)中,并使用构建函数。所以你可能会有这样的想法:
class FavoriteContainerList extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
child: The logic from AppBrain().favoriteContainerLists() here.
这说服我出于其他原因使用类,但获取上下文也很好
class FavoriteContainerList extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
child: The logic from AppBrain().favoriteContainerLists() here.