2016-12-31 4 views
1

IconButtononPressedの間に、ユーザーがデータ変更のフィードバックを見るようにデータベースとUIを更新する必要があります。これを行うには、私はsetStateと呼ばれ、Widgetが正常に再構築されます。問題は、すぐにWidgetが再構築されるため、タッチフィードバックリップル効果が表示されなくなることです。onPressed中にsetStateを呼び出すIconButtonは波及効果がないことを示します

var button = new IconButton(
    icon: new Icon(isMyBoolTrue ? Icons.undo : Icons.event_available), 
    onPressed:() => setState(() => toggleDatabaseBool) 
); 

答えて

1

スプラッシュを止めるべきではありません。スプラッシュを止める唯一の理由は、IconButtonとマテリアルの間でウィジェットの1つを追加または削除したり、キーを変更したり、マテリアルのキーを変更したり、ツリー内のマテリアルを移動したりする場合です。 (これらのうちのいくつかはフレームワークのバグで、今後数か月以内に修正したいと考えています)

問題を示す最小限のアプリを投稿できますか?

一方、我々はhttps://github.com/flutter/flutter/issues/6751https://github.com/flutter/flutter/issues/5456

+0

あなたは "という" 何を意味するのですか?質問の例、または答えの例は?また、あなたが参照しているバグへのリンクがありますか?ありがとう! –

+0

私は質問のコードを意味しました。 –

+0

バグはhttps://github.com/flutter/flutter/issues/6751とhttps://github.com/flutter/flutter/issues/5456です。 –

2

で問題を追跡している問題は、私はbuild時のたびに再作成されたオブジェクトにObjectKeyを作成していました。 ObjectKeyとオブジェクト自体の代わりにmyオブジェクトのidフィールドを使用して問題を解決しました。

悪い

var card = new Card(
    key: new ObjectKey(goal), //the goal object was re-created during `build` 
    child: button 
); 

グッド

var card = new Card(
    key: new ObjectKey(goal.id), // need to key off of the id field as it remains constant 
    child: button 
); 
関連する問題