我有一个带有2个标签和一个浮动操作按钮的标签。 我有一个单独的课程来填充我的标签栏视图。 我想更改或从父浮动操作按钮按下的方法在该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),
),
);
}
}
答案 0 :(得分:0)
小部件更新后,您还需要更新其状态:
class _Tabbarview1State extends State<Tabbarview1> {
...
@override
void didUpdateWidget(Tabbarview1 oldWidget) {
super.didUpdateWidget(oldWidget);
if (oldWidget.txt != widget.txt) {
setState(() {
strTitle = widget.txt;
});
}
}
来回滑动是可行的,因为小部件已被处置并以新值再次初始化。