Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何在flatter中更改小部件之间ScrollController的偏移值?_Flutter - Fatal编程技术网

Flutter 如何在flatter中更改小部件之间ScrollController的偏移值?

Flutter 如何在flatter中更改小部件之间ScrollController的偏移值?,flutter,Flutter,我试图将驻留在一个有状态小部件中的ScrollController的偏移量值从另一个有状态小部件中更改 我不是使用导航器来改变屏幕,而是简单地调用有状态小部件 在这种情况下,将在主屏幕有状态小部件内部调用InspectionForm有状态小部件 主屏幕有状态小部件: class HomeScreen extends StatefulWidget { @override _HomeScreenState createState() => _HomeScreenState(); cl

我试图将驻留在一个有状态小部件中的ScrollController的偏移量值从另一个有状态小部件中更改

我不是使用导航器来改变屏幕,而是简单地调用有状态小部件

在这种情况下,将在主屏幕有状态小部件内部调用InspectionForm有状态小部件

主屏幕有状态小部件:

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按下(滚动偏移);
}
);
}
}

这正是我的想法,但由于我是一名新手,我认为必须有更好的方法来实现这一点!感谢您的帮助!!