Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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 颤振触发父控件中的一个函数_Flutter_Dart - Fatal编程技术网

Flutter 颤振触发父控件中的一个函数

Flutter 颤振触发父控件中的一个函数,flutter,dart,Flutter,Dart,假设我在这个小部件中有一个小部件“mySonWidget”,我有一个函数“updateIconColor”,我想从“mySonWidget”之父那里调用这个函数 我做了一些类似的回调,但这不是相同的情况。 我看到其他小部件也在控制器上做类似的事情,但我不知道如何创建自定义控制器 我怎么做? 帮助 类mySonWidget扩展StatefulWidget{ @凌驾 _mySonWidgetState createState()=>\u mySonWidgetState(); } 类_mySonWi

假设我在这个小部件中有一个小部件“mySonWidget”,我有一个函数“updateIconColor”,我想从“mySonWidget”之父那里调用这个函数

我做了一些类似的回调,但这不是相同的情况。 我看到其他小部件也在控制器上做类似的事情,但我不知道如何创建自定义控制器

我怎么做? 帮助

类mySonWidget扩展StatefulWidget{
@凌驾
_mySonWidgetState createState()=>\u mySonWidgetState();
}
类_mySonWidgetState扩展状态{
var_iconColor=Colors.red[500];
void updateIconColor(){
设置状态(){
print('调用了updateIconColor');
_iconColor=Colors.green;
});
}
@凌驾
小部件构建(构建上下文){
返回容器(
填充:边缘集。全部(0),
孩子:我的钮扣(
图标:(图标(Icons.star)),
颜色:_i颜色,
按下:(){},
),
);
}
}
父亲的例子:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Column(children: <Widget>[
          mySonWidget(),
          FlatButton(
            onPressed: () {
              /*..Call Function inside mySonWidget (updateIconColor) ..*/
            },
            child: Text(
              "Change Color",
            ),
          ),
        ]),
      ),
    );
  }
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
主题:ThemeData.dark().copyWith(脚手架背景颜色:深蓝色),
debugShowCheckedModeBanner:false,
家:脚手架(
正文:列(子项:[
mySonWidget(),
扁平按钮(
已按下:(){
/*…调用mySonWidget(updateIconColor)内的函数*/
},
子:文本(
“换颜色”,
),
),
]),
),
);
}
}

您可以复制粘贴运行下面的完整代码
您可以使用
GlobalKey
可以使用
\u键.currentState
调用
updateIconColor()

代码片段

GlobalKey _key = GlobalKey();
...
mySonWidget(key: _key),
            FlatButton(
              onPressed: () {
                final _mySonWidgetState _state = _key.currentState;
                _state.updateIconColor();
              },    
...           
class mySonWidget extends StatefulWidget {
  mySonWidget({Key key}) : super(key: key); 
工作演示

完整代码

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  GlobalKey _key = GlobalKey();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      //theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
      debugShowCheckedModeBanner: false,
      home: SafeArea(
        child: Scaffold(
          body: Column(children: <Widget>[
            mySonWidget(key: _key),
            FlatButton(
              onPressed: () {
                final _mySonWidgetState _state = _key.currentState;
                _state.updateIconColor();
              },
              child: Text(
                "Change Color",
              ),
            ),
          ]),
        ),
      ),
    );
  }
}

class mySonWidget extends StatefulWidget {
  mySonWidget({Key key}) : super(key: key);

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

class _mySonWidgetState extends State<mySonWidget> {
  var _iconColor = Colors.red[500];

