我正在制作一个简单的应用程序来学习一些关于颤振的知识,但是我在页面之间导航时遇到了问题。
该应用程序只有三个页面(主页,搜索,设置),我做了一个简单的导航栏。我现在用的是:
Navigator.of(context).pushReplacementNamed("/home");问题是,我想在页面之间导航,而不创建“新”页面。例如,如果我在搜索页面上有一个文本字段,然后转到主页并返回到搜索页面,则文本字段中的输入将保持不变。
在页面之间导航而不推送或弹出“新”页的最佳方法是什么?
发布于 2021-02-04 15:58:42
您可以使用底部导航栏查看此示例,以便在小部件之间进行更改以显示不同的视图。您可以按照此示例创建所需的内容。
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,
),
);
}
}发布于 2021-02-04 15:59:17
在颤振中,pushReplacementNamed将替换和释放当前的UI,所以您需要的只是push。
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondRoute()),
);因此,我建议您阅读一些以下内容,并建议您使用Get插件。
https://medium.com/flutter/learning-flutters-new-navigation-and-routing-system-7c9068155ade
https://flutter.dev/docs/cookbook/navigation/navigation-basics
发布于 2021-02-04 16:01:28
拥有一个外部TextEditingController。
class MyApp extends StatelessWidget {
final searchController = TextEditingController();
@override
Widget build(BuildContext context) {
return MaterialApp(
...
routes: {
'/search': (_) => SearchPage(searchController),
...
},
);
}
}在SearchPage中,对搜索字段使用传递的searchController。
TextField(
...
controller: searchController,
)如果你真的不想创建一个新的页面。
SearchPage searchPage;
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
...
routes: {
'/search': (_) => searchPage ??= SearchPage(),
...
},
);
}
}https://stackoverflow.com/questions/66048673
复制相似问题