Getting Incorrect use of ParentDataWidget error when I use ListView
Asked Answered
C

4

12

In this part of my application I have ListView, when I run app I get this error and I can't resolve that:

Scaffold(
  body: Directionality(
textDirection: TextDirection.rtl,
child: Container(
  child: StreamBuilder(
    stream: globals.database.ticketsDao.getTicketsStream(),
    builder: (BuildContext context, AsyncSnapshot<List<Tickets>> snapshot) {
      if (snapshot.hasData) {
        return Column(
          children: <Widget>[
            Expanded(
              child: ListView.separated(
                  itemBuilder: (context, index) {
                    return ListTile(
                      title: Flexible(
                        child: Text(
                          snapshot.data[index].subject,
                          style: Theme.of(context).textTheme.caption.copyWith(fontFamily: 'IranSansBold'),
                        ),
                      ),
                      subtitle: Text(
                        snapshot.data[index].description,
                        style: Theme.of(context).textTheme.caption.copyWith(fontFamily: 'IranSansLight'),
                      ),
                    );
                  },
                  separatorBuilder: (context, index) {
                    return Divider();
                  },
                  itemCount:  snapshot.data.length),
            ),
          ],
        );
      } else {
        return Container(
            child: Center(
          child: Text(
            Strings.notAnyTickets,),
          ),
        ));
      }
    },
  ),
),
));

error:

══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════  
The following assertion was thrown building DefaultTextStyle(debugLabel:
((englishLike subhead  2014).merge(blackMountainView

subhead)).copyWith, inherit: false, color: Color(0xdd000000), family:
Roboto, size: 16.0, weight: 400, baseline: alphabetic, decoration:
TextDecoration.none, softWrap:  wrapping at box width, overflow:
clip):  Incorrect use of ParentDataWidget.

Flexible widgets must be
placed directly inside Flex widgets.  Flexible(no depth, flex: 1,
dirty) has a Flex ancestor, but there are other widgets between them:
 - _ListTile

 - Padding(padding: EdgeInsets(16.0, 0.0, 16.0, 0.0))
 - Semantics(container: false, properties: SemanticsProperties, selected: false, label: null, value:  null, hint: null, hintOverrides:
null)

 - Listener(listeners: [down], behavior: opaque)
 - _GestureSemantics
 - Listener(listeners: <none behavior: translucent)
 - RepaintBoundary
 - IndexedSemantics(index: 0)
 - KeepAlive(keepAlive: false)
 - SliverList(delegate: SliverChildBuilderDelegate#6802e(estimated child count: 19))

 - SliverPadding(padding: EdgeInsets(0.0, 0.0, 0.0, 50.0))
 - Viewport(axisDirection: down, anchor: 0.0, offset: ScrollPositionWithSingleContext#c95ba(offset:
 0.0, range: null..null, viewport: 335.0, ScrollableState, AlwaysScrollableScrollPhysics - ClampingScrollPhysics,
IdleScrollActivity#05a39, ScrollDirection.idle))
 - IgnorePointer-[GlobalKey#a3d1a](ignoring: false, ignoringSemantics: false)

 - Semantics(container: false, properties: SemanticsProperties, label: null, value: null, hint: null,  hintOverrides: null)
 - Listener(listeners: [down], behavior: opaque)
 - _GestureSemantics

 - Listener(listeners: [signal], behavior: deferToChild)
 - _ScrollSemantics-[GlobalKey#7cd1b]
 - RepaintBoundary
 - CustomPaint
 - RepaintBoundary
 - Expanded(flex: 1)  These widgets cannot come between a Flexible and its Flex.  The ownership chain for the parent of the offending
Flexible was:    DefaultTextStyle ← AnimatedDefaultTextStyle ←
_ListTile ← MediaQuery ← Padding ← SafeArea ←  Semantics ← Listener ← _GestureSemantics ← RawGestureDetector ← ⋯
Calculator answered 1/7, 2019 at 15:50 Comment(0)
A
5

Flexible Widgets must be the direct child of an Expanded or Flex Widget.

In your case, you are using Flexible as a part of a ListTile widget, which is not a suitable parent.

Flexible widgets must be placed directly inside Flex widgets.

Flexible has a Flex ancestor, but there are other widgets between them: - _ListTile

Ay answered 6/2, 2020 at 22:24 Comment(0)
F
1
 Widget                      Parent Widget
Expanded()               Row(), Column(), Flex()
Flexible()               Row(), Column(), Flex()
Positioned()                    Stack()
TableCell()                     Table()
Flotation answered 8/6, 2023 at 10:40 Comment(1)
You should add explanation.Basidium
S
0

Flexible and Expanded can have row, column or flex as child, but not ListView related widgets.

If you still want the same feel of expanded properties in your widgets, use ConstrainedBox

Ex:

ConstrainedBox(
  constraints: BoxConstraints(minHeight: 50, maxHeight: 500),
  child: ListView.separated(...),
)
Stines answered 29/4, 2022 at 14:52 Comment(0)
R
0

For me the issue was using Expanded as a parent widget. I have unknowingly added an Expanded as:

 child: Expanded(
              child: Row(
                children: [
                  const SizedBox(
                    width: 15,
                  ),
                  Expanded().....
                  ])
                )

Then I removed the first Expanded

 child:  Row(
                children: [
                  const SizedBox(
                    width: 15,
                  ),
                  Expanded().....
                  ]
                )

and prob solved!!!
Rambort answered 24/8, 2022 at 17:31 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.