如何在Flutter中正确绑定全状态小部件中的回调函数?

时间:2019-08-23 14:40:29

标签: flutter dart

我是Flutter开发的新手,

这是问题所在: 在我的函数中调用setState()方法时,控制板无法正常工作。

我正在使用ControlPad GitHub

我的依赖项: control_pad:^ 1.0.0 + 2

当我在setState()行中注释掉时,ControlPad可以正常工作,但是小部件没有更新,其他情况是ControlPad不能正常工作。

摘要:

我想将 _move 方法与 onDirectionChanged 函数绑定

import 'package:flutter/material.dart';
import 'package:control_pad/control_pad.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.lightBlue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title, this.test}) : super(key: key);

  final String title;
  final String test;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  double _x= 50;
  double _y= 50;

  void _move(double _degrees, double _distance) {    
    print('Degree:'+_degrees.toString()+' Distance:'+_distance.toString());
    //setState(() {      
      _x += 1;
      _y += 1;
    //});    
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: null,
      body: Container(
        child: Stack(
                children: <Widget>[            
                  Container(   //FullScreen
                    width: MediaQuery.of(context).size.width,
                    height: MediaQuery.of(context).size.height,
                    color: Colors.grey,                    
                  ),      
                  Positioned(
                    bottom: _x ,
                    left: _y,
                    height: 50,      
                    width: 50,              
                    child: Container(
                        color: Colors.purple,
                        child: null,
                      ),
                  ),
                  Positioned(                    
                    bottom: 10 ,
                    left: 10,                      
                    child: JoystickView(                                            
                      opacity: 0.9, 
                      size: MediaQuery.of(context).size.width/4, 
                      showArrows: false, 
                      onDirectionChanged: (double degrees, double distance)=> _move(degrees,distance),
                      ),
                  ),
                ],
              )                        
      ),
    );
  }
}

我不知道这段代码有什么问题。 任何帮助都非常宝贵。

1 个答案:

答案 0 :(得分:0)

将您的构造函数修改为:

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title, this.test, this.onTap}) : super(key: key);

  final String title;
  final String test;
  VoidCallback onTap;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

然后这样称呼它:

MyHomePage(
   title: '',
   'test': '',
   (){}
);

我的答案基于您的标题,看来您在问题详细信息中寻找其他事物