#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. Ах да, это имеет смысл, вероятно, это должен быть контейнер, как и вы, или вы могли бы попытаться обернуть его в расширенный виджет. Я обновлю свой ответ.