flutter - 跳过特定的页面颤动
问题描述
我正在尝试使用 Navigator.pop 跳过特定页面。我创建了一个用于进行一些过滤搜索的页面,当我单击记录时,我希望它带我到一个特定页面,直到这里它可以正常工作,但是当我在新页面上并按下后退按钮它带我回到页面“搜索”而不是带我到搜索表单之前的页面,所以我认为只有当状态指向搜索页面时我才应该跳过导航堆栈的状态,否则它不应该跳过。
此代码用于 AppBar 中的后退按钮:
onPressed: () => Navigator.of(context).pop(),
这是我的搜索页面
import 'package:flutter/material.dart';
import 'package:solaris/lista_data.dart';
import 'constants.dart';
class LinkItemsSearch extends SearchDelegate<LinkItem>{
@override
List<Widget> buildActions(BuildContext context) {
return [IconButton(icon: Icon(Icons.clear),onPressed: () { query=""; },)];
}
@override
Widget buildLeading(BuildContext context) {
return IconButton(onPressed: () { Navigator.pop(context); }, icon: Icon(Icons.arrow_back),);
}
@override
Widget buildResults(BuildContext context) {
// TODO: implement buildResults
throw UnimplementedError();
}
@override
Widget buildSuggestions(BuildContext context) {
final mylist = query.isEmpty? loadLinkItem():loadLinkItem().where((p) => p.title.startsWith(query)).toList();
return mylist.isEmpty?
Container(
color: blue,
child: Center(
child: Text('No Result Found . . .', style: TextStyle(color: Colors.white,fontSize: 20,)
)
),
):Container(
color: blue,
child: ListView.builder(
itemCount: mylist.length,
itemBuilder: (context,index){
final LinkItem listitem = mylist[index];
return Container(
color: blue,
child: ListTile(onTap: (){ showResults(context);},
title:InkWell(
onTap: () { Navigator.push(context,MaterialPageRoute(builder: (context) => listitem.link)); },
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget> [
Text(listitem.title, style: TextStyle(color: Colors.white),),
Text(listitem.description, style: TextStyle(color: Colors.white,fontSize: 14),),
Divider(color: white,),
],
),
),
),
);
}
),
);
}
}
解决方案
使用 Navigator.pushReplacement() 而不是 Navigator.push()
这将用屏幕上已有的页面替换新页面,而不是将其推到其顶部。
推荐阅读
- python - 如何使用不可微分的损失函数?
- c# - InvalidCastException:无法将“System.String”类型的对象转换为“System.Int32”类型
- sql - SQL 从列表中查找并返回匹配的关键字
- python - “in dict”总是错误的
- .net - Dapper 和 Postgres - 打印查询
- c# - 无法发送 HTTP 请求,因为请求被中止。“无法创建 SSL/TLS 安全通道”
- ios - 如何执行从视图容器到另一个外部视图的转场?
- r - 在ggplot中使用千位分隔符时修复x轴上的零值位置
- c# - 如何制作动画,其中文本框中的提示文本向上移动到 WPF 中的组框标题
- android - 是否可以完全禁用android应用程序中的后退按钮?