Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Widgets Overflowing out of Container when scrolling

I have a small list within a Container that works fine except for the fact that its edges tend to overflow out of the Parent container when scrolled up or down. I was wondering what I could do to prevent these from doing the same. In my opinion, the problem probably lies in the grocery.dart class and I have marked that with a comment in the main_screen.dart class. The areas marked in red in the picture is what I mean:

enter image description here
enter image description here

My code is as follows:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

main_screen.dart

class MainScreen extends StatefulWidget {
  MainScreenState createState() => MainScreenState();
}

class MainScreenState extends State<MainScreen> {

 @override
  void didChangeDependencies() {
    // TODO: implement didChangeDependencies
   Provider.of<DataModel>(context).fetchData();
    super.didChangeDependencies();
  }

  @override
  Widget build(BuildContext context) {
   final provider = Provider.of<DataModel>(context).list;
    // TODO: implement build
    return Scaffold(
      body: Container(
        width: double.infinity,
        height: double.infinity,
        decoration: BoxDecoration(
          color: Colors.lightBlue
        ),
        child: Center(
          child: Padding(
            padding: const EdgeInsets.all(10.0),
            child: Container(
              padding: EdgeInsets.all(5),
              width: double.infinity,
              height: 350,
              decoration: BoxDecoration(
                  color: Colors.white,
                  borderRadius: BorderRadius.circular(30),
                  boxShadow: [
                    BoxShadow(
                        color: Colors.black87,
                        offset: Offset.zero,
                        blurRadius: 10,
                        spreadRadius: 5
                    )
                  ]
              ),
              child: ListView.builder(
                  itemBuilder: (context, index) => Grocery(    //grocery.dart
                    provider[index].id,
                    provider[index].name
                  ),
                  itemCount: provider.length
              ),
            ),
          ),
        ),
      )
    );
  }
}

I tried adjusting the width manually from double.infinity but that didn’t work either despite commenting out the entire width property.
grocery.dart

import 'package:flutter/material.dart';

class Grocery extends StatelessWidget {
  final String id;
  final String name;

  Grocery(this.id, this.name);

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Container(
//      width: 100,
      height: 50,
      margin: EdgeInsets.only(bottom: 20),
      decoration: BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.circular(30),
        boxShadow: [
          BoxShadow(
            color: Colors.black45,
            offset: Offset.zero,
            blurRadius: 5,
            spreadRadius: 2
          )
        ]
      ),
      child: Center(child: Text('$name')),
    );
  }
}

>Solution :

The amount of bottom and top padding is not enough for Flutter to render the items in the container smoothly. BorderRadius of the container is far more greater than the padding. You can adjust the padding property of the container like so to make it smoother;

    class MainScreen extends StatefulWidget {
  MainScreenState createState() => MainScreenState();
}

class MainScreenState extends State<MainScreen> {

 @override
  void didChangeDependencies() {
    // TODO: implement didChangeDependencies
   Provider.of<DataModel>(context).fetchData();
    super.didChangeDependencies();
  }

  @override
  Widget build(BuildContext context) {
   final provider = Provider.of<DataModel>(context).list;
    // TODO: implement build
    return Scaffold(
      body: Container(
        width: double.infinity,
        height: double.infinity,
        decoration: BoxDecoration(
          color: Colors.lightBlue
        ),
        child: Center(
          child: Padding(
            padding: const EdgeInsets.all(10.0),
            child: Container(
              padding: EdgeInsets.only(left: 5, right: 5, top: 15, bottom: 15)
              width: double.infinity,
              height: 350,
              decoration: BoxDecoration(
                  color: Colors.white,
                  borderRadius: BorderRadius.circular(30),
                  boxShadow: [
                    BoxShadow(
                        color: Colors.black87,
                        offset: Offset.zero,
                        blurRadius: 10,
                        spreadRadius: 5
                    )
                  ]
              ),
              child: ListView.builder(
                  itemBuilder: (context, index) => Grocery(    //grocery.dart
                    provider[index].id,
                    provider[index].name
                  ),
                  itemCount: provider.length
              ),
            ),
          ),
        ),
      )
    );
  }
}

enter image description here

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading