当前位置: 首页 > article >正文

Flutter:AnimatedContainer实现导航侧边栏

导航侧边栏

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}):super(key: key);

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Flutter Demo',
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}):super(key: key);
  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  bool flag = true;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('标题'),
      ),
      body: Stack(
        children: [
          ListView(
            children: [
              Container(
                width: 300,
                height: 100,
                color: Colors.blue,
                child: Text('我是页面里的内容1'),
              ),
              Container(
                width: 300,
                height: 100,
                color: Colors.red,
                child: Text('我是页面里的内容2'),
              ),
            ],
          ),
          Positioned(
            left: 0,
            top: 0,
            bottom: 0,
            child: AnimatedContainer(
              width: 200, // 更改宽度
              height: double.infinity, // 高度无限大
              color: Color.fromRGBO(256, 256, 256, .8),
              duration: const Duration(milliseconds: 300), // 动画时长
              // Matrix4.translationValues(x,y,z) 位置偏移
              transform:flag ? Matrix4.translationValues(-200, 0, 0):Matrix4.translationValues(0, 0, 0),
              child: const Column(
                children: [
                  Text('导航1',style: TextStyle(color: Colors.white),),
                  Text('导航2',style: TextStyle(color: Colors.white),),
                  Text('导航3',style: TextStyle(color: Colors.white),),
                ],
              ),
            ),
          ),
        ],
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: (){
          flag = !flag;
          setState(() {});
        },
        child: const Icon(Icons.add),
      ),
    );
  }
}

在这里插入图片描述

如果想让侧边栏把标题盖上需要将Stack包裹Scaffold

class _MyHomePageState extends State<MyHomePage> {
  bool flag = true;
  @override
  Widget build(BuildContext context) {
    return Stack(
      children: [
        Scaffold(
          appBar: AppBar(
            title: const Text('标题'),
          ),
          body: Stack(
            children: [
              ListView(
                children: [
                  Container(
                    width: 300,
                    height: 100,
                    color: Colors.blue,
                    child: Text('我是页面里的内容1'),
                  ),
                  Container(
                    width: 300,
                    height: 100,
                    color: Colors.red,
                    child: Text('我是页面里的内容2'),
                  ),
                ],
              ),
            ],
          ),
          floatingActionButton: FloatingActionButton(
            onPressed: (){
              flag = !flag;
              setState(() {});
            },
            child: const Icon(Icons.add),
          ),
        ),
        Positioned(
          left: 0,
          top: 0,
          bottom: 0,
          child: AnimatedContainer(
            width: 200, // 更改宽度
            height: double.infinity, // 高度无限大
            color: Color.fromRGBO(256, 256, 256, .8),
            duration: const Duration(milliseconds: 300), // 动画时长
            // Matrix4.translationValues(x,y,z) 位置偏移
            transform:flag ? Matrix4.translationValues(-200, 0, 0):Matrix4.translationValues(0, 0, 0),
            child: const Column(
              children: [
                Text('导航1',style: TextStyle(color: Colors.white),),
                Text('导航2',style: TextStyle(color: Colors.white),),
                Text('导航3',style: TextStyle(color: Colors.white),),
              ],
            ),
          ),
        ),
      ],
    );
  }
}

在这里插入图片描述


http://www.kler.cn/a/403532.html

相关文章:

  • 本地部署与外部部署有何不同?
  • 一次封装,解放双手:Requests如何实现0入侵请求与响应的智能加解密
  • SpringBoot学习记录(四)之分页查询
  • Verilog HDL可综合与不可综合语句
  • el-progress进度条框开着时,要实时刷新显示进度条
  • Oracle 19C 安装RAC磁盘投票失败
  • HBase Java基础操作
  • 网络是怎么连接的
  • uni-app跳转外部链接方式汇总--超全
  • 深度学习:位置前馈神经网络
  • HTML5实现剪刀石头布小游戏(附源码)
  • 将 FastAPI 部署到生产服务器(一套 全)
  • 基于Matlab的电力变压器建模方法(1):单相双绕组变压器的基本电路方程和仿真模型
  • Redisson 3.39.0 发布
  • React 中的Props特性及其应用
  • uniapp 购物弹窗组件 (微信小程序)
  • Jenkins下载安装、构建部署到linux远程启动运行
  • [免费]SpringBoot+Vue毕业设计论文管理系统【论文+源码+SQL脚本】
  • 【LLM训练系列02】如何找到一个大模型Lora的target_modules
  • 数据库笔记1
  • Java 正则表达式详解及实用案例
  • 容器运行时 AND Docker
  • 白嫖网络建设与运维文档,视频,加入知识星球和博客地址
  • 什么是 C++ 中的初始化列表?它的作用是什么?初始化列表和在构造函数体内赋值有什么区别?
  • 【Lucene】详解倒排表的结构,如何实现词典与文档的映射关系
  • 数据结构概述及线性结构