【问题标题】:Flutter Buttons which updates the body更新正文的颤振按钮
【发布时间】:2020-06-02 13:39:20
【问题描述】:

您好,我怎样才能制作 2 个按钮来更新标签页之类的正文内容。当您单击第一个按钮时,它将显示为已选中并且内容将发生变化(appBar 标题、正文、滑块等)。当您单击另一个时,它将显示为已选中,并将再次更改内容。但按钮将出现在两个内容中。就像下面这个例子一样

有一些看起来像标签但不同的是它们正在改变状态和更新页面

【问题讨论】:

  • setState 在按钮的onPressed 中。

标签: flutter button setstate


【解决方案1】:

最简单的方法是创建一个全局变量来保存所选按钮的值。

把它放在 main() 方法之外。

您可以从项目中的每个类和文件中访问它。

其他方式需要提供者和状态管理架构。

工作样本:

import 'package:flutter/material.dart';

int selectedButton = 0;

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Page1(),
    );
  }
}

class Page1 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        debugShowCheckedModeBanner: false,
        home: Scaffold(
            body: Column(children: <Widget>[
          Text('Page1'),
          MyWidget(selectedButton),
        ])));
  }
}

class Page2 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        debugShowCheckedModeBanner: false,
        home: Scaffold(
            body: Column(children: <Widget>[
          Text('Page2'),
          MyWidget(selectedButton),
        ])));
  }
}

class MyWidget extends StatelessWidget {
  final int selected;

  MyWidget(this.selected);

  @override
  Widget build(BuildContext context) {
    return Row(children: <Widget>[
      RawMaterialButton(
          child: Text("Go to page1"),
          fillColor: selected == 0 ? Colors.red : Colors.grey,
          onPressed: () {
            selectedButton = 0;
            Navigator.push(
                context, MaterialPageRoute(builder: (context) => Page1()));
          }),
      RawMaterialButton(
          child: Text("Go to page2"),
          fillColor: selected == 1 ? Colors.red : Colors.grey,
          onPressed: () {
            selectedButton = 1;
            Navigator.push(
                context, MaterialPageRoute(builder: (context) => Page2()));
          })
    ]);
  }
}

【讨论】:

  • 请提供一个例子
  • 哦,非常感谢,我有一个问题,如何从另一个文件访问全局变量 int selectButton?
  • 每个全局变量已经被其他文件可见。或者,如果您想更清楚地将其作为静态变量放在新文件中的类中,然后将该文件导入所有其他文件中。
  • 再次谢谢你,我明白了,刚刚导入库并使用它为我工作的“as”注释。
  • 对不起,在这个例子中,您使用 Navigator.push 进行重定向并更改页面。有没有一种方法可以让我只更改同一页面的正文内容而不通过按此按钮更改到另一个页面?
猜你喜欢
  • 2020-11-22
  • 2021-11-24
  • 2020-05-26
  • 1970-01-01
  • 2021-11-07
  • 2020-03-14
  • 1970-01-01
  • 2021-10-24
  • 2020-04-23
相关资源
最近更新 更多