如何为每个网格项显示不同的名称和不同的登录页面?

问题描述 投票:0回答:1

我正在尝试构建网格项视图,每个项目应该有不同的文本和不同的登录页面。例如,Android开发网格项,点击时应该转到Android Dev。页面和Web开发网格项,按下时应导航到Web开发页面。

这是我当前的显示,我希望每个网格项具有不同的名称。 enter image description here

var gridView = new GridView.builder(
        itemCount: 2,
        gridDelegate:
            new SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2),
        itemBuilder: (BuildContext context, int index) {
          return new GestureDetector(
            child: new Card(
              elevation: 5.0,
              child: new Container(
                  alignment: Alignment.center,
                  child: new Text('Android Development')),
            ),
            onTap: () => _navigateToQuizPage(context),
          );
        });

    return new DefaultTabController(
      length: 1,
      child: new Scaffold(
        appBar: new AppBar(
          title: new Text("Flutter TabBar"),
          bottom: tabBarItem,
        ),
        body: new TabBarView(
          controller: tabController,
          children: [gridView],
        ),
      ),
    );
  }

  void _navigateToQuizPage(BuildContext context) {
    Navigator.of(context).push(new MaterialPageRoute(
        builder: (BuildContext context) => new AndroidQuiz()));
  }
mobile dart flutter flutter-layout flutter-animation
1个回答
0
投票

首先,我建议使用默认的GridView构造函数而不是GridView.builder。您可以简单地添加带有调整后的标题和路线的卡片。在此示例中,我为不同的最终视图使用不同的路由。

另一种解决方案是将参数传递给路径,并根据参数更改视图。如果这是您的问题的合适解决方案,请发表评论,我将编辑此答案以提供示例。

独立示例(没有下一个视图):

GridView Demo

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: MyGrid(),
      ),
    );
  }
}

class MyGrid extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return GridView.count(crossAxisCount: 2, children: <Widget>[
      MyCard(title: 'Web Development', route: '/web'),
      MyCard(title: 'Android Development', route: '/android'),
    ]);
  }
}

class MyCard extends StatelessWidget {
  final String route;
  final String title;

  MyCard({this.route, this.title});

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () => Navigator.pushNamed(context, this.route),
      child: Card(
        child: Center(child: Text(this.title)),
      ),
    );
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.