Sha*_*az 17 navigation scaffold dart flutter flutter-navigation
我正在创建一个关于颤振的多页应用程序。当我在其中使用导航时,出现黑屏。
导入 'package:flutter/material.dart';
void main() => runApp(MyHomePage());
class MyHomePage 扩展 StatelessWidget {
@覆盖
小部件构建(BuildContext 上下文){
返回 MaterialApp(
主页: Page0(),
);
}
}
类 Page0 扩展了 StatefulWidget {
@覆盖
_Page0State createState() => _Page0State();
}
类 _Page0State 扩展状态 {
@覆盖
小部件构建(BuildContext 上下文){
返回脚手架(
背景颜色:颜色(0xFF493597),
正文:列表视图(
孩子们: [
填充(
填充:EdgeInsets.only(顶部:15.0,左侧:10.0),
),
大小盒(
高度:25.0,
),
填充(
填充:EdgeInsets.only(左:40.0),
孩子:行(
孩子们: [
文本(
'费用',
样式:文本样式(
fontFamily: '蒙特塞拉特',
颜色:Colors.white,
fontWeight: FontWeight.bold,
字体大小:25.0),
),
大小盒(
宽度:10.0,
),
文本(
'什么',
样式:文本样式(
fontFamily: '蒙特塞拉特',
颜色:Colors.white,
字体大小:25.0,
),
),
],
),
),
大小框(高度:60.0),
容器(
边距:EdgeInsets.only(
左:10.0,
右:10.0,
),
高度:MediaQuery.of(context).size.height - 150,
装饰:BoxDecoration(
颜色:颜色(0xFFFCFCFC),
边界半径:BorderRadius.only(
topLeft:半径.circular(75.0),
右上:Radius.circular(75.0),
),
),
孩子:列表视图(
主要:假,
填充:EdgeInsets.only(
左:15.0,
右:20.0,
顶部:25.0,
),
孩子们: [
填充(
填充:const EdgeInsets.only(
顶部:30.0,
),
孩子:列(
孩子们: [
//问候语
排(
孩子们: [
展开(
孩子:中心(
孩子:文本(
'你好!:)',
样式:文本样式(
fontFamily: '永久标记',
颜色:Colors.black,
字体大小:30.0,
),
),
),
),
],
),
大小盒(
高度:30.0,
),
//添加按钮
行(孩子:[
展开(
弹性:1,
孩子:容器(
高度:100.0,
宽度:100.0,
孩子:FittedBox(
孩子:浮动操作按钮(
海拔:10.0,
backgroundColor: Colors.white,
孩子:图标(
Icons.add,
颜色:Colors.black,
),
按下: () {
Navigator.push(context,MaterialPageRoute(builder: (context) => NewTrip()),);
},
),``
),
),
),
//添加文字
展开(
弹性:1,
孩子:文本(
'新旅程',
样式:文本样式(
fontFamily: 'Nanum',
字体大小:30.0,
),
),
),
]),
大小盒(
高度:30.0,
),
//上一个行程按钮
排(
孩子们: [
展开(
弹性:1,
孩子:容器(
高度:100.0,
宽度:100.0,
孩子:FittedBox(
孩子:浮动操作按钮(
海拔:10.0,
backgroundColor: Colors.white,
onPressed: () {},
孩子:图标(
图标评估,
颜色:Colors.black,
),
),
),
),
),
//之前的行程文字
展开(
弹性:1,
孩子:文本(
'以前的旅行',
样式:文本样式(
fontFamily: 'Nanum',
字体大小:30.0,
),
),
)
],
),
大小盒(
高度:50.0,
),
],
),
),
],
),
),
],
),
);
}
}
而 NewTrip 小部件如下
类 NewTrip 扩展 StatelessWidget {
@覆盖
小部件构建(BuildContext 上下文){
返回 MaterialApp(
主页: 脚手架(
正文:文本('新旅行'),
),
);
}
}
主页加载正常,但只要我点击新的旅行按钮,它就会显示黑屏。MaterialApp 或 Scaffold 可能存在问题,但我还无法修复它。谁能告诉我是什么问题以及如何解决它?
根据评论中的要求更新了完整代码。
小智 12
所以在NewTrip()remove 中,MaterialApp因为它继承自父级。刚回来Scaffold。
class NewTrip extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Text('NEW TRIP'),
);
}
}
Run Code Online (Sandbox Code Playgroud)
去除那个 MaterialApp()
class NewTrip extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Text('NEW TRIP'),
);
}
}
Run Code Online (Sandbox Code Playgroud)
前:
class NewTrip extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Text('NEW TRIP'),
);
}
}
Run Code Online (Sandbox Code Playgroud)
因此,为了解决这个问题,我们用 widget 包装了新的导航小scaffold部件
class NewTrip extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Material(
child: Text('NEW TRIP'),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
Sha*_*az 6
好吧,经过在互联网上的一些研究,我发现是 FloatingActionButton 造成了麻烦。
我用MaterialButton替换了FloatingActionButton,这解决了我的问题。
小智 6
请检查您的代码中的完整代码编辑。实际上,您正在使用两个 FloatingActionButton。所以你需要使用两个不同名称的 heroTag。我已经在代码中添加了。NewTrip 类没有问题。
import 'package:flutter/material.dart';
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Page0(),
);
}
}
class Page0 extends StatefulWidget {
@override
_Page0State createState() => _Page0State();
}
class _Page0State extends State {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Color(0xFF493597),
body: ListView(
children: [
Padding(
padding: EdgeInsets.only(top: 15.0, left: 10.0),
),
SizedBox(
height: 25.0,
),
Padding(
padding: EdgeInsets.only(left: 40.0),
child: Row(
children: [
Text(
'Expense',
style: TextStyle(
fontFamily: 'Montserrat',
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 25.0),
),
SizedBox(
width: 10.0,
),
Text(
'What',
style: TextStyle(
fontFamily: 'Montserrat',
color: Colors.white,
fontSize: 25.0,
),
),
],
),
),
SizedBox(height: 60.0),
Container(
margin: EdgeInsets.only(
left: 10.0,
right: 10.0,
),
height: MediaQuery.of(context).size.height - 150,
decoration: BoxDecoration(
color: Color(0xFFFCFCFC),
borderRadius: BorderRadius.only(
topLeft: Radius.circular(75.0),
topRight: Radius.circular(75.0),
),
),
child: ListView(
primary: false,
padding: EdgeInsets.only(
left: 15.0,
right: 20.0,
top: 25.0,
),
children: [
Padding(
padding: const EdgeInsets.only(
top: 30.0,
),
child: Column(
children: [
//greeting text
Row(
children: [
Expanded(
child: Center(
child: Text(
'Hello! :)',
style: TextStyle(
fontFamily: 'Permanent-Marker',
color: Colors.black,
fontSize: 30.0,
),
),
),
),
],
),
SizedBox(
height: 30.0,
),
//add button
Row(children: [
Expanded(
flex: 1,
child: Container(
height: 100.0,
width: 100.0,
child: FittedBox(
child: FloatingActionButton(
heroTag: "btn",
elevation: 10.0,
backgroundColor: Colors.white,
child: Icon(
Icons.add,
color: Colors.black,
),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => NewTrip()),
);
},
),
),
),
),
//add text
Expanded(
flex: 1,
child: Text(
'New trip',
style: TextStyle(
fontFamily: 'Nanum',
fontSize: 30.0,
),
),
),
]),
SizedBox(
height: 30.0,
),
//previous trip button
Row(
children: [
Expanded(
flex: 1,
child: Container(
height: 100.0,
width: 100.0,
child: FittedBox(
child: FloatingActionButton(
heroTag: "btn1",
elevation: 10.0,
backgroundColor: Colors.white,
onPressed: () {},
child: Icon(
Icons.assessment,
color: Colors.black,
),
),
),
),
),
//previous trip text
Expanded(
flex: 1,
child: Text(
'Previous trips',
style: TextStyle(
fontFamily: 'Nanum',
fontSize: 30.0,
),
),
)
],
),
SizedBox(
height: 50.0,
),
],
),
),
],
),
),
],
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
NewTrip 类
class NewTrip extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Text('NEW TRIP'),
);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2463 次 |
| 最近记录: |