Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

- How to fix it : Incorrect use of ParentDataWidget?

I am getting Error Incorrect use of ParentDataWidget.

And the lists not show the item in first time.

The ParentDataWidget Expanded(flex: 1) wants to apply ParentData of type FlexParentData to a RenderObject, which has been set up to accept ParentData of incompatible type ParentData.

Usually, this means that the Expanded widget has the wrong ancestor RenderObjectWidget. Typically, Expanded widgets are placed directly inside Flex widgets. The offending Expanded is currently placed inside a ConstrainedBox widget.

@override
Widget build(BuildContext context) {
 return Scaffold(
     appBar: AppBar(
       actions: <Widget>[
         IconButton(
           icon: Icon(Icons.shopping_cart),
           onPressed: () {},
         )
       ],
       backgroundColor: Colors.green,
     ),
     drawer: Drawer(
       child: AppDrawer(),
     ),
     body: SingleChildScrollView(
       child: ConstrainedBox(
         constraints: BoxConstraints(),
         child: Column(
           children: <Widget>[
             Container(
               height: 200,
               width: double.infinity,
               child: HomeSlider(),
             ),
             Padding(
               padding: EdgeInsets.only(top: 14.0, left: 8.0, right: 8.0),
               child: Text(
                   AppLocalizations.of(context)
                       .translate('leatest_producrs'),
                   style: TextStyle(
                       color: Theme.of(context).accentColor,
                       fontSize: 18,
                       fontWeight: FontWeight.w700)),
             ),
             Container(
               margin: EdgeInsets.symmetric(vertical: 8.0),
               height: 200.0,
               child: Expanded(
                 child: ListView.builder(
                   shrinkWrap: true,
                   scrollDirection: Axis.horizontal,
                   itemCount: cards.length,
                   itemBuilder: (BuildContext context, int index) => Card(
                     child: InkWell(
                       child: Column(
                         children: [
                           Flexible(
                             child: Container(
                               height: double.infinity,
                               width: 120,
                               decoration: BoxDecoration(
                                   image: DecorationImage(
                                 image: NetworkImage(
                                   cards[index].productImg,
                                 ),
                                 fit: BoxFit.fitHeight,
                               )),
                             ),
                           ),
                           Container(
                             width: 150,
                             padding: EdgeInsets.all(10),
                             child: Text(cards[index].productName,
                                 style: new TextStyle(fontSize: 12),
                                 softWrap: true),
                           ),
                         ],
                       ),
                       onTap: () {
                         Fluttertoast.showToast(
                             msg: cards[index].productName,
                             toastLength: Toast.LENGTH_SHORT,
                             gravity: ToastGravity.BOTTOM,
                             timeInSecForIosWeb: 1,
                             backgroundColor: Colors.white70,
                             textColor: Colors.black,
                             fontSize: 16.0);
                       },
                     ),
                   ),
                 ),
               ),
             ),
             Container(
               child: Padding(
                 padding: EdgeInsets.only(top: 6.0, left: 8.0, right: 8.0),
                 child: Image(
                   fit: BoxFit.cover,
                   image: AssetImage('assets/images/banner-1.jpg'),
                 ),
               ),
             ),
             Row(
               mainAxisAlignment: MainAxisAlignment.spaceBetween,
               children: <Widget>[
                 Padding(
                   padding: EdgeInsets.only(top: 8.0, left: 8.0, right: 8.0),
                   child: Text('Featured Products',
                       style: TextStyle(
                           color: Theme.of(context).accentColor,
                           fontSize: 18,
                           fontWeight: FontWeight.w700)),
                 ),
                 Padding(
                   padding: const EdgeInsets.only(
                       right: 8.0, top: 8.0, left: 8.0),
                   child: RaisedButton(
                       color: Theme.of(context).primaryColor,
                       child: Text('View All',
                           style: TextStyle(color: Colors.white)),
                       onPressed: () {
                         Navigator.pushNamed(context, '/categorise');
                       }),
                 )
               ],
             ),
             Container(
               child: GridView.count(
                 shrinkWrap: true,
                 physics: NeverScrollableScrollPhysics(),
                 crossAxisCount: 2,
                 padding:
                     EdgeInsets.only(top: 8, left: 6, right: 6, bottom: 12),
                 children: List.generate(cards.length, (index) {
                   return Container(
                     child: Card(
                       clipBehavior: Clip.antiAlias,
                       child: InkWell(
                         onTap: () {
                           print('Card tapped.');
                         },
                         child: Column(
                           crossAxisAlignment: CrossAxisAlignment.start,
                           children: <Widget>[
                             Flexible(
                               child: Container(
                                 height: double.infinity,
                                 width: double.infinity,
                                 decoration: BoxDecoration(
                                     image: DecorationImage(
                                   image: NetworkImage(
                                     cards[index].productImg,
                                   ),
                                   fit: BoxFit.fitHeight,
                                 )),
                               ),
                             ),
                             ListTile(
                                 title: Text(
                               cards[index].productName,
                               style: TextStyle(
                                   fontWeight: FontWeight.w700,
                                   fontSize: 12),
                             )),
                           ],
                         ),
                       ),
                     ),
                   );
                 }),
               ),
             ),
             Container(
               child: Padding(
                 padding: EdgeInsets.only(
                     top: 6.0, left: 8.0, right: 8.0, bottom: 10),
                 child: Image(
                   fit: BoxFit.cover,
                   image: AssetImage('assets/images/banner-2.jpg'),
                 ),
               ),
             )
           ],
         ),
       ),
     ));


Error Codes are


══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following assertion was thrown while applying parent data.:
Incorrect use of ParentDataWidget.
The ParentDataWidget Expanded(flex: 1) wants to apply ParentData of type FlexParentData to a
RenderObject, which has been set up to accept ParentData of incompatible type ParentData.
Usually, this means that the Expanded widget has the wrong ancestor RenderObjectWidget. Typically,
Expanded widgets are placed directly inside Flex widgets.
The offending Expanded is currently placed inside a ConstrainedBox widget.
The ownership chain for the RenderObject that received the incompatible parent data was:
  RepaintBoundary ← NotificationListener<ScrollNotification> ← GlowingOverscrollIndicator ←
Scrollable ← ListView ← Expanded ← ConstrainedBox ← Padding ← Container ← Column ← ⋯

When the exception was thrown, this was the stack:
.
.
.
.
(elided 4 frames from class _RawReceivePortImpl, class _Timer, and dart:async-patch)
════════════════════════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The following assertion was thrown while applying parent data.:
Incorrect use of ParentDataWidget.

The ParentDataWidget Expanded(flex: 1) wants to apply ParentData of type FlexParentData to a RenderObject, which has been set up to accept ParentData of incompatible type ParentData.

Usually, this means that the Expanded widget has the wrong ancestor RenderObjectWidget. Typically, Expanded widgets are placed directly inside Flex widgets.
The offending Expanded is currently placed inside a ConstrainedBox widget.

The ownership chain for the RenderObject that received the incompatible parent data was:
  RepaintBoundary ← NotificationListener<ScrollNotification> ← GlowingOverscrollIndicator ← Scrollable ← ListView ← Expanded ← ConstrainedBox ← Padding ← Container ← Column ← ⋯
When the exception was thrown, this was the stack: 
#0      RenderObjectElement._updateParentData.<anonymous closure> (package:flutter/src/widgets/framework.dart:5689:11)
#1      RenderObjectElement._updateParentData (package:flutter/src/widgets/framework.dart:5705:6)
#2      ParentDataElement._applyParentData.applyParentDataToChild (package:flutter/src/widgets/framework.dart:4939:15)
#3      ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4600:14)
#4      ParentDataElement._applyParentData.applyParentDataToChild (package:flutter/src/widgets/framework.dart:4942:15)
...
════════════════════════════════════════════════════════════════════════════════════════════════════
like image 398
awshakam98 Avatar asked Oct 07 '20 19:10

awshakam98


2 Answers

You can copy paste run full code below
In your case, you do not need Expanded because you already set Container height to 200
code snippet

Container(
        margin: EdgeInsets.symmetric(vertical: 8.0),
        height: 200.0,
        child: ListView.builder(

working demo

enter image description here

full code

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class CardItem {
  String productImg;
  String productName;

  CardItem({this.productImg, this.productName});
}

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 _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  List<CardItem> cards = [
    CardItem(productImg: "https://picsum.photos/250?image=9", productName: "a"),
     CardItem(
        productImg: "https://picsum.photos/250?image=10", productName: "b"),
    CardItem(
        productImg: "https://picsum.photos/250?image=11", productName: "c"),
    CardItem(
        productImg: "https://picsum.photos/250?image=12", productName: "d"),
    CardItem(
        productImg: "https://picsum.photos/250?image=13", productName: "e"),
    CardItem(
        productImg: "https://picsum.photos/250?image=14", productName: "f"),
    CardItem(
        productImg: "https://picsum.photos/250?image=15", productName: "g"),
    CardItem(
        productImg: "https://picsum.photos/250?image=16", productName: "h")
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          actions: <Widget>[
            IconButton(
              icon: Icon(Icons.shopping_cart),
              onPressed: () {},
            )
          ],
          backgroundColor: Colors.green,
        ),
        /* drawer: Drawer(
          child: AppDrawer(),
        ),*/
        body: SingleChildScrollView(
            child: ConstrainedBox(
              constraints: BoxConstraints(),
              child: Column(
                children: <Widget>[
                  Container(
                    height: 200,
                    width: double.infinity,
                    child: Text("HomeSlider()"),
                  ),
                  Padding(
                    padding: EdgeInsets.only(top: 14.0, left: 8.0, right: 8.0),
                    child: Text(
                        'leatest_producrs',
                        style: TextStyle(
                            color: Theme.of(context).accentColor,
                            fontSize: 18,
                            fontWeight: FontWeight.w700)),
                  ),
                  Container(
                    margin: EdgeInsets.symmetric(vertical: 8.0),
                    height: 200.0,
                    child: ListView.builder(
                      shrinkWrap: true,
                      scrollDirection: Axis.horizontal,
                      itemCount: cards.length,
                      itemBuilder: (BuildContext context, int index) => Card(
                        child: InkWell(
                          child: Column(
                            children: [
                              Flexible(
                                child: Container(
                                  height: double.infinity,
                                  width: 120,
                                  decoration: BoxDecoration(
                                      image: DecorationImage(
                                        image: NetworkImage(
                                          cards[index].productImg,
                                        ),
                                        fit: BoxFit.fitHeight,
                                      )),
                                ),
                              ),
                              Container(
                                width: 150,
                                padding: EdgeInsets.all(10),
                                child: Text(cards[index].productName,
                                    style: new TextStyle(fontSize: 12),
                                    softWrap: true),
                              ),
                            ],
                          ),
                          onTap: () {

                          },
                        ),
                      ),
                    ),
                  ),
                  Container(
                    child: Padding(
                      padding: EdgeInsets.only(top: 6.0, left: 8.0, right: 8.0),
                      child: Image(
                        fit: BoxFit.cover,
                        image: AssetImage('assets/images/banner-1.jpg'),
                      ),
                    ),
                  ),
                  Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: <Widget>[
                      Padding(
                        padding: EdgeInsets.only(top: 8.0, left: 8.0, right: 8.0),
                        child: Text('Featured Products',
                            style: TextStyle(
                                color: Theme.of(context).accentColor,
                                fontSize: 18,
                                fontWeight: FontWeight.w700)),
                      ),
                      Padding(
                        padding: const EdgeInsets.only(
                            right: 8.0, top: 8.0, left: 8.0),
                        child: RaisedButton(
                            color: Theme.of(context).primaryColor,
                            child: Text('View All',
                                style: TextStyle(color: Colors.white)),
                            onPressed: () {
                              Navigator.pushNamed(context, '/categorise');
                            }),
                      )
                    ],
                  ),
                  Container(
                    child: GridView.count(
                      shrinkWrap: true,
                      physics: NeverScrollableScrollPhysics(),
                      crossAxisCount: 2,
                      padding:
                      EdgeInsets.only(top: 8, left: 6, right: 6, bottom: 12),
                      children: List.generate(cards.length, (index) {
                        return Container(
                          child: Card(
                            clipBehavior: Clip.antiAlias,
                            child: InkWell(
                              onTap: () {
                                print('Card tapped.');
                              },
                              child: Column(
                                crossAxisAlignment: CrossAxisAlignment.start,
                                children: <Widget>[
                                  Flexible(
                                    child: Container(
                                      height: double.infinity,
                                      width: double.infinity,
                                      decoration: BoxDecoration(
                                          image: DecorationImage(
                                            image: NetworkImage(
                                              cards[index].productImg,
                                            ),
                                            fit: BoxFit.fitHeight,
                                          )),
                                    ),
                                  ),
                                  ListTile(
                                      title: Text(
                                        cards[index].productName,
                                        style: TextStyle(
                                            fontWeight: FontWeight.w700,
                                            fontSize: 12),
                                      )),
                                ],
                              ),
                            ),
                          ),
                        );
                      }),
                    ),
                  ),
                  Container(
                    child: Padding(
                      padding: EdgeInsets.only(
                          top: 6.0, left: 8.0, right: 8.0, bottom: 10),
                      child: Image(
                        fit: BoxFit.cover,
                        image: AssetImage('assets/images/banner-2.jpg'),
                      ),
                    ),
                  )
                ],
              ),
            ),
          )
        );
  }
}
like image 150
chunhunghan Avatar answered Nov 09 '22 21:11

chunhunghan


The Expanded widget has to be a direct child of a Column, Row or Flex. You have it wrapped in a Container. Try to swap the Container and Expanded widgets.

like image 35
kazume Avatar answered Nov 09 '22 21:11

kazume