Ошибка трепетания - конкретный виджет, который не смог найти предка материала, был: - PullRequest
0 голосов
/ 02 ноября 2019

Я использую виджет 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 нужен предок Материала?

Ответы [ 2 ]

1 голос
/ 02 ноября 2019

Если вы оберните свой стек (или родительский объект в целом) с помощью Scaffold, вы не получите эту ошибку.

В этом случае, если вы обернете свой IconButton с помощью виджета материала, я думаю, что это решит проблему. :

  Align(
    alignment: Alignment.bottomCenter,
    child: Material(
        child: IconButton(icon: Icon(Icons.next_week), onPressed: () {})),
  )
0 голосов
/ 02 ноября 2019

Потому что согласно документации IconButton (https://api.flutter.dev/flutter/material/IconButton-class.html)

) кнопка со значком - это изображение, напечатанное на виджете «Материал», которое реагирует на прикосновения, заполняя его цветом (чернилами).

[..]

Требуется, чтобы один из его предков был виджетом Материала.

IconButton использует, скорее всего, ThemeData, а также другие вещи, которые обычно предоставляет MaterialApp.

Есть ли причина, по которой вы не используете MaterialApp в качестве предка?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...