【问题标题】:How to make listview that navigate to another page when clicked单击时如何使列表视图导航到另一个页面
【发布时间】:2021-11-22 17:52:26
【问题描述】:

我想制作listview,当用户单击列表项时,它将导航到具有标题、长文本和图像的其他详细页面。每个列表视图项都有自己的页面(具有标题、文本和图像)。但我不知道如何在 listview ui 和详细屏幕之间链接。我一直在寻找几天,但我不明白该怎么做(我是学习颤振的初学者)。下面是我实现的ui。

这是我实现的listview界面的ui。

这是我实现的详细画面的ui。

【问题讨论】:

    标签: flutter listview flutter-layout


    【解决方案1】:

    请试试这个。 这是模型类

    class Item{
      String title;
      String longText;
      String imageUrl;
      Item({this.title,this.longText,this.imageUrl});
    }
    

    这是第一个屏幕

    class FirstScreen extends StatefulWidget {
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<FirstScreen> {
      List<Item> _itemList = [
        Item(title: "title1", longText: "longtext1", imageUrl: "https://picsum.photos/200/300"),
        Item(title: "tite2", longText: "longtext2", imageUrl: "https://picsum.photos/200/300")
      ];
      @override
      Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(
              title: Text('Sharing data between screens'),
            ),
            body: Center(
                child: ListView.builder(
              itemCount: _itemList.length,
              itemBuilder: (context, index) {
                return GestureDetector(
                    onTap: () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(builder: (context) => DetailScreen(item: _itemList[index])),
                      );
                    },
                    child: Container(margin: EdgeInsets.all(20), child: Text(_itemList[index].title)));
              },
            )));
      }
    }
    

    这是详细信息屏幕

    import 'package:flutter/material.dart';
    
    import 'model/item.dart';
    
    class DetailScreen extends StatelessWidget {
      final Item item;
      const DetailScreen({Key key,this.item}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: const Text("Detail Screen"),
          ),
          body: Center(
            child: Column(
              children:[
                Text(item.longText),
                Image.network(item.imageUrl,fit: BoxFit.fill,),
              ]
            ),
          ),
        );
      }
    }
    

    【讨论】:

      【解决方案2】:

      您正在寻找GestureDetector

      只需要像这样返回 GestureDetector:

      itemBuilder: (context, index) {
              return GestureDetector(
                  onTap: () {
                    //Navigate to detailed screen
                    ...
                  },
                  ....
            },
      

      【讨论】:

        猜你喜欢
        • 2016-01-03
        • 1970-01-01
        • 1970-01-01
        • 2021-08-19
        • 2021-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-03
        相关资源
        最近更新 更多