Flutter 单击列表项后如何导航到不同的屏幕?

Flutter 单击列表项后如何导航到不同的屏幕?,flutter,listview,Flutter,Listview,我通过配置单元将数据传输到ListView,下面是我显示ListView的代码 import 'package:flutter/material.dart'; import 'package:hive/hive.dart'; import 'package:hive_flutter/hive_flutter.dart'; import 'package:secret_keeper/Database/Hive/PasswordModel.dart'; import 'package:secret_

我通过配置单元将数据传输到ListView,下面是我显示ListView的代码

import 'package:flutter/material.dart';
import 'package:hive/hive.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:secret_keeper/Database/Hive/PasswordModel.dart';
import 'package:secret_keeper/screens/home_screen/passwords/ShowData.dart';

class PasswordsNavigation extends StatefulWidget {
  @override
  _PasswordsNavigationState createState() => _PasswordsNavigationState();
}

class _PasswordsNavigationState extends State<PasswordsNavigation> {

  var passwordBox = Hive.box<PasswordModel>('passwordBox');

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Column(
      children: [
        Expanded(
          child: _buildListView(),
        )
      ],
    ));
  }

  Widget _buildListView() {
    return WatchBoxBuilder(
      box: passwordBox,
      builder: (context, box) {
        Map<dynamic, dynamic> raw = box.toMap();
        List list = raw.values.toList();

        return ListView.builder(
          shrinkWrap: true,
          itemCount: list.length,
          itemBuilder: (context, index) {
            PasswordModel passwordModel = list[index];
            return ListTile(
              title: Text(passwordModel.websiteName),
              subtitle: Text(passwordModel.websiteAddress),
              trailing: Row(
                mainAxisSize: MainAxisSize.min,
                children: [
                  IconButton(
                    icon: Icon(Icons.delete),
                    onPressed: (){
                      passwordBox.deleteAt(index);
                    },
                  )
                ],
              ),
            );
          },
        );
      },
    );
  }
}
导入“包装:颤振/材料.省道”;
导入“package:hive/hive.dart”;
进口“包装:蜂巢飞/蜂巢飞.飞镖”;
导入“package:secret_keeper/Database/Hive/PasswordModel.dart”;
导入“包:secret_keeper/screens/home_screen/passwords/ShowData.dart”;
类密码navigation扩展了StatefulWidget{
@凌驾
_PasswordsNavigationState createState()=>\u PasswordsNavigationState();
}
类_密码navigationState扩展状态{
var passwordBox=Hive.box('passwordBox');
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:专栏(
儿童:[
扩大(
子项:_buildListView(),
)
],
));
}
小部件_buildListView(){
返回WatchBoxBuilder(
box:passwordBox,
生成器:(上下文,框){
Map raw=box.toMap();
List=raw.values.toList();
返回ListView.builder(
收缩膜:对,
itemCount:list.length,
itemBuilder:(上下文,索引){
PasswordModel PasswordModel=列表[索引];
返回列表块(
标题:文本(passwordModel.websiteName),
字幕:文本(passwordModel.websiteAddress),
尾随:行(
mainAxisSize:mainAxisSize.min,
儿童:[
图标按钮(
图标:图标(Icons.delete),
已按下:(){
passwordBox.deleteAt(索引);
},
)
],
),
);
},
);
},
);
}
}

我在单击任何项目时创建了一个名为ShowData.dart的新.dart文件,那么如何打开此活动?当我点击列表项时,我不知道如何导航到新屏幕。我还需要数据,如列表索引n all with navigator。

您可能应该为页面创建一个新的小部件,如下所示:

class DetailsPage扩展了无状态小部件{
DetailsPage({Key-Key,required this.id}):super(Key:Key);
最终int id;
小部件构建(构建上下文){
//显示具有给定id的项目的详细信息。
...
}
}
请注意,它还接受构造函数中的
id
参数

然后,在
listile
onTap
方法中,您可以导航到新页面,传递
id

listile(
onTap:(){
导航器.of(上下文).push(MaterialPageRoute(
生成器:()=>DetailsPage(id:/*id当前索引处的项*/),
));
},
...
),

您可能应该为页面创建一个新的小部件,如下所示:

class DetailsPage扩展了无状态小部件{
DetailsPage({Key-Key,required this.id}):super(Key:Key);
最终int id;
小部件构建(构建上下文){
//显示具有给定id的项目的详细信息。
...
}
}
请注意,它还接受构造函数中的
id
参数

然后,在
listile
onTap
方法中,您可以导航到新页面,传递
id

listile(
onTap:(){
导航器.of(上下文).push(MaterialPageRoute(
生成器:()=>DetailsPage(id:/*id当前索引处的项*/),
));
},
...
),
ListTile()有一个onTap方法。要进行导航,请查看
listile()
具有onTap方法。有关导航,请查看