Android 如何在Flatter中从dropdownbutton导航到另一个屏幕?
我试图通过下拉按钮按下列表中的一个项目后,让下拉列表导航到另一个屏幕。我试过使用Navigator.push直接进入onChanged,但这不起作用。我尝试在onChanged中创建一个处于设置状态的新按钮。因为我不知道怎么做,我怎么能这样做Android 如何在Flatter中从dropdownbutton导航到另一个屏幕?,android,mobile,dart,flutter,Android,Mobile,Dart,Flutter,我试图通过下拉按钮按下列表中的一个项目后,让下拉列表导航到另一个屏幕。我试过使用Navigator.push直接进入onChanged,但这不起作用。我尝试在onChanged中创建一个处于设置状态的新按钮。因为我不知道怎么做,我怎么能这样做 import 'package:flutter/material.dart'; void main() => runApp(new HomeNavigator()); class HomeNavigator extends StatefulWid
import 'package:flutter/material.dart';
void main() => runApp(new HomeNavigator());
class HomeNavigator extends StatefulWidget {
@override
_HomeNavigator createState() => _HomeNavigator();
}
class _HomeNavigator extends State<HomeNavigator> {
List<DropdownMenuItem<String>> listMunicipalities = [];
String selected = null;
void loadData() {
listMunicipalities = [];
listMunicipalities.add(new DropdownMenuItem(
child: new Text('Port Moody'),
value: 'Port Moody',
));
listMunicipalities.add(new DropdownMenuItem(
child: new Text('Vancouver Downtown'),
value: 'Vancouver Downtown',
));
listMunicipalities.add(new DropdownMenuItem(
child: new Text('Coquitlam'),
value: 'Coquitlam',
));
}
@override
Widget build(BuildContext context) {
loadData();
Color gradientStart = Colors.deepOrange[700];
Color gradientEnd = Colors.purple[500];
return new MaterialApp(
home: new Scaffold(
body: new Container(
decoration: new BoxDecoration(
gradient: new LinearGradient(
colors: [gradientEnd, gradientStart],
begin: new FractionalOffset(0.0, 0.5),
end: new FractionalOffset(0.5, 0.0),
stops: [0.0, 1.0]),
),
child: Stack(children: [
Container(
child: Text('',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 30.0,
fontFamily: 'College-Block',
color: Colors.white.withOpacity(0.7))),
alignment: Alignment(0.0, -0.5)),
Padding(
padding: const EdgeInsets.all(8.0),
child: new Center(
child: new Container(
alignment: Alignment(0.0, 0.05),
child: Container(
width: 350.0,
child: DropdownButtonHideUnderline(
child: new DropdownButton(
value: selected,
items: listMunicipalities,
hint: Text(
'Select City',
textAlign: TextAlign.center,
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.white.withOpacity(0.5)),
),
onChanged: (value){
}),
)),
)))
]))));
}
}
class HomePage extends StatefulWidget{
@override
_HomePage createState() => _HomePage();
}
class _HomePage extends State<HomePage> {
Widget build(BuildContext context){
return Scaffold(
appBar: AppBar(
title: Text('')
),
);
}
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(新的HomeNavigator());
类HomeNavigator扩展StatefulWidget{
@凌驾
_HomeNavigator createState()=>\u HomeNavigator();
}
类_HomeNavigator扩展状态{
列表列表=[];
所选字符串=空;
void loadData(){
列表=[];
添加(新的下拉菜单项)(
子项:新文本('Port Moody'),
值:'穆迪港',
));
添加(新的下拉菜单项)(
儿童:新文本(“温哥华市中心”),
价值:'温哥华市中心',
));
添加(新的下拉菜单项)(
子:新文本(“Coquitlam”),
值:“Coquitlam”,
));
}
@凌驾
小部件构建(构建上下文){
loadData();
Color gradientStart=Colors.deepOrange[700];
颜色渐变结束=颜色。紫色[500];
返回新材料PP(
家:新脚手架(
主体:新容器(
装饰:新盒子装饰(
渐变:新的线性渐变(
颜色:[渐变结束,渐变开始],
开始:新的分馏偏移(0.0,0.5),
结束:新的分馏偏移(0.5,0.0),
停止:[0.0,1.0]),
),
子:堆栈(子:[
容器(
子:文本(“”,
textAlign:textAlign.center,
样式:TextStyle(
字体大小:30.0,
fontFamily:“大学街区”,
颜色:颜色。白色。不透明度(0.7)),
对齐:对齐(0.0,-0.5)),
填充物(
填充:常数边集全部(8.0),
孩子:新中心(
子容器:新容器(
对齐:对齐(0.0,0.05),
子:容器(
宽度:350.0,
子项:DropdownButtonHideUnderline(
孩子:新的下拉按钮(
值:选中,
项目:列名城市,
提示:文本(
“选择城市”,
textAlign:textAlign.center,
样式:TextStyle(
fontWeight:fontWeight.bold,
颜色:颜色。白色。不透明度(0.5)),
),
一旦更改:(值){
}),
)),
)))
]))));
}
}
类主页扩展了StatefulWidget{
@凌驾
_主页createState()=>\u主页();
}
类(扩展状态){
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“”)
),
);
}
}
您只需使用那边的简单开关盒即可。请参考下面的示例以明确想法
import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(
title: 'Navigation Basics',
home: FirstScreen(),
));
}
class FirstScreen extends StatelessWidget {
String _selectedGender=null;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('First Screen'),
),
body: Column(
children: <Widget>[
DropdownButton(
value: _selectedGender,
items: _dropDownItem(),
onChanged: (value){
_selectedGender=value;
switch(value){
case "Male" :
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondScreen()),
);
break;
case "Others" :
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondScreen()),
);
break;
case "Female" :
Navigator.push(
context,
MaterialPageRoute(builder: (context) => third()),
);
break;
}
},
hint: Text('Select Gender'),
),
],
),
);
}
List<DropdownMenuItem<String>> _dropDownItem() {
List<String> ddl = ["Male", "Female", "Others"];
return ddl.map(
(value) =>
DropdownMenuItem(
value: value,
child: Text(value),
)
).toList();
}
}
class SecondScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Second Screen"),
),
body: Center(
child: RaisedButton(
onPressed: () {
Navigator.pop(context);
},
child: Text('Go back!'),
),
),
);
}
}
class third extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("tgird Screen"),
),
body: Center(
child: RaisedButton(
onPressed: () {
Navigator.pop(context);
},
child: Text('Go back!'),
),
),
);
}
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(材料应用程序)(
标题:“导航基础”,
主页:FirstScreen(),
));
}
类FirstScreen扩展了无状态小部件{
字符串_selectedGender=null;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“第一屏”),
),
正文:专栏(
儿童:[
下拉按钮(
值:_selectedGender,
项目:_dropDownItem(),
一旦更改:(值){
_selectedGender=值;
开关(值){
案件“男”:
导航器。推(
上下文
MaterialPage路由(生成器:(上下文)=>SecondScreen()),
);
打破
“其他”一案:
导航器。推(
上下文
MaterialPage路由(生成器:(上下文)=>SecondScreen()),
);
打破
“女性”一案:
导航器。推(
上下文
MaterialPage路由(生成器:(上下文)=>third()),
);
打破
}
},
提示:文本(“选择性别”),
),
],
),
);
}
列表_dropDownItem(){
列表ddl=[“男性”、“女性”、“其他人”];
返回ddl.map(
(值)=>
下拉菜单项(
价值:价值,
子项:文本(值),
)
).toList();
}
}
类SecondScreen扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“第二屏”),
),
正文:中(
孩子:升起按钮(
已按下:(){
Navigator.pop(上下文);
},
child:Text('Go back!'),
),
),
);
}
}
第三类扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“tgird屏幕”),
),
正文:中(
孩子:升起按钮(
已按下:(){
Navigator.pop(上下文);
},
child:Text('Go back!'),
),
),
);
}
}
有关详细信息,请转至文档
在代码中添加以下行以进行导航
onChanged: (value){
Navigator.push(context,MaterialPageRoute(builder: (context) =>
YourScreenInstance()),);
}
Navigator.popAndPushNamed(context, "/YourScreenInstance");
Navigator.of(context).pushNamed('/NewPage');