Флаттер — переполнен бесконечными пикселями внизу

#flutter #dart

Вопрос:

У меня проблема с переполненными пикселями бесконечности внизу. Я нахожу много решений, но снова не работаю.

Это моя страница с подробной информацией.

 class MyWidgetApiDetails extends StatelessWidget {
  final Emp emp;
  const MyWidgetApiDetails({Key key, @required this.emp}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('DETAILS EMP'),
      ),
      body: Column(
        children: [
          Hero(
              tag: emp.empno,
              child: AspectRatio(
                  aspectRatio: 16 / 9,
                  child: Image.network(emp.image))
          ),
          Container(
            height: 20,
            width: 100,
            child: PhotoView(
              imageProvider: AssetImage("assets/images/map.jpg"),
            ),
          ),
          PhotoView(
            imageProvider: NetworkImage(emp.image),
          ),
          SizedBox(
            height: 20,
          ),
          Text(
            emp.empno.toString(),
            style: TextStyle(fontSize: 15, fontWeight: FontWeight.normal),
          ),
          SizedBox(
            height: 20,
          ),
          Text(
            emp.ename,
            style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold),
          )
        ],
      ),
    );
  }
}
 

При размещении столбца в SingleChildScrollView объекту get RenderFlex был задан бесконечный размер во время компоновки.

Ответ №1:

Вы можете сделать это, просто перейдя из столбца в представление списка.

 class MyWidgetApiDetails extends StatelessWidget {
  final Emp emp;
  const MyWidgetApiDetails({Key key, @required this.emp}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('DETAILS EMP'),
      ),
      body: ListView(
        children: [
          Hero(
              tag: emp.empno,
              child: AspectRatio(
                  aspectRatio: 16 / 9,
                  child: Image.network(emp.image))
          ),
          Container(
            height: 20,
            width: 100,
            child: PhotoView(
              imageProvider: AssetImage("assets/images/map.jpg"),
            ),
          ),
          PhotoView(
            imageProvider: NetworkImage(emp.image),
          ),
          SizedBox(
            height: 20,
          ),
          Text(
            emp.empno.toString(),
            style: TextStyle(fontSize: 15, fontWeight: FontWeight.normal),
          ),
          SizedBox(
            height: 20,
          ),
          Text(
            emp.ename,
            style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold),
          )
        ],
      ),
    );
  }
}
 

Комментарии:

1. при размещении в ListView объекту get RenderIndexedSemantics был задан бесконечный размер во время компоновки.

Ответ №2:

Поместите столбец в SingleChildScrollView и оберните PhotoView в контейнер, решите мою проблему.

Ответ №3:

Это потому SingleChildScrollView , что хочет быть как можно большим, вам нужно поместить его во что-то , что имеет ограничения, например Column , вы могли бы сделать что-то вроде этого:

 //pseudocode, not sure about the exact syntax.
body: Expanded(
  child: SingleChildScrollView(
      child: Column(...)
    )
  ]
)
 

И я верю, что это должно сработать.
Взгляните здесь и здесь для получения дополнительной информации.

Комментарии:

1. когда вы используете свой пример, снова получите рендерфлекс, заполненный бесконечными пикселями внизу.

2. Ах да, это имеет смысл, вероятно, это должен быть контейнер, как и вы, или вы могли бы попытаться обернуть его в расширенный виджет. Я обновлю свой ответ.