簡體   English   中英

Flutter - PageController “ScrollController 未附加到任何滾動視圖。”

[英]Flutter - PageController " ScrollController not attached to any scroll views."

有沒有辦法在等待異步 function 后使用 PageController 為頁面設置動畫,而不會引發下面的異常?

例外:

_AssertionError ('package:flutter/src/widgets/scroll_controller.dart': Failed assertion: line 107 pos 12: '_positions.isNotEmpty': ScrollController not attached to any scroll views.)

示例小部件:


class ExampleWidget extends StatelessWidget {
  ExampleWidget({super.key});

  final pageController = PageController();
  @override
  Widget build(BuildContext context) {
    return Stack(
      children: [
        PageView(
          controller: pageController,
          physics: const NeverScrollableScrollPhysics(),
          children: [],
        ),
        InkWell(
          onTap: () async {
            await exampleFn();
            await Future.delayed(const Duration()); // to wait for UI to build
            pageController.animateToPage(
              1,
              duration: const Duration(milliseconds: 500),
              curve: Curves.easeInOut
            );
          },
        )
      ],
    );
  }
}

等待if (pageController.hasClients)會導致 animation 不發生。 這樣做的正確方法是什么?

我認為它工作正常,你必須在PageView添加children屬性,你可以查看這個例子:

import 'package:flutter/material.dart';

class ExampleWidget extends StatelessWidget {
  ExampleWidget({super.key});

  final pageController = PageController();
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(
        children: [
          PageView(
            controller: pageController,
            physics: const NeverScrollableScrollPhysics(),
            children: [
              Container(
                color: Colors.amber,
              ),
              Container(
                color: Colors.red,
              )
            ],
          ),
          InkWell(
            onTap: () async {
              // await exampleFn();
              await Future.delayed(
                  const Duration(seconds: 2)); // to wait for UI to build
              pageController.animateToPage(1,
                  duration: const Duration(milliseconds: 500),
                  curve: Curves.easeInOut);
            },
          )
        ],
      ),
    );
  }
}

在這里我延遲了 2 秒,它工作得很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM