gpt4 book ai didi

flutter - 失败的断言 : line 549 pos 12: 'child.hasSize' : is not true

转载 作者:行者123 更新时间:2023-12-04 13:16:49 26 4
gpt4 key购买 nike

我是 Flutter 的新手。我正在使用底部导航 View 。在 仪表板 类,有底部导航。底部导航第一个是首页 具有选项卡 View 的类。 tabview的第一页是新请求 类(class)。当应用程序第一次运行时,选项卡 View 的第一页没有加载,但是当进入其他类并返回首页 , 新请求 已加载。应用程序首次运行时如何加载tabview第一页?我已实现如下:

class Dashboard extends StatefulWidget{

@override
State<StatefulWidget> createState() {
return _DashboardState();
}

}
class _DashboardState extends State<Dashboard>{

int _currentIndex=0;
bool home=true;
final tabs=[
Home(),
Center(child: Text('History')),
Center(child: Text('Wallet')),
Center(child: Text('More')),
];

final _title=[
Center(child: Text("Dashboard"),),
Center(child:Text("History"),),
Center(child:Text("Wallet"),),
Center(child:Text("More"),),];


@override
Widget build(BuildContext context) {
return Scaffold(
appBar: home ? null :AppBar(
title: _title[_currentIndex],
automaticallyImplyLeading: false,
),
body: Container(
child: tabs[_currentIndex],
),
bottomNavigationBar: _bottomNavigationBar(),
);
}

Widget _bottomNavigationBar(){
return BottomNavigationBar(
currentIndex: _currentIndex,
type: BottomNavigationBarType.fixed,
backgroundColor: Theme.of(context).primaryColor,
selectedItemColor: Theme.of(context).accentColor,
unselectedItemColor: Colors.white,
items: [
BottomNavigationBarItem(
icon: Icon(Icons.home),
title: Text("Home"),
),
BottomNavigationBarItem(
icon: Icon(Icons.history),
title: Text("History"),
),
BottomNavigationBarItem(
icon: Icon(Icons.account_balance_wallet),
title: Text("Wallet"),
),
BottomNavigationBarItem(
icon: Icon(Icons.menu),
title: Text("More"),
)
],
onTap: (index){
setState(() {
_currentIndex=index;
if (index==0) {
home=true;
}else{
home=false;
}
});
},
) ;
}
}

我的主页
class Home extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _HomeState();
}
}

class _HomeState extends State<Home> {
int index;
@override
void initState() {
super.initState();
index = 0;
}

final pages = [
NewRequest(),
new Column(
children: <Widget>[new Text("Accepted Page")],
),
new Column(
children: <Widget>[new Text("Cooking Page")],
),
new Column(
children: <Widget>[new Text("Cooked Page")],
)
];

final tabs = [
Text('Request'),
Text('Accepted'),
Text('Cooking'),
Text('Cooked'),
];

@override
Widget build(BuildContext context) {
return new MaterialApp(
debugShowCheckedModeBanner: false,
home: new DefaultTabController(
length: 4,
initialIndex: 0,
child: new Scaffold(
appBar: new PreferredSize(
preferredSize: Size.fromHeight(56.0),
child: new Container(
color: Theme.of(context).primaryColor,
child: new SafeArea(
child: Column(
children: <Widget>[
new Expanded(
child: new Container(
child: new TabBar(
unselectedLabelColor: Colors.white,
labelColor: Theme.of(context).accentColor,
indicatorColor: Theme.of(context).accentColor,
isScrollable: true,
tabs: List<Widget>.generate(4, (index) {
return tabs[index];
}),
)),
),
],
),
),
),
),
body: TabBarView(
children: [
NewRequest(),
new Column(
children: <Widget>[new Text("Accepted Page")],
),
new Column(
children: <Widget>[new Text("Cooking Page")],
),
new Column(
children: <Widget>[new Text("Cooked Page")],
)
],
)),
),
);
}

新请求页面
class NewRequest extends StatelessWidget{

@override
Widget build(BuildContext context) {

return ListView(
shrinkWrap: true,
children: <Widget>[_CardView(), _CardView(), _CardView(), _CardView()],
);
}
}

Widget _CardView() {
return Card(
margin: EdgeInsets.all(15.0),
elevation: 15.0,
child: Container(
height: 185,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Row(
children: <Widget>[
Expanded(
child: FittedBox(
child: Image.asset('assets/images/momo.jpg'),
fit: BoxFit.fill,
),
),
Container(
child: Expanded(
child: Container(
margin: EdgeInsets.only(left: 10.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Text("Momo", style: TextStyle(fontSize: 16.0))
],
),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Text(
"Rs.100",
style: TextStyle(fontSize: 16.0),
)
],
),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Text(
"2 Plate",
style: TextStyle(fontSize: 16.0),
)
],
),
],
),
)))
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
Expanded(
child: Container(
margin: EdgeInsets.only(
left: 5.0, right: 5.0, top: 5.0, bottom: 2.0),
child: RaisedButton(
color: Colors.red,
child: Text(
"Reject",
style: TextStyle(color: Colors.white),
),
onPressed: () => null,
),
)),
Expanded(
child: Container(
margin: EdgeInsets.only(
left: 5.0, right: 5.0, top: 5.0, bottom: 0.0),
child: RaisedButton(
color: Colors.green,
child: Text(
"Approve",
style: TextStyle(color: Colors.white),
),
onPressed: () => null,
),
)),
])
],
),
));
}

最佳答案

这已经很晚了,但我刚刚遇到了同样的问题。我不确定如何解决您的具体示例,但我在这里发布了我的问题的解决方案,希望它可以帮助其他人。

return Row(children: [
Container(child: Text('•'), margin: EdgeInsets.only(left: 25*indentLevel.toDouble(), right: 5),),
Expanded(child: TextField(
cursorColor: Colors.black,
autofocus: true,
))
]);
我的问题是 TextField - 失败的断言:...'hasSize。'
TextField 没有明确的大小选项,而是从其父级继承。 (假设来自 sizing a TextField 上的这篇文章使用容器。)如果父级也没有特定的大小(例如垂直行、列、ListView),则可能会发生错误。正如你在我上面的代码中看到的, 我能够修复 这个问题通过包装 TextField在扩展的 Widget 中,它填充其父级以获得自己的尺寸,然后向下传递给 TextField .

关于flutter - 失败的断言 : line 549 pos 12: 'child.hasSize' : is not true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59592737/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com