Трепетание — пульсация чернильницы с помощью плоской кнопки в качестве дочернего элемента не работает

#flutter

#трепетание

Вопрос:

У меня есть следующий код, я пытаюсь добиться того, что я хочу, чтобы у моей плоской кнопки был собственный эффект пульсации. По умолчанию материал flutter создает эффект всплеска и не ощущается как родной. Я попытался обернуть свою FlatButton с помощью inkwell, чтобы как-то решить эту проблему, когда я нажимаю на кнопку, она игнорирует мой виджет inkwell. Как я могу это решить?

 InkWell(
        onTap: () => true,
        splashFactory: InkRipple.splashFactory,
        child: FlatButton(
          color: Theme.of(context).colorScheme.primary,
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.all(Radius.circular(8)),
          ),
          child: Text("Im a text"),
          onPressed: () {},
        ));
  

Ответ №1:

Итак, проблема заключается в том, что функция передается в onPressed из FlatButton .

Вам просто нужно перейти null к FlatButton «s onPressed «, чтобы триггер перешел к InkWell «s onTap » .

Попробуйте это:

 
InkWell(
        onTap: () => true,
        splashFactory: InkRipple.splashFactory,
        child: FlatButton(
          color: Theme.of(context).colorScheme.primary,
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.all(Radius.circular(8)),
          ),
          child: Text("Im a text"),
          onPressed: null,
        ));
  

Обновлено:
Добавьте InkWell внутри Material виджета и замените FlatButton на Container виджет

 Material(
      shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.all(Radius.circular(8)),
      ),
      color: Theme.of(context).colorScheme.primary,
      child: InkWell(
        onTap: () => true,
        splashFactory: InkRipple.splashFactory,
        child: Container(
          padding: EdgeInsets.symmetric(horizontal: 8, vertical: 4),
          child: Text("Im a text"),
        ),
      ),
    );
  

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

1. я пробовал это, но затем я теряю цвет, который имеет значение «color: Theme.of (context).colorScheme.primary», кнопка становится прозрачной

2. Ну, тогда зачем вам плоская кнопка внутри чернильницы?

3. Чернильница с splashFactory: параметры InkRipple.splashFactory добавляют встроенную анимацию пульсации Android. Вот почему мне нужно использовать inkwell. FlatButton имеет пользовательскую анимацию флаттера

4. Попробуйте удалить FlatButton и поместить текст в Container виджет и обернуть InkWell его в Material виджет. См. Ответ на обновление.