【问题标题】:How to Navigate to Next Page in Dynamic List View - Flutter如何在动态列表视图中导航到下一页 - Flutter
【发布时间】:2020-05-03 03:02:15
【问题描述】:

我有一个 Categories 列表,并使用 ListViewBuilder 在 ListTile 中显示它。我想转到被点击的特定类别页面。代码示例:

final category = [
'Category One',
'Category Two',
'Category Three',
],

我正在编写类似下面的 Navigator.push:但在这里我想要一些动态的东西。我希望你明白了。

onTap(){
Navigator.push(context, MaterialPageRoute(builder: (context)=>CategoryOne(),),);
}

【问题讨论】:

  • 您可以在 ListView 的构建器函数中使用 if 语句。另外,我认为没有必要这样做,因为这将非常麻烦。您应该有一个类别模型,该模型具有标识每个类别的唯一 ID 和用于类别屏幕的单个页面。对于每个类别 ID,您可以在该单个页面上显示该类别的相关数据。

标签: flutter navigator


【解决方案1】:

如果您对每种可能性都有一个类别小部件,那么您可以在 MaterialPageRoute 构建器中使用 Switch:

Navigator.push(context, MaterialPageRoute(builder: (context) {
  switch (selectedCategory) {
    case 'Category One':
      return CategoryOne();
    break;
    case 'Category Two':
      return CategoryTwo();
    break;
    case 'Category Three':
      return CategoryThree();
      break;

    default:
      return CategoryOne();
  }
}));

【讨论】:

    【解决方案2】:

    您可以使用路线轻松导航。

    以下示例可能会清除您对如何使用路由实现所需输出的想法。

    import 'package:flutter/material.dart';
    import 'package:master/them.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeGenerator.themeDataGenerator,
          routes: {
            '/': (context) => MyHomePage(),
            '/firstCategory': (context) => FirstCategory(),
            '/secondCategory': (context) => SecondCategory(),
          },
        );
      }
    }
    
    class SecondCategory extends StatelessWidget {
      const SecondCategory({Key key}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return Container(
          child: Text("second"),
        );
      }
    }
    
    class FirstCategory extends StatelessWidget {
      const FirstCategory({Key key}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return Container(child: Text("First"));
      }
    }
    
    class MyHomePage extends StatefulWidget {
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      final category = [
        'firstCategory',
        'secondCategory',
      ];
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(
              title: Text("Default"),
            ),
            body: ListView.builder(
              itemCount: 2,
              itemBuilder: (context, index) {
                return Center(
                  child: Padding(
                    padding: EdgeInsets.all(10.0),
                    child: InkWell(
                      onTap: () {
                        Navigator.pushNamed(context, '/${category[index]}');
                      },
                      child: Text(
                        index.toString(),
                        textScaleFactor: 5.0,
                      ),
                    ),
                  ),
                );
              },
            ));
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-29
      • 2020-08-11
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      • 2020-09-03
      相关资源
      最近更新 更多