flutter - 如何在 Flutter 中正确绑定有状态小部件中的回调函数?
问题描述
我是 Flutter 开发的新手,
问题是:在我的函数中调用该方法时, Controlpad无法正常工作。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),
),
),
],
)
),
);
}
}
我不知道这段代码有什么问题。任何帮助都是有价值的。
解决方案
将您的构造函数修改为:
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': '',
(){}
);
我的回答是基于你的标题,看来你在问题细节中寻找不同的东西
推荐阅读
- javascript - 如何删除与 glob 数组中的基本名称匹配的所有文件?
- swift - 如何在 swift4 中为这个 json 数据创建一个结构?
- caching - 为什么 CloudFront GZIP 不压缩我的 HTML/JSP 页面
- angular - 无法使用电子打包器创建 Windows 应用程序包
- python - Jupyter 中 Numpy 函数的文档
- visual-studio-2017 - 如何更改某个变更集的注释颜色
- asp.net - 如何基于在 Asp.net mvc 和 Knockoutjs 中单击 Add new 来重复绑定控件
- ios - iOS-如何在限制范围内绘画
- python - 在 tkinter 中使用线程
- excel - 将 2 行单元格与电子表格中同一列中的行下单元格进行比较时,根据重复值删除行