如何获取列表视图按钮以转到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(

工作演示

enter image description here

完整代码

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之前删除。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...