2017-08-02 11 views
0

I次のコードを持っている:ダート/フラッターに、独自のコールバック(onPressed)内からウィジェットにアクセスする方法を

@override 
    Widget build(BuildContext context) { 
    return new Container(
     height: 72.0, // in logical pixels 
     padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 8.0), 
     decoration: new BoxDecoration(color: Colors.white), 
     // Row is a horizontal, linear layout. 
     child: new MaterialButton(
     child: new Text(
      _sprinkler.name, 
      style: new TextStyle(color: Colors.white) 
     ), 
     splashColor: Colors.blueAccent, 
     color: Colors.blue[800], 
     onPressed:() { 
      print("onTap(): tapped" + _sprinkler.name); 
     }, 
    ), 
    ); 
    } 

onPressed()、私はボタンのスタイルを変更したい - スプリンクラー活動を表現するが。

したがって、MaterialButtonウィジェット自体にアクセスする必要があります。

しかし、私はコールバック内からどのようにアクセスするのですか?

事前のおかげでたくさん、およびN00B質問して申し訳ありませんが、私はダートとフラッターに新しいです;)

答えて

1

ありがとう:
この例では、この方法を使用することにより、ボタンのテキストの色を変更する方法を示しています。正しい解決策は、あなたがお勧めするものactualyあるので、次のようになります。

class SprinklerListItem extends StatefulWidget { 
    // This class is the configuration for the state. It holds the 
    // values (in this nothing) provided by the parent and used by the build 
    // method of the State. Fields in a Widget subclass are always marked "final". 
    final Sprinkler _sprinkler; 
    SprinklerListItem(this._sprinkler); 


    @override 
    _SprinklerListItemState createState() { 
    return new _SprinklerListItemState(this._sprinkler); 
    } 
} 


class _SprinklerListItemState extends State<SprinklerListItem> { 
    final Sprinkler _sprinkler; 

    _SprinklerListItemState(this._sprinkler); 

    Color textColor = Colors.white; 
    Color bgColor = Colors.blue[800]; 
    @override 
    Widget build(BuildContext context) { 
    return new Container(
     height: 72.0, // in logical pixels 
     padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 8.0), 
     decoration: new BoxDecoration(color: Colors.white), 
     // Row is a horizontal, linear layout. 
     child: new MaterialButton(
     child: new Text(
      _sprinkler.name, 
      style: new TextStyle(color: textColor) 
     ), 
     splashColor: Colors.blueAccent, 
     color: bgColor, 
     onPressed:() { 
      this.setState(() { 
      textColor = Colors.grey; 
      bgColor = Colors.red; 
      }); 
     }, 
    ), 
    ); 
    } 
} 
1

おそらくStatefulWidgetを使用したい、このような何か:

class MyWidget extends StatefulWidget { 
    _MyWidgetState createState() => new _MyWidgetState(); 
} 
class _MyWidgetState extends State<MyWidget> { 
    Color c = Colors.blue.shade500; 

    Widget build() => new MaterialButton(
    color: c, 
    onPressed:() => setState(() { 
     c = Colors.red.shade500; 
    }), 
); 
} 
2

あなたはいくつかのプロパティを可変にすることができます。その後、onPressed()setState()に電話してプロパティ変数を変更することができます。あなたのコメントのための

Color textColor = Colors.white; 
    @override 
    Widget build(BuildContext context) { 
    return new Container(
     height: 72.0, // in logical pixels 
     padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 8.0), 
     decoration: new BoxDecoration(color: Colors.white), 
     // Row is a horizontal, linear layout. 
     child: new MaterialButton(
     child: new Text(
      _sprinkler.name, 
      style: new TextStyle(color: textColor) 
     ), 
     splashColor: Colors.blueAccent, 
     color: Colors.blue[800], 
     onPressed:() { 
      this.setState(() { 
      textColor = Colors.red; 
      }) 
     }, 
    ), 
    ); 
    } 
+0

私は次のエラーを取得する: は '[ダーツ]方法「SETSTATE」のクラスに定義されていない「_SprinklerListItem'.' – wzr1337

+0

はこれです'StatefulWidget'ですか? –

関連する問題