![](/img/trans.png)
[英]Flutter error: 'ScrollController not attached to any scroll views.' on scroll
[英]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.