🔨
[Flutter]画像にRippleエフェクトをつける方法(Stack以外)
この記事は
Flutterで画像にRippleをつけたくてやり方を調べてみたら、Stack
で画像の上にMaterial
を乗っける方法がヒットしました。(これとかそれとか)
ただ、これよりもシンプルな方法が見つかったのでそれを共有します。
方法
Ink
WidgetとInkWell
Widgetを使うとかなりシンプルです
そのままの画像にRippleをつける
Ink.image
で簡潔に書けます。
import 'package:flutter/material.dart';
void main() {
runApp(
MaterialApp(
home: MyWidget(),
),
);
}
class MyWidget extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Ink.image(
width: 100,
height: 100,
image: NetworkImage('https://4.bp.blogspot.com/-SNILKxCoGxA/WMdTfmXnenI/AAAAAAABChM/HeJqR7MV9ZE2vXQFmdVeaZ3t6NxV6R9QwCLcB/s800/pet_nekotsugura.png'),
child: InkWell(
onTap: () {
// 何かしらのTapイベント
},
),
),
),
);
}
}
角丸など加工した画像にRippleをつける
decorationを使うならばInk
を使いましょう。
import 'package:flutter/material.dart';
void main() {
runApp(
MaterialApp(
home: MyWidget(),
),
);
}
class MyWidget extends StatelessWidget {
final borderRadius = BorderRadius.circular(15);
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Ink(
width: 100,
height: 100,
decoration: BoxDecoration(
borderRadius: borderRadius,
image: DecorationImage(
image: NetworkImage(
'https://4.bp.blogspot.com/-SNILKxCoGxA/WMdTfmXnenI/AAAAAAABChM/HeJqR7MV9ZE2vXQFmdVeaZ3t6NxV6R9QwCLcB/s800/pet_nekotsugura.png'),
fit: BoxFit.cover,
),
),
child: InkWell(
borderRadius: borderRadius,
onTap: () {
// 何かしらのTapイベント
},
),
),
),
);
}
}
参考
Codepenに今回のコードを起きましたので、試してみてください。
Discussion