user1048175
user1048175

Reputation: 1130

Show content under a SliverChildBuilderDelegate

Is there a way to show widgets (for example a SliverToBoxAdapter or a normal Container) underneath a SliverChildBuilderDelegate? I have a condition that turns on the SliverList and there can only be one parent widget for a condition, what would I need to wrap it in?

Code currently looks like:

lass Testaaa extends StatelessWidget {
  final bool hasData;

  const Testaaa({Key key, this.hasData}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      drawer: DrawerSettings(),
      body: Container(
        child: CustomScrollView(
          slivers: <Widget>[
            AppBarSliver(),
            hasData
                ? SliverList(
                    delegate: SliverChildBuilderDelegate(
                      (BuildContext context, int i) {
                        return ListTile(
                          title: Text('cool'),
                        );
                      },
                    ),
                  ) // I would like to put another Container here that
                    // scrolls with the bottom, underneath the SliverList
                : Container(
                    child: Text('no data'),
                  ),
          ],
        ),
      ),
    );
  }

Upvotes: 0

Views: 517

Answers (1)

EdwynZN
EdwynZN

Reputation: 5601

seems like a work for the spread operator

CustomScrollView(
  slivers: <Widget>[
    AppBarSliver(),
    ...hasData
      ? <Widget>[
          SliverList(
            delegate: SliverChildBuilderDelegate(
              (BuildContext context, int i) {
                return ListTile(
                  title: Text('cool'),
                );
              },
            ),
          ),
          const SliverToBoxAdapter(
            child: SizedBox(
              child: Text('End of the list'),
            ),
          ),
        ]
      : <Widget>[
          const SliverToBoxAdapter(
            child: SizedBox(
              child: Text('no data'),
            ),
          )
      ]
  ],
)

This way you're telling if hasData is true add all this widgets in the brackets (SliverList and SliverToBoxAdapter with Text 'End of the list') if false add all this other widgets (which is only a SliverToBoxAdapter)

Upvotes: 1

Related Questions