  void updateIconColor() {
    setState(() {
      print('updateIconColor was called');
      _iconColor = Colors.green;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      padding: EdgeInsets.all(0),
      child: IconButton(
        icon: (Icon(Icons.star)),
        color: _iconColor,
        onPressed: () {},
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
GlobalKey _key=GlobalKey();
@凌驾
小部件构建(构建上下文){
返回材料PP(
//主题:ThemeData.dark().copyWith(脚手架背景颜色:深蓝色),
debugShowCheckedModeBanner:false,
家:安全区(
孩子:脚手架(
正文:列(子项:[
mySonWidget(键:_键),
扁平按钮(
已按下:(){
final _mySonWidgetState _state=_key.currentState;
_state.updateIconColor();
},
子:文本(
“换颜色”,
),
),
]),
),
),
);
}
}
类mySonWidget扩展了StatefulWidget{
mySonWidget({Key}):超级(Key:Key);
@凌驾
_mySonWidgetState createState()=>\u mySonWidgetState();
}
类_mySonWidgetState扩展状态{
var_iconColor=Colors.red[500];
void updateIconColor(){
设置状态(){
print('调用了updateIconColor');
_iconColor=Colors.green;
});
}
@凌驾
小部件构建(构建上下文){
返回容器(
填充:边缘集。全部(0),
孩子:我的钮扣(
图标:(图标(Icons.star)),
颜色:_i颜色,
按下:(){},
),
);
}
}

您可以复制粘贴运行下面的完整代码
您可以使用
GlobalKey
可以使用
\u键.currentState
调用
updateIconColor()

代码片段

GlobalKey _key = GlobalKey();
...
mySonWidget(key: _key),
            FlatButton(
              onPressed: () {
                final _mySonWidgetState _state = _key.currentState;
                _state.updateIconColor();
              },    
...           
class mySonWidget extends StatefulWidget {
  mySonWidget({Key key}) : super(key: key); 
工作演示

完整代码

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  GlobalKey _key = GlobalKey();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      //theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
      debugShowCheckedModeBanner: false,
      home: SafeArea(
        child: Scaffold(
          body: Column(children: <Widget>[
            mySonWidget(key: _key),
            FlatButton(
              onPressed: () {
                final _mySonWidgetState _state = _key.currentState;
                _state.updateIconColor();
              },
              child: Text(
                "Change Color",
              ),
            ),
          ]),
        ),
      ),
    );
  }
}

class mySonWidget extends StatefulWidget {
  mySonWidget({Key key}) : super(key: key);

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

class _mySonWidgetState extends State<mySonWidget> {
  var _iconColor = Colors.red[500];

  void updateIconColor() {
    setState(() {
      print('updateIconColor was called');
      _iconColor = Colors.green;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      padding: EdgeInsets.all(0),
      child: IconButton(
        icon: (Icon(Icons.star)),
        color: _iconColor,
        onPressed: () {},
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
GlobalKey _key=GlobalKey();
@凌驾
小部件构建(构建上下文){
返回材料PP(
//主题:ThemeData.dark().copyWith(脚手架背景颜色:深蓝色),
debugShowCheckedModeBanner:false,
家:安全区(
孩子:脚手架(
正文:列(子项:[
mySonWidget(键:_键),
扁平按钮(
已按下:(){
final _mySonWidgetState _state=_key.currentState;
_state.updateIconColor();
},
子:文本(
“换颜色”,
),
),
]),
),
),
);
}
}
类mySonWidget扩展了StatefulWidget{
mySonWidget({Key}):超级(Key:Key);
@凌驾
_mySonWidgetState createState()=>\u mySonWidgetState();
}
类_mySonWidgetState扩展状态{
var_iconColor=Colors.red[500];
void updateIconColor(){
设置状态(){
print('调用了updateIconColor');
_iconColor=Colors.green;
});
}
@凌驾
小部件构建(构建上下文){
返回容器(
填充:边缘集。全部(0),
孩子:我的钮扣(
图标:(图标(Icons.star)),
颜色:_i颜色,
按下:(){},
),
);
}
}

当我看到emulator时,我就会知道它是您;)是的chuhunghan你的代码很有效。我唯一可以添加的是,如果您的小部件父子在不同的文件(.dart文件)中,那么代码中的“\u mySonWidgetState”是私有的,因此您需要使用mySonWidgetState才能执行强制转换:final mySonWidgetState _state=\u key.currentState;就这些。谢谢当我看到模拟器时,我会知道是你;)是的chuhunghan你的代码很有效。我唯一可以添加的是,如果您的小部件父子在不同的文件(.dart文件)中,那么代码中的“\u mySonWidgetState”是私有的,因此您需要使用mySonWidgetState才能执行强制转换:final mySonWidgetState _state=\u key.currentState;就这些。谢谢你你应该把类名大写你应该把类名大写