【问题标题】:Failed assertion: line 549 pos 12: 'child.hasSize': is not true断言失败:第 549 行 pos 12:'child.hasSize':不正确
【发布时间】:2020-04-22 20:29:27
【问题描述】:

我是 Flutter 的新手。我正在使用底部导航视图。在 Dashboard 类中,有底部导航。底部导航的第一个是具有标签视图的 Home 类。 tabview 的第一页是 NewRequest 类。当应用程序第一次运行时,标签视图的第一页没有加载,但是当进入其他类并返回 Home 时,New Request 被加载。首次运行应用程序时如何加载 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,
                  ),
                )),
              ])
        ],
      ),
    ));
   }

【问题讨论】:

    标签: flutter flutter-listview


    【解决方案1】:

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

    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 上的这篇文章使用容器。)如果父级也没有特定的大小(例如,垂直的行、列、列表视图),则可能会发生错误。正如您在上面的代码中看到的那样,我能够通过将 TextField 包装在扩展的 Widget 中来解决此问题,该 Widget 会填充其父级以获取其自己的维度,然后将其传递给TextField

    【讨论】:

      【解决方案2】:

      抛出错误的小部件可以包装在具有指定高度的容器中。它对我有用。

      【讨论】:

        【解决方案3】:

        @Nbn 尝试删除 My Home Page 文件的 TabBar 小部件中的 isScrollable 属性。

        【讨论】:

          【解决方案4】:

          对我来说,它是将 Expanded 小部件添加到 listView 的元素中 所以我删除了它,它工作正常。

          【讨论】:

            猜你喜欢
            • 2020-12-29
            • 2021-11-02
            • 2021-05-30
            • 1970-01-01
            • 1970-01-01
            • 2020-02-01
            • 1970-01-01
            • 2022-06-27
            • 2023-01-24
            相关资源
            最近更新 更多