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
Tabs 带有子选项卡的颤振Appbar(动作)_Tabs_Dart_Flutter_Appbar_Flutter Appbar - Fatal编程技术网

Tabs 带有子选项卡的颤振Appbar(动作)

Tabs 带有子选项卡的颤振Appbar(动作),tabs,dart,flutter,appbar,flutter-appbar,Tabs,Dart,Flutter,Appbar,Flutter Appbar,我是个新手,不知你能否帮我找到解决问题的办法 我有一个带有选项卡视图的脚手架,我想在主appbar中创建一个过滤器(操作按钮)来管理选项卡 main和child都是statefulwidget 以下是我的主页代码: Widget body = TabBarView( controller: tabController, children: <Widget>[ new First(filter: filter), new Seco

我是个新手,不知你能否帮我找到解决问题的办法

我有一个带有选项卡视图的脚手架,我想在主appbar中创建一个过滤器(操作按钮)来管理选项卡

main和child都是statefulwidget

以下是我的主页代码:

Widget body = TabBarView(
      controller: tabController,
      children: <Widget>[
        new First(filter: filter),
        new Second(filter: filter);
        new Third(filter: filter);
      ],
    );
return Scaffold(
    appBar: AppBar(
           actions:[IconButton(icon: Icon(MdiIcons.filter),onPressed: 
           () {
              // Send info to child 
           })],
           bottom: new TabBar(
           controller: tabController,
           tabs: <Tab>[
             new Tab(text:"Tab1"),
             new Tab(text:"Tab2"),
             new Tab(text:"Tab3")
           ],
    body: new Builder(builder: (BuildContext context) {
      _scaffoldContext = context;
      return body;
    }));
));

我不知道将appbar的操作放在哪里,以便从主页上更改孩子身体上的文本。

我找到了解决方案,将我的父窗口小部件作为继承窗口小部件,这样我就可以从孩子那里访问它的数据

下面是一个例子:

class MyStatefulWidget extends StatefulWidget{
@override
  MyStatefulWidgetState createState() => MyStatefulWidgetState();

  static MyStatefulWidgetState of(BuildContext context){
    return (context.inheritFromWidgetOfExactType(_MyInheritedStateContainer) as _MyInheritedStateContainer).data;
  }
}
class MyStatefulWidgetState extends State<MyStatefulWidget>{

String variableCalledHello = "Hello World";
@override
  void initState() {
    super.initState();
  }
 @override
  Widget build(BuildContext context) {
   return new _MyInheritedStateContainer(data:this,child:/* Body here */);
  }
}
class _MyInheritedStateContainer extends InheritedWidget{
    _MyInheritedStateContainer({
Key key,
    @required Widget child,
    @required this.data,
  }) : super(key: key, child: child);

final MyStatefulWidgetState data;

 @override
  bool updateShouldNotify(_MyInheritedStateContainer oldWidget) {
    return true;
  }
}
@override
  Widget build(BuildContext context) {
   MyStatefulWidgetState state = MyStatefulWidgetState.of(context);

   print(state.variableCalledHello);

   return /* Container ... */;

}
希望这能帮助某人解决他的问题


谢谢。

你的-First(filter:filter)是什么?First(filter:filter)是第一个子项(Tab)
类First extensed StatefulWidget{final String filter;First({Key-Key,@required this.filter}):super(Key:Key);@override FirstState createState()=>FirstState();}
您想发送什么信息?我想从主视图(选项卡视图)中的alertdialog发送信息(在本例中为字符串)。AlertDialog来自主脚手架。我所做的是更新字符串并将其发送到tab,但无法刷新tab以显示新值
@override
  Widget build(BuildContext context) {
   MyStatefulWidgetState state = MyStatefulWidgetState.of(context);

   print(state.variableCalledHello);

   return /* Container ... */;

}