Flutter 如何在颤振中调用状态类中的方法?
我想从HomeState类调用方法到_MyHomePageState类,但我不知道怎么做 这是main.dart:Flutter 如何在颤振中调用状态类中的方法?,flutter,dart,Flutter,Dart,我想从HomeState类调用方法到_MyHomePageState类,但我不知道怎么做 这是main.dart: import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp(
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
Home home = new Home();
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: (){}
),
);
}
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:MyHomePage(标题:“颤振演示主页”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
@凌驾
小部件构建(构建上下文){
家=新家();
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:中(
子栏(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
],
),
),
浮动操作按钮:浮动操作按钮(
onPressed:(){}
),
);
}
}
家庭班级:
class Home extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return HomeState();
}
}
class HomeState extends State<Home> {
int numberPrint(){
setState((){});
}
@override
Widget build(BuildContext context) {
}
}
class Home扩展StatefulWidget{
@凌驾
状态createState(){
返回家园();
}
}
类HomeState扩展到State{
int numberPrint(){
setState((){});
}
@凌驾
小部件生成(BuildContext上下文){
}
}
我想在main.dart中的_MyHomePageState类中调用floatingbutton中的numberPrint()方法。
请帮我做这件事。请看看我是如何处理的,这不是最好的,但会给你一个更好的主意
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
//MyHomePage---------------------------------------------------
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
MyController controller = MyController();
@override
Widget build(BuildContext context) {
Home home = new Home(controller:controller);
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: controller.execute,
),
);
}
}
//Home---------------------------------------------------------------------
class Home extends StatefulWidget {
Home({this.controller});
final MyController controller;
@override
State<StatefulWidget> createState() {
return HomeState();
}
}
class HomeState extends State<Home> {
initState(){
widget.controller.addListener(numberPrint);
}
numberPrint(){
setState((){});
}
@override
Widget build(BuildContext context) {
}
}
//MyController--------------------------------------------------------
class MyController{
Function listener;
addListener(Function fn){
listener = fn;
}
execute(){
listener();
}
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:MyHomePage(标题:“颤振演示主页”),
);
}
}
//我的主页---------------------------------------------------
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
MyController controller=MyController();
@凌驾
小部件生成(BuildContext上下文){
主页=新主页(控制器:控制器);
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:中(
子栏(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
],
),
),
浮动操作按钮:浮动操作按钮(
onPressed:controller.execute,
),
);
}
}
//家---------------------------------------------------------------------
类Home扩展了StatefulWidget{
主页({this.controller});
最终控制器;
@凌驾
状态createState(){
返回家园();
}
}
类HomeState扩展到State{
initState(){
widget.controller.addListener(numberPrint);
}
numberPrint(){
setState((){});
}
@凌驾
小部件生成(BuildContext上下文){
}
}
//霉菌控制者--------------------------------------------------------
类MyController{
函数侦听器;
addListener(函数fn){
监听器=fn;
}
执行(){
监听器();
}
}
请看看我是如何处理的,这不是最好的,但会给你一个更好的主意
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
//MyHomePage---------------------------------------------------
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
MyController controller = MyController();
@override
Widget build(BuildContext context) {
Home home = new Home(controller:controller);
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: controller.execute,
),
);
}
}
//Home---------------------------------------------------------------------
class Home extends StatefulWidget {
Home({this.controller});
final MyController controller;
@override
State<StatefulWidget> createState() {
return HomeState();
}
}
class HomeState extends State<Home> {
initState(){
widget.controller.addListener(numberPrint);
}
numberPrint(){
setState((){});
}
@override
Widget build(BuildContext context) {
}
}
//MyController--------------------------------------------------------
class MyController{
Function listener;
addListener(Function fn){
listener = fn;
}
execute(){
listener();
}
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:MyHomePage(标题:“颤振演示主页”),
);
}
}
//我的主页---------------------------------------------------
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
MyController controller=MyController();
@凌驾
小部件生成(BuildContext上下文){
主页=新主页(控制器:控制器);
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:中(
子栏(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
],
),
),
浮动操作按钮:浮动操作按钮(
onPressed:controller.execute,
),
);
}
}
//家---------------------------------------------------------------------
类Home扩展了StatefulWidget{
主页({this.controller});
最终控制器;
@凌驾
状态createState(){
返回家园();
}
}
类HomeState扩展到State{
initState(){
widget.controller.addListener(numberPrint);
}
numberPrint(){
setState((){});
}
@凌驾
小部件生成(BuildContext上下文){
}
}
//霉菌控制者--------------------------------------------------------
类MyController{
函数侦听器;
addListener(函数fn){
监听器=fn;
}
执行(){
监听器();
}
}
一般来说,我使用某种页面神经中枢,通过它小部件可以注册它们的setState
函数或其他东西,例如FocusNode
甚至数据
比如说,
class PageNerveCenter{
Function requireHomeRebuild;
}
PageNerveCenter _pageNerveCenter = PageNerveCenter();
class Home extends StatefulWidget{...}
class _HomeState extends State<Home>{
...
@override
initState(){
super.initState();
// register setState
_pageNerveCenter.requireHomeRebuild = (){
setState((){})
};
}
@override
dispose(){
// remove setState when object is disposed
_pageNerveCenter.requireHomeRebuild = (){};
}
...
}
然后,这种方法允许您从文件中的任何位置,从另一个小部件内部调用小部件的setState
根据我自己的经验,这种方法有助于轻松分解我的小部件树,只重建那些实际上也需要重建的小部件
我当然想听听其他更有经验的fl