首页 > 解决方案 > 跳过特定的页面颤动

问题描述

我正在尝试使用 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,),
                    ],
                  ),
                ),
              ),
            );
          }
      ),
    );
  }

}

标签: flutterdartflutter-layout

解决方案


使用 Navigator.pushReplacement() 而不是 Navigator.push()

这将用屏幕上已有的页面替换新页面,而不是将其推到其顶部。


推荐阅读