首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >颤振-在页面之间导航

颤振-在页面之间导航
EN

Stack Overflow用户
提问于 2021-02-04 15:27:28
回答 3查看 1.2K关注 0票数 0

我正在制作一个简单的应用程序来学习一些关于颤振的知识,但是我在页面之间导航时遇到了问题。

该应用程序只有三个页面(主页,搜索,设置),我做了一个简单的导航栏。我现在用的是:

代码语言:javascript
复制
Navigator.of(context).pushReplacementNamed("/home");

问题是,我想在页面之间导航,而不创建“新”页面。例如,如果我在搜索页面上有一个文本字段,然后转到主页并返回到搜索页面,则文本字段中的输入将保持不变。

在页面之间导航而不推送或弹出“新”页的最佳方法是什么?

EN

回答 3

Stack Overflow用户

发布于 2021-02-04 15:58:42

您可以使用底部导航栏查看此示例,以便在小部件之间进行更改以显示不同的视图。您可以按照此示例创建所需的内容。

代码语言:javascript
复制
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

/// This is the main application widget.
class MyApp extends StatelessWidget {
  static const String _title = 'Flutter Code Sample';

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: _title,
      home: MyStatefulWidget(),
    );
  }
}

/// This is the stateful widget that the main application instantiates.
class MyStatefulWidget extends StatefulWidget {
  MyStatefulWidget({Key key}) : super(key: key);

  @override
  _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}

/// This is the private State class that goes with MyStatefulWidget.
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  int _selectedIndex = 0;
  static const TextStyle optionStyle =
      TextStyle(fontSize: 30, fontWeight: FontWeight.bold);
  static const List<Widget> _widgetOptions = <Widget>[
    Text(
      'Index 0',
      style: optionStyle,
    ),
    Text(
      'Index 1',
      style: optionStyle,
    ),
    Text(
      'Index 2',
      style: optionStyle,
    ),
  ];

  void _onItemTapped(int index) {
    setState(() {
      _selectedIndex = index;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('BottomNavigationBar Sample'),
      ),
      body: Center(
        child: _widgetOptions.elementAt(_selectedIndex),
      ),
      bottomNavigationBar: BottomNavigationBar(
        items: const <BottomNavigationBarItem>[
          BottomNavigationBarItem(
            icon: Icon(Icons.home),
            label: 'Tab 0',
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.business),
            label: 'Tab 1',
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.school),
            label: 'Tab 2',
          ),
        ],
        currentIndex: _selectedIndex,
        selectedItemColor: Colors.amber[800],
        onTap: _onItemTapped,
      ),
    );
  }
}
票数 0
EN

Stack Overflow用户

发布于 2021-02-04 15:59:17

在颤振中,pushReplacementNamed将替换和释放当前的UI,所以您需要的只是push

代码语言:javascript
复制
      Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => SecondRoute()),
      );

因此,我建议您阅读一些以下内容,并建议您使用Get插件。

https://pub.dev/packages/get

https://medium.com/flutter/learning-flutters-new-navigation-and-routing-system-7c9068155ade

https://flutter.dev/docs/cookbook/navigation/navigation-basics

票数 0
EN

Stack Overflow用户

发布于 2021-02-04 16:01:28

拥有一个外部TextEditingController。

代码语言:javascript
复制
class MyApp extends StatelessWidget {
  final searchController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        ...
        routes: {
          '/search': (_) => SearchPage(searchController),
          ...
        },
    );
  }
}

SearchPage中,对搜索字段使用传递的searchController

代码语言:javascript
复制
TextField(
  ...
  controller: searchController,
)

如果你真的不想创建一个新的页面。

代码语言:javascript
复制
SearchPage searchPage;

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        ...
        routes: {
          '/search': (_) => searchPage ??= SearchPage(),
          ...
        },
    );
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66048673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档