2017-07-25 28 views
0

公共のインスタンスメソッドanimate()を提供するMySlideWidgetという名前のStatefulWidgetを構築したいとします。私はMySlideWidgetの親のボタンを押すとStatefulWidgetのメソッドを公開するにはどうすればよいですか?

することは、私はMySlideWidgetの内部SlideTransitionをトリガするためにMySlideWidgetanimate()メソッドを呼び出すことができます。

使い方は次のようになります。

class MySlideWidgetDemo extends StatelessWidget { 

    @override 
    Widget build(BuildContext context) { 
    MySlideWidget mySlideWidget = new MySlideWidget(); 

    return new Scaffold(
     body: mySlideWidget, 
     floatingActionButton: new FloatingActionButton(
      onPressed:() { 
      mySlideWidget.animate(); 
      }, 
      tooltip: 'Start', 
      child: new Icon(Icons.add), 
     )); 
    } 
} 

私は思って何がMySlideWidgetAnimationController_controller.forward()の実装をカプセル化する方法であるので、MySlideWidgetのユーザは、単にanimate()を呼び出すことができます。

これは可能ですか?または、Flutterでカプセル化を行う方法は何ですか?

答えて

1

AnimationControllerを使用してSlideTransitionに渡す必要があります。その後、必要に応じてcontroller.forward()に電話してください。ここで

はサンプルです:

class _MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin { 

    AnimationController _controller; 
    Animation<FractionalOffset> _slideTransitionPosition; 

    @override 
    initState() { 
    super.initState(); 

    _controller = new AnimationController(
     vsync: this, 
     duration: const Duration(milliseconds: 2000), 
    ); 

    _slideTransitionPosition = new FractionalOffsetTween(
     begin: const FractionalOffset(0.0, -1.0), 
     end: const FractionalOffset(0.0, 10.0), 
    ).animate(new CurvedAnimation(
     parent: _controller, 
     curve: Curves.fastOutSlowIn, 
    )); 
    } 

    void _onPress() { 
    _controller.forward(); 
    } 

    @override 
    Widget build(BuildContext context) { 
    return new Scaffold(
     appBar: new AppBar(
     title: new Text(widget.title), 
    ), 
     body: new Container(
     child: new SlideTransition(
      position: _slideTransitionPosition, 
      child: new Container(
      color: Colors.red, 
      width: 100.0, 
      height: 100.0, 
     ), 
     ), 
    ), 
     floatingActionButton: new FloatingActionButton(
     onPressed: _onPress, 
     tooltip: 'Start', 
     child: new Icon(Icons.add), 
    ), 
    ); 
    } 
} 

また、あなたは、返信用demos

+0

おかげで例を見つけることができ、私はより正確に記述するために私の質問を更新しました。簡単に言えば、私はStatefulWidgetの内部にアニメーションの実装をカプセル化する方法を知りたいと思います。 –

+0

私はそれを手に入れました。この場合、 'Form'と' FormState'のリファレンス実装として使うことができます。[src](https://github.com/flutter/flutter/blob/c7469e005d2def9bc1759cfbb39b75f293eac561/packages/flutter/lib/src/widgets/form .dart#L20)。これはStatefulWidgetとメソッド 'save'を公開するStateです。したがって、正しい状態のインスタンスを取得し、アニメーションをトリガする必要があります。 – Mogol

+0

これは本当に参考になるソースです、ありがとう! –

関連する問題