Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/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 从另一个小部件更改小部件的状态_Flutter_Dart_Flutter Widget - Fatal编程技术网

Flutter 从另一个小部件更改小部件的状态

Flutter 从另一个小部件更改小部件的状态,flutter,dart,flutter-widget,Flutter,Dart,Flutter Widget,我最近开始使用FlatterWeb。从另一个文件(例如test.dart)更改一个文件(例如Home.dart)中的小部件状态的最佳实践是什么 导入“包装:颤振/材料.省道”; 类MyHomePage扩展StatefulWidget{ @凌驾 _MyHomePageState createState()=>\u MyHomePageState(); } 类_MyHomePageState扩展状态{ Color colo=Colors.black; 种皮(){ 设置状态(){ colo=颜色。蓝色

我最近开始使用FlatterWeb。从另一个文件(例如test.dart)更改一个文件(例如Home.dart)中的小部件状态的最佳实践是什么

导入“包装:颤振/材料.省道”;
类MyHomePage扩展StatefulWidget{
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
Color colo=Colors.black;
种皮(){
设置状态(){
colo=颜色。蓝色;
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:世界其他地区(
儿童:[
容器(
宽度:30,
身高:30,
颜色:科洛,
),
手势检测器(
onTap:(){
种皮();
},
子:容器(
子项:文本(“测试”),
))
],
),
);
}
}
在上面的代码中,我创建了一个初始颜色为黑色的框,并使用同一类MyHomePage中的手势检测器对其进行了更改。如何在不同的dart文件中使用不同的类执行相同的操作

首页.dart

import 'package:flutter/material.dart';
import 'package:testweb/test.dart';

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Color colo = Colors.black;

  testA() {
    setState(() {
      colo = Colors.blue;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Row(
        children: [
          Container(
            width: 30,
            height: 30,
            color: colo,
          ),
          TestB()
        ],
      ),
    );
  }
}

导入“包装:颤振/材料.省道”;
导入“package:testweb/test.dart”;
类MyHomePage扩展StatefulWidget{
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
Color colo=Colors.black;
种皮(){
设置状态(){
colo=颜色。蓝色;
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:世界其他地区(
儿童:[
容器(
宽度:30,
身高:30,
颜色:科洛,
),
TestB()
],
),
);
}
}
飞镖

import 'package:flutter/material.dart';

class TestB extends StatefulWidget {
  @override
  _TestBState createState() => _TestBState();
}

class _TestBState extends State<TestB> {
  @override
  Widget build(BuildContext context) {
    return GestureDetector(
        onTap: () {
          testA();
        },
        child: Container(
          child: Text("test"),
        ));
  }
}
导入“包装:颤振/材料.省道”;
类TestB扩展了StatefulWidget{
@凌驾
_TestBState createState()=>\u TestBState();
}
类_TestBState扩展状态{
@凌驾
小部件构建(构建上下文){
返回手势检测器(
onTap:(){
种皮();
},
子:容器(
子项:文本(“测试”),
));
}
}

您可以使用TestB onTap中的函数设置主页容器的颜色

飞镖

import 'package:flutter/material.dart';

class TestB extends StatefulWidget {
 Function colorChange;
 TestB({this.colorChange});
  @override
  _TestBState createState() => _TestBState();
}

class _TestBState extends State<TestB> {
  @override
  Widget build(BuildContext context) {
    return GestureDetector(
        onTap: () {
          widget.colorChange(Colors.blue);
        },
        child: Container(
          child: Text("test"),
        ));
  }
}
导入“包装:颤振/材料.省道”;
类TestB扩展了StatefulWidget{
功能色变;
TestB({this.colorChange});
@凌驾
_TestBState createState()=>\u TestBState();
}
类_TestBState扩展状态{
@凌驾
小部件构建(构建上下文){
返回手势检测器(
onTap:(){
颜色改变(颜色为蓝色);
},
子:容器(
子项:文本(“测试”),
));
}
}
霍姆·达特

import 'package:flutter/material.dart';
import 'package:testweb/test.dart';

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Color colo = Colors.black;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Row(
        children: [
          Container(
            width: 30,
            height: 30,
            color: colo,
          ),
          TestB(colorChange: (color){
           setState(() {
            colo = color;
           });
          })
        ],
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
导入“package:testweb/test.dart”;
类MyHomePage扩展StatefulWidget{
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
Color colo=Colors.black;
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:世界其他地区(
儿童:[
容器(
宽度:30,
身高:30,
颜色:科洛,
),
测试B(颜色变化:(颜色){
设置状态(){
colo=颜色;
});
})
],
),
);
}
}
告诉我它是否有效

import 'package:flutter/material.dart';
import 'package:testweb/test.dart';

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Color colo = Colors.black;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Row(
        children: [
          Container(
            width: 30,
            height: 30,
            color: colo,
          ),
          TestB(colorChange: (color){
           setState(() {
            colo = color;
           });
          })
        ],
      ),
    );
  }
}