flutter的AppBar组件例程

这段代码定义了一个简单的Flutter应用,其主页面包含一个可以改变文本颜色的AppBar。用户可以通过AppBar左侧的弹出菜单或右侧的搜索图标来改变居中文本的字体颜色。

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter AppBar Leading Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  // 颜色状态变量
  Color _textColor = Colors.black;

  // 改变字体颜色的方法
  void _changeTextColor(Color color) {
    setState(() {
      _textColor = color;
    });
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        leading: PopupMenuButton<Color>(
          onSelected: (Color color) {
            // 处理弹出菜单项的选择,并改变字体颜色
            _changeTextColor(color);
          },
          itemBuilder: (BuildContext context) => <PopupMenuEntry<Color>>[
            PopupMenuItem<Color>(
              value: Colors.red,
              child: Text('Red'),
            ),
            PopupMenuItem<Color>(
              value: Colors.green,
              child: Text('Green'),
            ),
            PopupMenuItem<Color>(
              value: Colors.blue,
              child: Text('Blue'),
            ),
          ],
          icon: Icon(Icons.color_lens), // 设置菜单按钮的图标
        ),
        title: Text('Home Page'),
        actions: <Widget>[
          IconButton(
            icon: Icon(Icons.search),
            onPressed: () {
              // 点击搜索按钮,改变字体颜色为黄色
              _changeTextColor(Colors.yellow);
            },
          ),
        ],
      ),
      body: Center(
        child: Text(
          'Hello, Flutter!',
          style: TextStyle(
            fontSize: 24,
            fontWeight: FontWeight.bold,
            color: _textColor,
          ),
        ),
      ),
    );
  }
}

以下是对这段代码的分析:

一、整体结构
首先引入了 Flutter 的基础材料包 material.dart,以便使用 Flutter 的 Material Design 风格组件。
定义了一个入口函数 main,在其中调用 runApp 函数并传入 MyApp 实例,启动整个 Flutter 应用。

二、MyApp 类
MyApp 类继承自 StatelessWidget,表示这是一个无状态的组件。
在 build 方法中,返回一个 MaterialApp 实例,设置了应用的标题为 ‘Flutter AppBar Leading Example’,主题颜色为蓝色(通过 primarySwatch 属性设置为 Colors.blue),并指定了应用的首页为 MyHomePage。

三、MyHomePage 类
MyHomePage 类继承自 StatefulWidget,表示这是一个有状态的组件。
在 createState 方法中,返回一个 _MyHomePageState 实例,用于管理该组件的状态。

四、_MyHomePageState 类
定义了一个私有变量 _textColor,用于存储文本的颜色,初始值为 Colors.black。
_changeTextColor 方法用于改变文本的颜色,通过调用 setState 方法触发组件的重新构建。
在 build 方法中:
返回一个 Scaffold 实例,构建了应用的基本布局。
appBar 是一个 AppBar 组件:
leading 设置为一个 PopupMenuButton,当点击图标(Icon(Icons.color_lens))时,会弹出一个菜 单,菜单中有三个选项(红、绿、蓝三种颜色),选择其中一个颜色会调用 _changeTextColor 方法来改变文本的颜色。
title 设置为 ‘Home Page’。
actions 包含一个 IconButton,图标为搜索图标,点击时会调用 _changeTextColor 方法将文本颜色设置为黄色。
body 是一个居中显示的 Text 组件,文本内容为 ‘Hello, Flutter!’,字体大小为 24,加粗显示,颜色由 _textColor 变量决定。

总体来说,这段代码构建了一个具有可交互 AppBar 的 Flutter 应用,通过点击 AppBar 左侧的弹出菜单和右侧的搜索图标可以改变页面主体文本的颜色。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值