gpt4 book ai didi

flutter - 如何从父 float Action 按钮调用另一个类的initstate()方法?

转载 作者:行者123 更新时间:2023-12-03 03:01:15 25 4
gpt4 key购买 nike

我有2个标签和一个 float 操作按钮的标签。
我有一个单独的类(class)来填充我的标签栏 View 。
我想通过父 float 操作按钮按下的方法在该tabbarview中进行更改或调用一个方法。
下面,我通过简单的文本和行为简化了场景。
通过滑动选项卡,将调用第二个initstate()方法,调试器将在以下位置停止

strTitle=widget.txt;

我需要在按下按钮时进行同样的操作。
如果flutter可以在滑动时自动调用initstate,为什么我不能这样做。应该有一些我不知道的方法。
import 'package:flutter/material.dart';

class MyTabbedPage extends StatefulWidget {
const MyTabbedPage({Key key}) : super(key: key);
@override
_MyTabbedPageState createState() => _MyTabbedPageState();
}

class _MyTabbedPageState extends State<MyTabbedPage>
with SingleTickerProviderStateMixin {
int i = 0;
final List<Tab> myTabs = <Tab>[
Tab(
text: 'LEFT',
),
Tab(text: 'RIGHT'),
];

TabController _tabController;

@override
void initState() {
super.initState();
_tabController = TabController(vsync: this, length: myTabs.length);
}

@override
void dispose() {
_tabController.dispose();
super.dispose();
}

pressed() {
i = i + 1;
setState(() {});
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
bottom: TabBar(
controller: _tabController,
tabs: myTabs,
),
),
floatingActionButton: FloatingActionButton(
onPressed: pressed,
child: Icon(Icons.power_settings_new),
),
body: TabBarView(
controller: _tabController,
children: myTabs.map((Tab tab) {
String label = tab.text.toLowerCase();
if (label.contains("right")) {
label = "Modified Right";
}
return Tabbarview1(label + ' ' + i.toString());
}).toList(),
),
);
}
}

class Tabbarview1 extends StatefulWidget {
final String txt;
Tabbarview1(this.txt);
@override
_Tabbarview1State createState() => _Tabbarview1State();
}

class _Tabbarview1State extends State<Tabbarview1> {
String strTitle = "0";
@override
void initState() {
super.initState();
strTitle = widget.txt;
}

@override
void dispose() {
super.dispose();
}

@override
Widget build(BuildContext context) {
return Container(
child: Center(
child: Text(strTitle),
),
);
}
}

最佳答案

小部件更新后,您还需要更新其状态:

class _Tabbarview1State extends State<Tabbarview1> {
...

@override
void didUpdateWidget(Tabbarview1 oldWidget) {
super.didUpdateWidget(oldWidget);

if (oldWidget.txt != widget.txt) {
setState(() {
strTitle = widget.txt;
});
}
}

来回滑动是可行的,因为小部件已被处置并以新值再次初始化。

关于flutter - 如何从父 float Action 按钮调用另一个类的initstate()方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59213723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com