Flutter 如何在flatter中更改小部件之间ScrollController的偏移值?
我试图将驻留在一个有状态小部件中的ScrollController的偏移量值从另一个有状态小部件中更改 我不是使用导航器来改变屏幕,而是简单地调用有状态小部件 在这种情况下,将在主屏幕有状态小部件内部调用InspectionForm有状态小部件 主屏幕有状态小部件:Flutter 如何在flatter中更改小部件之间ScrollController的偏移值?,flutter,Flutter,我试图将驻留在一个有状态小部件中的ScrollController的偏移量值从另一个有状态小部件中更改 我不是使用导航器来改变屏幕,而是简单地调用有状态小部件 在这种情况下,将在主屏幕有状态小部件内部调用InspectionForm有状态小部件 主屏幕有状态小部件: class HomeScreen extends StatefulWidget { @override _HomeScreenState createState() => _HomeScreenState(); cl
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
class _HomeScreenState extends State<HomeScreen> {
final ScrollController _homeController = ScrollController();
Widget _buildForm() {
if (_homeController.hasClients) {
setState(() {
_homeController.animateTo(
0.0,
curve: Curves.easeOut,
duration: const Duration(milliseconds: 300),
);
});
}
return InspectionForm();
}
@override
Widget build(BuildContext context) {
return Scaffold(body: CustomScrollView(
controller: _homeController,
primary: false,
slivers: <Widget>[
SliverList(
delegate: SliverChildListDelegate(
[
Column(
children: <Widget>[
Container(
child: _buildForm(),
),
],
),
],
),
),
],
),
);
}
class InspectionForm extends StatefulWidget {
@override
_InspectionFormState createState() => _InspectionFormState();
}
class _InspectionFormState extends State<InspectionForm> {
@override
Widget build(BuildContext context) {
return RaisedButton(
onPressed: (){
//Need to change the ScrollView offset when this button is pressed over here.
}
);
}
}
类主屏幕扩展StatefulWidget{
@凌驾
_HomeScreenState createState()=>\u HomeScreenState();
类_homescrenstate扩展状态{
最终ScrollController_homeController=ScrollController();
小部件_buildForm(){
if(_homeController.hasClients){
设置状态(){
_homeController.animateTo(
0.0,
曲线:Curves.easeOut,
持续时间:常量持续时间(毫秒:300),
);
});
}
返回检查表单();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(主体:CustomScrollView(
控制器:_homeController,
主要:错误,
条子:[
银表(
委托:SliverChildListDelegate(
[
纵队(
儿童:[
容器(
子项:_buildForm(),
),
],
),
],
),
),
],
),
);
}
表单有状态小部件:
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
class _HomeScreenState extends State<HomeScreen> {
final ScrollController _homeController = ScrollController();
Widget _buildForm() {
if (_homeController.hasClients) {
setState(() {
_homeController.animateTo(
0.0,
curve: Curves.easeOut,
duration: const Duration(milliseconds: 300),
);
});
}
return InspectionForm();
}
@override
Widget build(BuildContext context) {
return Scaffold(body: CustomScrollView(
controller: _homeController,
primary: false,
slivers: <Widget>[
SliverList(
delegate: SliverChildListDelegate(
[
Column(
children: <Widget>[
Container(
child: _buildForm(),
),
],
),
],
),
),
],
),
);
}
class InspectionForm extends StatefulWidget {
@override
_InspectionFormState createState() => _InspectionFormState();
}
class _InspectionFormState extends State<InspectionForm> {
@override
Widget build(BuildContext context) {
return RaisedButton(
onPressed: (){
//Need to change the ScrollView offset when this button is pressed over here.
}
);
}
}
类检查表单扩展StatefulWidget{
@凌驾
_InspectionFormState createState()=>\u InspectionFormState();
}
类_InspectionFormState扩展状态{
@凌驾
小部件构建(构建上下文){
返回上升按钮(
已按下:(){
//按下此按钮时,需要更改滚动视图偏移量。
}
);
}
}
我简化了上面的代码,使其更易于阅读,并简单地阐明了我的观点。任何帮助都将不胜感激。在我看来,您已经知道flifter的
ScrollController
是如何工作的,并且您的检查表单
被实例化为您的HomeCree的孩子n
,所以您可以做的一件事是将一个函数作为参数从主屏幕
传递到检查表单
。此函数将从检查表单
触发,但它将在主屏幕
中定义,从中可以使用滚动控制器
执行任何操作。类似于是(我还没有尝试过这个代码,它只是一个草稿,供您理解)
类主屏幕扩展StatefulWidget{
@凌驾
_HomeScreenState createState()=>\u HomeScreenState();
类_homescrenstate扩展状态{
最终ScrollController_homeController=ScrollController();
Widget\u buildForm(void函数(双精度)onFormButton按下){
if(_homeController.hasClients){
设置状态(){
_homeController.animateTo(
0.0,
曲线:Curves.easeOut,
持续时间:常量持续时间(毫秒:300),
);
});
}
退货检验单(onFormButtonPressed);
}
按下void _onformbutton(双滚动偏移){
//无论你需要在这里用ScrollController做什么。。。
}
@凌驾
小部件构建(构建上下文){
返回脚手架(主体:CustomScrollView(
控制器:_homeController,
主要:错误,
条子:[
银表(
委托:SliverChildListDelegate(
[
纵队(
儿童:[
容器(
子项:_buildForm(_onFormButtonPressed),
),
],
),
],
),
),
],
),
);
}
然后,表单需要将函数作为参数
class InspectionForm extends StatefulWidget {
InspectionForm(this.onButtonPressed);
final void Function(double) onButtonPressed;
@override
_InspectionFormState createState() => _InspectionFormState();
}
class _InspectionFormState extends State<InspectionForm> {
@override
Widget build(BuildContext context) {
return RaisedButton(
onPressed: () {
// Compute some scrollOffset here, whatever you need...
widget.onButtonPressed(scrollOffset);
}
);
}
}
类检查表单扩展StatefulWidget{
检查表(按下此按钮);
最终孔隙功能(双)ON按钮按下;
@凌驾
_InspectionFormState createState()=>\u InspectionFormState();
}
类_InspectionFormState扩展状态{
@凌驾
小部件构建(构建上下文){
返回上升按钮(
onPressed:(){
//在这里计算一些滚动偏移量,不管你需要什么。。。
控件.onButton按下(滚动偏移);
}
);
}
}
这正是我的想法,但由于我是一名新手,我认为必须有更好的方法来实现这一点!感谢您的帮助!!