翩翩起舞的按钮,可以更新主体

问题描述 投票:0回答:1

你好,我怎么能让2个按钮,将更新主体内容,如标签。当你点击第1个按钮,它将显示为选择和内容将改变(appBar标题,正文,滑块等)。当你点击另一个按钮时,它将显示为选中,并将再次改变内容。但是按钮会出现在两个内容中,就像下面这个例子一样。

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

enter image description here

flutter button setstate
1个回答
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()));
          })
    ]);
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.