Flutter 单击列表项后如何导航到不同的屏幕?
我通过配置单元将数据传输到ListView,下面是我显示ListView的代码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_
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方法。有关导航,请查看