Невозможно постепенно увеличивать размер движущегося контейнера и уменьшать трепетание от центра экрана - PullRequest
1 голос
/ 07 ноября 2019

Я пытался создать контейнер, который будет переходить слева направо, увеличиваясь в размерах, пока не достигнет центра, а после достижения центра он уменьшится в размере. Я пытался использовать два контроллера и больше Tween-ов, но не нашел результата.

`import 'package:flutter/material.dart';
 import 'package:flutter/animation.dart';

class Basic_animation_view extends StatefulWidget {
  @override
  _Basic_animation_viewState createState() => _Basic_animation_viewState();
}

class _Basic_animation_viewState extends State<Basic_animation_view>
  with TickerProviderStateMixin {
  AnimationController controller;
  Animation<Offset> animation;
  Animation<Size> growAnimation;

  @override
  void initState() {
    super.initState();
    controller =
        AnimationController(vsync: this, duration: const Duration(seconds: 3))
          ..addListener(() {
            setState(() {});
          });
    animation = Tween<Offset>(begin: Offset(0, 0), end: Offset(5, 0))
        .animate(controller);

    growAnimation =
        Tween<Size>(begin: Size(50.0, 50.0), end: Size(100.0, 100.0))
            .animate(CurvedAnimation(parent: controller,curve: Curves.linear));

    controller.repeat();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(),
        body: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[
            SlideTransition(
              position: animation,
              child: Container(***strong text***
                width:growAnimation.value.width,
                height:growAnimation.value.height,
                color: Colors.red,
              ),
            ),
          ],
        ));
  }
}
`

1 Ответ

1 голос
/ 07 ноября 2019

Возможно, анимированный контейнерный класс будет ближе к тому, что вы хотите. Вы можете найти более подробную информацию, используя документированный образец, более подробную информацию можно найти в источнике .

// Flutter code sample for

// The following example (depicted above) transitions an AnimatedContainer
// between two states. It adjusts the [height], [width], [color], and
// [alignment] properties when tapped.

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

/// This Widget is the main application widget.
class MyApp extends StatelessWidget {
  static const String _title = 'Flutter Code Sample';

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: _title,
      home: Scaffold(
        appBar: AppBar(title: const Text(_title)),
        body: MyStatefulWidget(),
      ),
    );
  }
}

class MyStatefulWidget extends StatefulWidget {
  MyStatefulWidget({Key key}) : super(key: key);

  @override
  _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  bool selected = false;

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () {
        setState(() {
          selected = !selected;
        });
      },
      child: Center(
        child: AnimatedContainer(
          width: selected ? 200.0 : 100.0,
          height: selected ? 100.0 : 200.0,
          color: selected ? Colors.red : Colors.blue,
          alignment:
              selected ? Alignment.center : AlignmentDirectional.topCenter,
          duration: Duration(seconds: 2),
          curve: Curves.fastOutSlowIn,
          child: FlutterLogo(size: 75),
        ),
      ),
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...