Ошибка флаттера - конкретный виджет, который не смог найти предка материала, был:
Я использую Align
виджет, чтобы разместить кнопку со значком внизу по центру экрана.
Однако я получаю следующую ошибку и не могу ее исправить:
The specific widget that could not find a Material ancestor was:
IconButton
Мой код:
return Stack(
children: <Widget>[
Container(
child: GoogleMap(
initialCameraPosition:
CameraPosition(target: LatLng(1,1), zoom: 15),
onMapCreated: (map) {
mapReady;
},),
),
Align(
alignment:Alignment.bottomCenter,
child: IconButton(
icon: Icon(Icons.next_week), onPressed: (){}),
)
],
Если я заменю виджет IconButton, например, текстовым виджетом, он будет работать нормально.
Не могли бы вы объяснить, почему это не работает, зачем IconButton нужен предок Material?
2 ответа
Потому что согласно документации IconButton (https://api.flutter.dev/flutter/material/IconButton-class.html)
Значок кнопки - это изображение, напечатанное на виджете материала, которое реагирует на прикосновения, заполняясь цветом (чернилами).
[..]
Требует, чтобы один из его предков был виджетом Material.
IconButton, скорее всего, использует ThemeData, а также другие вещи, которые обычно предоставляет MaterialApp.
Есть ли причина, по которой вы не используете MaterialApp в качестве предка?
Если вы оберните свой стек (или родительский объект в целом) с помощью Scaffold, вы не получите эту ошибку.
В этом случае, если вы оберните свой IconButton виджетом материала, я считаю, что это решит проблему:
Align(
alignment: Alignment.bottomCenter,
child: Material(
child: IconButton(icon: Icon(Icons.next_week), onPressed: () {})),
)