Добавление текстового поля в качестве дочернего в MarqueeWidget приводит к пустому экрану - PullRequest
3 голосов
/ 03 августа 2020

Класс виджета Marquee

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

class MarqueeWidget extends StatefulWidget {
  final Widget child;
  final Axis direction;
  final Duration animationDuration, backDuration, pauseDuration;

  MarqueeWidget({
    @required this.child,
    this.direction: Axis.horizontal,
    this.animationDuration: const Duration(milliseconds: 3000),
    this.backDuration: const Duration(milliseconds: 800),
    this.pauseDuration: const Duration(milliseconds: 800),
  });

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

class _MarqueeWidgetState extends State<MarqueeWidget> {
  ScrollController scrollController;

  @override
  void initState() {
    scrollController = ScrollController(initialScrollOffset: 50.0);
    WidgetsBinding.instance.addPostFrameCallback(scroll);
    super.initState();
  }

  @override
  void dispose() {
    scrollController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      child: widget.child,
      scrollDirection: widget.direction,
      controller: scrollController,
    );
  }

  void scroll(_) async {
    while (scrollController.hasClients) {
      await Future.delayed(widget.pauseDuration);
      if (scrollController.hasClients)
        await scrollController.animateTo(
            scrollController.position.maxScrollExtent,
            duration: widget.animationDuration,
            curve: Curves.ease);
      await Future.delayed(widget.pauseDuration);
      if (scrollController.hasClients)
        await scrollController.animateTo(0.0,
            duration: widget.backDuration, curve: Curves.easeOut);
    }
  }
}

Я хочу создать текстовое поле, в которое вы можете ввести абзац. Вот почему этот класс был тем, что доступно. Пожалуйста, проверьте ошибку. Использование виджета Marquee После этого я запускаю приложение. Он ничего не отображает. Итак, что теперь делать.

Padding(
            padding: const EdgeInsets.all(8.0),
            child: Expanded(
              child: MarqueeWidget(
                direction: Axis.horizontal,
                child: TextField(
                  keyboardType: TextInputType.multiline,
                  maxLines: null,
                  onChanged: (value) {
                    about = value;
                  },
                  decoration: InputDecoration(
                    hintText: widget.currentUser.about,
                  ),
                  style: TextStyle(color: Colors.black),
                ),
              ),
            ),
          ),
...