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
Flutter 颤振:从上一屏幕上的特定卡导航时动态更改AppBar标题_Flutter_Dart_Flutter Layout - Fatal编程技术网

Flutter 颤振:从上一屏幕上的特定卡导航时动态更改AppBar标题

Flutter 颤振:从上一屏幕上的特定卡导航时动态更改AppBar标题,flutter,dart,flutter-layout,Flutter,Dart,Flutter Layout,我不熟悉flifter,并尝试根据上一个屏幕上点击的卡片练习名称动态更改输入屏幕的appBar标题 例如,如果用户点击Barbell Row卡(请参阅下面图像的链接),输入屏幕appBar标题将变为Barbell Row 实现这一目标的最佳方式是什么 谢谢请尝试下面的代码。它工作得非常好 第一屏 class FirstScreen extends StatelessWidget { @override Widget build(BuildContext context) {

我不熟悉flifter,并尝试根据上一个屏幕上点击的卡片练习名称动态更改输入屏幕的appBar标题

例如,如果用户点击Barbell Row卡(请参阅下面图像的链接),输入屏幕appBar标题将变为Barbell Row

实现这一目标的最佳方式是什么


谢谢

请尝试下面的代码。它工作得非常好

第一屏

class FirstScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(
          'First Screen'
        ),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            GestureDetector(
              onTap: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (BuildContext context) => SecondScreen('Babel Row'),
                  ),
                );
              },
              child: Card(
                child: Container(
                  height: 100,
                  width: MediaQuery.of(context).size.width,
                  child: Center(child: Text('Babel Row')),
                ),
              ),
            ),
            SizedBox(height: 20,),
            GestureDetector(
              onTap: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (BuildContext context) => SecondScreen('Bench Press'),
                  ),
                );
              },
              child: Card(
                child: Container(
                  height: 100,
                  width: MediaQuery.of(context).size.width,
                  child: Center(child: Text('Bench Press')),
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}
class SecondScreen extends StatelessWidget {
  // define a string variable
  final String name;

  // create a constructor
  const SecondScreen(this.name);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        // set the app bar title here
        title: Text(name),
      ),
      body: Center(
        child: Text(
          name,
          style: TextStyle(
            fontSize: 25,
            fontWeight: FontWeight.w500,
          ),
        ),
      ),
    );
  }
}
输出:



我希望这有帮助。

这是传递数据的好方法

class PreviousScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          RaisedButton(
            onPressed: () {
              navigate(context, "Hello");
            },
            child: Text("Hello"),
          ),
          RaisedButton(
            onPressed: () {
              navigate(context, "Bar Bell");
            },
            child: Text("Bar bell"),
          )
        ],
      ),
    );
  }

  void navigate(BuildContext context, String text){
    Navigator.push(context, MaterialPageRoute(builder: (context) => SignleCardInputScreen(text: text,)));
  }

}

class SignleCardInputScreen extends StatelessWidget {

final String text;

  const SignleCardInputScreen({Key key, this.text}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(text),
      ),
    );
  }
}
class PreviousScreen扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:专栏(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
升起的按钮(
已按下:(){
导航(上下文,“你好”);
},
孩子:文本(“你好”),
),
升起的按钮(
已按下:(){
导航(上下文,“酒吧铃”);
},
子项:文本(“酒吧铃”),
)
],
),
);
}
无效导航(BuildContext上下文、字符串文本){
push(context,materialpage(builder:(context)=>SignleCardInputScreen(text:text,));
}
}
类SignleCardInputScreen扩展了无状态小部件{
最终字符串文本;
const SignleCardInputScreen({Key-Key,this.text}):super(Key:Key);
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(Text),
),
);
}
}
创建一个接受字符串的导航方法是一个很好的实践,因为您将不止一次地这样做