我正在为我的移动Flutter应用程序创建一个简介屏幕,我想要一个可以永久滚动且不可交互的简单背景。
这是我的问题的简化代码:
import 'package:flutter/material.dart';
class AnimatedBackground extends StatefulWidget {
@override
_AnimatedBackgroundState createState() => _AnimatedBackgroundState();
}
class _AnimatedBackgroundState extends State<AnimatedBackground> {
ScrollController controller;
double backgroundOffset = 0;
@override
void initState() {
super.initState();
controller = ScrollController();
WidgetsBinding.instance
.addPostFrameCallback((_) => scrollPage()); ///// ATTEMPT #1
// beginAnimation(); ////// ATTEMPT #2
}
@override
void dispose() {
controller.dispose();
super.dispose();
}
void beginAnimation() async { ///// ATTEMPT #2
await Future.delayed(Duration(seconds: 5), scrollPage); ///// ATTEMPT #2
} ///// ATTEMPT #2
void scrollPage() {
backgroundOffset += 20;
controller
.animateTo(
backgroundOffset,
duration: Duration(seconds: 1),
curve: Curves.linear,
)
.then((_) => scrollPage()); // Forever keep scrolling
}
@override
Widget build(BuildContext context) {
return GridView.builder(
controller: controller,
physics: NeverScrollableScrollPhysics(),
gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent: 200,
crossAxisSpacing: 30,
mainAxisSpacing: 30,
),
itemBuilder: (context, index) => Text("TEMP"),
);
}
}
尝试#1时,出现此错误:
The following NoSuchMethodError was thrown while notifying listeners for AnimationController:
The method '<=' was called on null.
Receiver: null
Tried calling: <=(0.0)
When the exception was thrown, this was the stack:
#0 Object.noSuchMethod (dart:core-patch/object_patch.dart:53:5)
#1 ClampingScrollPhysics.applyBoundaryConditions (package:flutter/src/widgets/scroll_physics.dart:494:34)
#2 ScrollPosition.applyBoundaryConditions (package:flutter/src/widgets/scroll_position.dart:399:35)
#3 ScrollPosition.setPixels (package:flutter/src/widgets/scroll_position.dart:228:33)
#4 ScrollPositionWithSingleContext.setPixels (package:flutter/src/widgets/scroll_position_with_single_context.dart:83:18)
...
The AnimationController notifying listeners was: AnimationController#fa4bb(▶ 18.388; for DrivenScrollActivity)
现在,它仅显示一次此错误,仅此而已。除了此错误,它还能按预期工作。 GridView缓慢滚动。但我仍然会收到该错误。
尝试#2时,我遇到了如上所述的错误,但是又出现了很多次,有时还会出现下面的错误。
E/flutter (21732): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: NoSuchMethodError: The method '>' was called on null.
E/flutter (21732): Receiver: null
E/flutter (21732): Tried calling: >(0.0)
E/flutter (21732): #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:53:5)
E/flutter (21732): #1 double.< (dart:core-patch/double.dart:90:18)
E/flutter (21732): #2 ScrollMetrics.outOfRange (package:flutter/src/widgets/scroll_metrics.dart:89:33)
.
.
.
那么,解决此问题的最佳方法是什么,如何避免maxScrollExtent
为null的错误(这将导致方法<< ='如第一个错误所述在null上被调用)?我当然不喜欢尝试2,而且我也不知道尝试1是否是解决此问题的好方法。如果使用带有混入AnimationController
的{{1}}是解决此问题的正确方法,我将不胜感激一个迷你示例,因为我不完全了解如何将其用于类似这样的事情。如果您能想到其他解决方案,我将非常感谢您的投入。
谢谢!