【发布时间】:2019-05-20 11:23:56
【问题描述】:
我想实现从一个有状态小部件到另一个有状态小部件的回调。 (孩子对父母)。层次结构是 Task (contains) -> ItemBought -> addImage
我该如何实现呢?回调函数是否会在 Stateful 小部件或其状态中定义?
这是我当前的代码:
Task.dart
import 'package:flutter/material.dart';
import 'package:flutter_convertor/ItemBought.dart';
class task extends StatelessWidget{
@override
...
}
class taskScreen extends StatefulWidget{
@override
taskState createState() => new taskState();
}
class taskState extends State<taskScreen> {
bool isButtonEnabled = false;
//Callback function i want to call in order to change the state of my Button
formReady(){
setState(() {
isButtonEnabled = !isButtonEnabled ;
});
}
@override
Widget build(BuildContext context) {
Column taskScreen = Column(
children: <Widget>[...
ItemBought(), //ITEMBOUGHT WIDGET
...
Column(
children: <Widget>[
FlatButton(
onPressed: isButtonEnabled ? _completePage : null,
child: Text(
...
),
),
],
)]);
return Scaffold(
appBar: AppBar(
title: Text('Task Screen')),
body: taskScreen,
);
} }
ItemBought.dart
import 'package:flutter/material.dart';
import 'package:flutter_convertor/addImage.dart';
class ItemBought extends StatefulWidget{
@override
_ItemBoughtState createState() => _ItemBoughtState();
}
class _ItemBoughtState extends State<ItemBought> {
...
@override
Widget build(BuildContext context) {
return Container(
child: Column(
children: <Widget> [
...
addImage(),
...
]
)
);
}
}
addImage.dart
import 'package:flutter/material.dart';
import 'package:flutter_convertor/task.dart';
class addImage extends StatefulWidget{
const addImage({this.formReady});
final VoidCallback formReady;
@override
_addImageState createState() => _addImageState();
}
class _addImageState extends State<addImage> {
// const void({taskState.formReady});
// final VoidCallback formReady;
@override
Widget build(BuildContext context) {
return Container(
child: TextField(
onChanged: (text){
formReady(); //ERROR: The method formReady is not defined for the class _addImageState
},
)
);
}
}
如何从小部件 addImage 中调用函数 formReady ?
编辑:
我尝试了这段代码,并删除了所有编译错误,但仍然没有得到想要的结果:
在 addImage.dart 中
TextField(
onChanged: (text){
addImage().formReady;
}
)
在 Itembought.dart 中
addImage(formReady: (){
ItemBought().formReady;
}
在 task.dart 中
ItemBought(formReady: (){
this.formReady();
}),
【问题讨论】: