[解決済み] InkWellでリップルエフェクトが表示されない
質問
コンテナをタップすると
onTap()
ハンドラを使用しますが、インクの飛沫の効果は表示されません。
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
),
body: new Center(
child: new InkWell(
onTap: (){print("tapped");},
child: new Container(
width: 100.0,
height: 100.0,
color: Colors.orange,
),
),
),
);
}
}
を配置してみました。
InkWell
の中に
Container
を使用しましたが、無駄でした。
解決方法は?
容器に色をつけると、インクの効果を覆い隠してしまうのでは?
https://api.flutter.dev/flutter/material/InkWell/InkWell.html
このコードは動作するようです
body: new Center(
child: new Container(
child: new Material(
child: new InkWell(
onTap: (){print("tapped");},
child: new Container(
width: 100.0,
height: 100.0,
),
),
color: Colors.transparent,
),
color: Colors.orange,
),
),
真ん中の四角をクリックするだけです。
編集:バグレポートが見つかりました。 https://github.com/flutter/flutter/issues/3782
<ブロッククオートこれは実は予想通りなのですが、より明確にするためにドキュメントを更新する必要があります。
何が起こっているかというと、Materialの仕様では、スプラッシュは実際にはMaterial上のインクであるとされているのです。つまり、スプラッシュを発生させるときは、文字通り、Material ウィジェットにスプラッシュを発生させるのです。Materialの上に何かがあれば、その下にスプラッシュが発生し、それを見ることはできません。
MaterialImage"ウィジェットを追加して、画像をマテリアルにプリントし、その画像の上に水しぶきがかかるようにしたいと思ったことがあります。装飾のために似たようなことをする MaterialDecoration があるかもしれません。あるいは、マテリアル自体に装飾を持たせることもできます。今は色を受け取っていますが、これを拡張して装飾全体を受け取るようにすることもできます。ただ、グラデーションを持つマテリアルが本当にマテリアルスペックに適合しているかどうかは不明なので、そうするべきかどうかはわかりません。
短期的な回避策としては、コンテナの上にマテリアルを置き、そのマテリアルが "transparency"タイプを使用するように設定し、その中にインクウェルを置くことができます。
--hixie
アップデート:Hixieは昨年、新しいInkソリューションをマージしました。Inkは、画像の上にスプラッシュをかける便利な方法を提供します。
testWidgets('Does the Ink widget render anything', (WidgetTester tester) async {
await tester.pumpWidget(
new Material(
child: new Center(
child: new Ink(
color: Colors.blue,
width: 200.0,
height: 200.0,
child: new InkWell(
splashColor: Colors.green,
onTap: () { },
),
),
),
),
);
Material(
color: Colors.grey[800],
child: Center(
child: Ink.image(
image: AssetImage('cat.jpeg'),
fit: BoxFit.cover,
width: 300.0,
height: 200.0,
child: InkWell(
onTap: () { /* ... */ },
child: Align(
alignment: Alignment.topLeft,
child: Padding(
padding: const EdgeInsets.all(10.0),
child: Text('KITTEN', style: TextStyle(fontWeight: FontWeight.w900, color: Colors.white)),
),
)
),
),
),
)
注意: 私は新しい Ink Widget をテストしていません。ink_paint_test.dartとInkクラスのドキュメントからコードをコピーしてきました。
関連
-
[解決済み] AppBarの先頭のアイコンの大きさを大きくする方法
-
[解決済み] Flutter - くねくね動くアニメーションを作るには?
-
[解決済み] FlutterでborderRadiusを使用してコンテナにボーダーを追加する
-
Gradleの失敗 プロジェクト':app'の評価に問題が発生しました。
-
[解決済み] FlutterでButtonを無効にするには?
-
[解決済み】Flutterで少し遅れてからコードを実行する方法は?
-
[解決済み] appBarのバックボタンの色を変更する方法
-
[解決済み] ボタンの幅を親と同じにするには?
-
[解決済み] Flutter SDK(Dart 1.x)をダウングレードする方法
-
[解決済み] Flutterで "すりガラス "のような効果を出すには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] AppBarの先頭のアイコンの大きさを大きくする方法
-
[解決済み] 水平スクロール フラッターのテキスト
-
[解決済み] Flutterで丸みを帯びたボタン/border-radius付きボタンを作成する
-
[解決済み】Flutterでアプリケーションランチャーのアイコンを変更するには?
-
[解決済み】メッセージ「flutter run: 接続されたデバイスがありません"
-
[解決済み】flutterのwrap_contentとmatch_parentに相当するもの?
-
[解決済み】Flutter: 未処理の例外です。バインディングが初期化される前にServicesBinding.defaultBinaryMessengerにアクセスされました。
-
[解決済み】FlutterでStateful Widgetにデータを渡す
-
[解決済み】再利用可能なウィジェットを作成するための関数とクラスの違いは何ですか?
-
[解決済み] フラッター : 垂直中心柱