Dart 制作一个非全屏颤振路线
嗨,我正在尝试实现一个类似Instagram的导航系统。我想知道如何将非全屏窗口小部件推送到Navigator,同时使Navigator将窗口小部件推到我视图的子视图中(以使父窗口小部件中的底部选项卡保持固定)。查看了此页面和PageRouteBuilder,但完全了解如何做到这一点: 有人做到了吗Dart 制作一个非全屏颤振路线,dart,flutter,Dart,Flutter,嗨,我正在尝试实现一个类似Instagram的导航系统。我想知道如何将非全屏窗口小部件推送到Navigator,同时使Navigator将窗口小部件推到我视图的子视图中(以使父窗口小部件中的底部选项卡保持固定)。查看了此页面和PageRouteBuilder,但完全了解如何做到这一点: 有人做到了吗 class _MainPage extends State<MainPage> { @override Widget build(BuildContext context) {
class _MainPage extends State<MainPage> {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("Home Sweet Home"),
),
body: new Column(
children: <Widget>[
PUT_NAVIGATOR_RESULT_HERE,
new Row(
children: <Widget>[
new RaisedButton(onPressed: addWidget, child: new Text("home")),
new RaisedButton(onPressed: addWidget, child: new Text("discover")),
new RaisedButton(onPressed: addWidget, child: new Text("heart")),
new RaisedButton(onPressed: addWidget, child: new Text("user")),
],
)
],
),
);
}
//... other functions
}
class\u主页扩展状态{
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(“甜蜜家园”),
),
正文:新栏目(
儿童:[
把导航器结果放在这里,
新行(
儿童:[
新建RaisedButton(按下:添加小部件,子项:新建文本(“主页”),
新建RaisedButton(按下:添加小部件,子项:新文本(“发现”),
新建RaisedButton(按下:添加小部件,子项:新建文本(“心脏”),
新建RaisedButton(按下时:addWidget,子项:新建文本(“用户”),
],
)
],
),
);
}
//……其他职能
}
我已经用一堆小部件实现了我想要的功能,但这对hero不起作用:(.您可以使用
页面视图
小部件
一个有效的例子:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int bottomSelectedIndex = 0;
List<BottomNavigationBarItem> buildBottomNavBarItems() {
return [
BottomNavigationBarItem(
icon: new Icon(Icons.home),
title: new Text('Red')
),
BottomNavigationBarItem(
icon: new Icon(Icons.search),
title: new Text('Blue'),
),
BottomNavigationBarItem(
icon: Icon(Icons.info_outline),
title: Text('Yellow')
)
];
}
PageController pageController = PageController(
initialPage: 0,
keepPage: true,
);
Widget buildPageView() {
return PageView(
controller: pageController,
onPageChanged: (index) {
pageChanged(index);
},
children: <Widget>[
Red(),
Blue(),
Yellow(),
],
);
}
@override
void initState() {
super.initState();
}
void pageChanged(int index) {
setState(() {
bottomSelectedIndex = index;
});
}
void bottomTapped(int index) {
setState(() {
bottomSelectedIndex = index;
pageController.animateToPage(index, duration: Duration(milliseconds: 500), curve: Curves.ease);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: buildPageView(),
bottomNavigationBar: BottomNavigationBar(
currentIndex: bottomSelectedIndex,
onTap: (index) {
bottomTapped(index);
},
items: buildBottomNavBarItems(),
),
);
}
}
class Red extends StatefulWidget {
@override
_RedState createState() => _RedState();
}
class _RedState extends State<Red> {
@override
Widget build(BuildContext context) {
return Container(
color: Colors.red,
);
}
}
class Blue extends StatefulWidget {
@override
_BlueState createState() => _BlueState();
}
class _BlueState extends State<Blue> {
@override
Widget build(BuildContext context) {
return Container(
color: Colors.blueAccent,
);
}
}
class Yellow extends StatefulWidget {
@override
_YellowState createState() => _YellowState();
}
class _YellowState extends State<Yellow> {
@override
Widget build(BuildContext context) {
return Container(
color: Colors.yellowAccent,
);
}}
导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
//此小部件是应用程序的根。
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:MyHomePage(标题:“颤振演示主页”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
int bottomSelectedIndex=0;
列出buildBottomNavBarItems(){
返回[
底部导航气压计(
图标:新图标(Icons.home),
标题:新文本(“红色”)
),
底部导航气压计(
图标:新图标(Icons.search),
标题:新文本(“蓝色”),
),
底部导航气压计(
图标:图标(Icons.info\u轮廓),
标题:文本(“黄色”)
)
];
}
PageController=PageController(
初始页:0,
基帕奇:是的,
);
Widget buildPageView(){
返回页面视图(
控制器:页面控制器,
onPageChanged:(索引){
页面更改(索引);
},
儿童:[
红色(),
蓝色(),
黄色(),
],
);
}
@凌驾
void initState(){
super.initState();
}
无效页面已更改(整型索引){
设置状态(){
bottomSelectedIndex=索引;
});
}
无效(整数索引){
设置状态(){
bottomSelectedIndex=索引;
pageController.animateToPage(索引,持续时间:持续时间(毫秒:500),曲线:Curves.ease);
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:buildPageView(),
底部导航栏:底部导航栏(
currentIndex:bottomSelectedIndex,
onTap:(索引){
指数;
},
项目:buildBottomNavBarItems(),
),
);
}
}
类Red扩展StatefulWidget{
@凌驾
_RedState createState()=>\u RedState();
}
类_RedState扩展状态{
@凌驾
小部件构建(构建上下文){
返回容器(
颜色:颜色,红色,
);
}
}
类Blue扩展了StatefulWidget{
@凌驾
_BlueState createState();
}
类_BlueState扩展状态{
@凌驾
小部件构建(构建上下文){
返回容器(
颜色:Colors.blueAccent,
);
}
}
类黄色扩展StatefulWidget{
@凌驾
_YellowState createState();
}
类_YellowState扩展了状态{
@凌驾
小部件构建(构建上下文){
返回容器(
颜色:Colors.yellowAccent,
);
}}
来源:您是否考虑过使用底部导航栏?以下是从Flatter Gallery示例中测试该功能的代码。我已经尝试过了,但我希望每个选项卡都可以堆叠一些内容,并可以转到内部页面和其他内容….(就像instagram)可能与或重复