如何解决如何获取列表视图按钮以转到onTap上的随机路由
我正在尝试从这里使用解决方案 How make button which open random page in Flutter? 但要使用我的Listview按钮代替RaisedButton。
这是我从另一个StackOverflow添加RandomRouteGenerator之后到目前为止所拥有的:
ListView(
children: const <Widget>[
Card(
child: ListTile(
leading: Text('?'),title: Text('Chicken'),onTap: () {
Navigator.of(context).pushNamed(
RouteGenerator.getRandomNameOfRoute());
},),//... more Cards that would become other listview items
这是错误:
Compiler message:
lib/main.dart:163:28: Error: Not a constant expression.
Navigator.of(context).pushNamed(
^^^^^^^
lib/main.dart:163:25: Error: Method invocation is not a constant expression.
Navigator.of(context).pushNamed(
^^
lib/main.dart:164:32: Error: Method invocation is not a constant expression.
RouteGenerator.getRandomNameOfRoute());
^^^^^^^^^^^^^^^^^^^^
lib/main.dart:163:37: Error: Method invocation is not a constant expression.
Navigator.of(context).pushNamed(
^^^^^^^^^
lib/main.dart:162:20: Error: Not a constant expression.
onTap: () {
^^
谢谢
解决方法
您可以在下面复制粘贴运行完整代码
您可以删除const
中的关键字children: const <Widget>[
代码段
child: ListView(children: <Widget>[
Card(
工作演示
完整代码
import 'dart:math';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Random pages',theme: ThemeData(
primarySwatch: Colors.blue,),initialRoute: 'start_page',onGenerateRoute: RouteGenerator.generateRoute,);
}
}
class RouteGenerator {
static List<String> myRandomPages = ['first_page','second_page'];
static String getRandomNameOfRoute() {
return myRandomPages[Random().nextInt(myRandomPages.length)];
}
static Route<dynamic> generateRoute(RouteSettings settings) {
switch (settings.name) {
case 'start_page':
return MaterialPageRoute(builder: (_) => StartPage());
case 'first_page':
return MaterialPageRoute(
builder: (_) =>
FirstPage()); // FirstPage - is just a Widget with your content
case 'second_page':
return MaterialPageRoute(
builder: (_) => SecondPage()); // Also custom Widget
//... other random or not pages
}
}
}
class StartPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Start page'),body: Column(
children: [
Expanded(
child: ListView(children: <Widget>[
Card(
child: ListTile(
leading: Text('?'),title: Text('Chicken'),onTap: () {
Navigator.of(context)
.pushNamed(RouteGenerator.getRandomNameOfRoute());
},]),Center(
child: RaisedButton(
child: Text('Go to random page'),onPressed: () => Navigator.of(context)
.pushNamed(RouteGenerator.getRandomNameOfRoute()),],));
}
}
class FirstPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Text("First Page");
}
}
class SecondPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Text("Second Page");
}
}
,
尝试在ListView子级上的const
之前删除。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。