欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Flutter折疊控件使用方法詳解

 更新時間:2022年01月21日 13:35:51   作者:lizubing1992  
這篇文章主要為大家詳細介紹了Flutter折疊控件的使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Flutter折疊控件使用的具體代碼,供大家參考,具體內(nèi)容如下

1.官方折疊控件ExpansionTiles

官方默認提供了一個折疊控件 ExpansionTiles 主要用于listView做折疊和展開操作的,先來看看一般的用法

Widget _buildTiles(Entry root) {
? ? return new ExpansionTile(
? ? ? title: new Text(root.title),
? ? ? children: root.children.map(_buildTiles).toList(),
? ? );
? }

title 一般就是點擊的標題,可以是任意的Widget

children 是折疊和展開的List

使用很方便

2.自定義折疊控件ExpansionLayout

由于項目中的使用到的折疊控件是由外部Widget控制的,涉及到一些業(yè)務邏輯,使用官方控件ExpansionTiles,存在諸多不便,于是查看ExpansionTiles ,根據(jù)ExpansionTiles源碼做自己的修改,主要是根據(jù)外部傳入的字段來控制展開和折疊

import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';

const Duration _kExpand = Duration(milliseconds: 200);

class ExpansionLayout extends StatefulWidget {
? const ExpansionLayout({
? ? Key key,
? ? this.backgroundColor,
? ? this.onExpansionChanged,
? ? this.children = const <Widget>[],
? ? this.trailing,
? ? this.isExpanded,
? }) : super(key: key);

? final ValueChanged<bool> onExpansionChanged;
? final List<Widget> children;

? final Color backgroundColor;
? //增加字段控制是否折疊
? final bool isExpanded;

? final Widget trailing;

? @override
? _ExpansionLayoutState createState() => _ExpansionLayoutState();
}

class _ExpansionLayoutState extends State<ExpansionLayout>
? ? with SingleTickerProviderStateMixin {
//折疊展開的動畫,主要是控制height
? static final Animatable<double> _easeInTween =
? ? ? CurveTween(curve: Curves.easeIn);
? AnimationController _controller;
? Animation<double> _heightFactor;

? bool _isExpanded;

? @override
? void initState() {
? ? super.initState();
? ? //初始化控制器以及出事狀態(tài)
? ? _controller = AnimationController(duration: _kExpand, vsync: this);
? ? _heightFactor = _controller.drive(_easeInTween);
? ? _isExpanded = widget.isExpanded;
? ? if (_isExpanded) _controller.value = 1.0;
? }

? @override
? void dispose() {
? ? _controller.dispose();
? ? super.dispose();
? }

? void _handleTap() {
? ? setState(() {
? ? ? _isExpanded = widget.isExpanded;
? ? ? if (_isExpanded) {
? ? ? ? _controller.forward();
? ? ? } else {
? ? ? ? _controller.reverse().then<void>((void value) {
? ? ? ? ? if (!mounted) return;
? ? ? ? });
? ? ? }
? ? ? //保存頁面數(shù)據(jù)
? ? ? PageStorage.of(context)?.writeState(context, _isExpanded);
? ? });
? ? //回調(diào)展開事件
? ? if (widget.onExpansionChanged != null)
? ? ? widget.onExpansionChanged(_isExpanded);
? }

? Widget _buildChildren(BuildContext context, Widget child) {
? ? return Container(
? ? ? child: Column(
? ? ? ? mainAxisSize: MainAxisSize.min,
? ? ? ? children: <Widget>[
? ? ? ? ? ClipRect(
? ? ? ? ? ? child: Align(
? ? ? ? ? ? ? heightFactor: _heightFactor.value,
? ? ? ? ? ? ? child: child,
? ? ? ? ? ? ),
? ? ? ? ? ),
? ? ? ? ],
? ? ? ),
? ? );
? }

? @override
? Widget build(BuildContext context) {
? ? //執(zhí)行以下對應的Tap事件
? ? _handleTap();
? ? final bool closed = !_isExpanded && _controller.isDismissed;
? ? return AnimatedBuilder(
? ? ? animation: _controller.view,
? ? ? builder: _buildChildren,
? ? ? child: closed ? null : Column(children: widget.children),
? ? );
? }
}

原理其實很簡單,就是根據(jù)字段_isExpanded 來控制折疊和展開,內(nèi)部使用動畫實現(xiàn)對height的控制

Flutter 目前生態(tài)資源還是很缺乏,很多需要自定義,一般根據(jù)系統(tǒng)相關的控件做修改,是最好的

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Android獲取手機系統(tǒng)版本等信息的方法

    Android獲取手機系統(tǒng)版本等信息的方法

    這篇文章主要介紹了Android獲取手機系統(tǒng)版本等信息的方法,涉及Android獲取手機版本中各種常見信息的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • Android性能優(yōu)化之plt?hook與native線程監(jiān)控詳解

    Android性能優(yōu)化之plt?hook與native線程監(jiān)控詳解

    這篇文章主要為大家介紹了Android性能優(yōu)化之plt?hook與native線程監(jiān)控詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Android Viewpager實現(xiàn)無限循環(huán)輪播圖

    Android Viewpager實現(xiàn)無限循環(huán)輪播圖

    這篇文章主要為大家詳細介紹了Android Viewpager實現(xiàn)無限循環(huán)輪播圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Android開發(fā)App啟動流程與消息機制詳解

    Android開發(fā)App啟動流程與消息機制詳解

    這篇文章主要為大家介紹了Android開發(fā)App啟動流程與消息機制詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 詳解flutter如何實現(xiàn)局部導航管理

    詳解flutter如何實現(xiàn)局部導航管理

    這篇文章主要為大家介紹了詳解flutter如何實現(xiàn)局部導航管理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • Android開發(fā)使用自定義View將圓角矩形繪制在Canvas上的方法

    Android開發(fā)使用自定義View將圓角矩形繪制在Canvas上的方法

    這篇文章主要介紹了Android開發(fā)使用自定義View將圓角矩形繪制在Canvas上的方法,結(jié)合實例形式分析了Android自定義view繪制圓角矩形的相關方法與使用技巧,需要的朋友可以參考下
    2017-10-10
  • Android?殺死進程幾種方法詳細介紹

    Android?殺死進程幾種方法詳細介紹

    這篇文章主要介紹了Android?殺死進程的相關資料,并整理了幾種實現(xiàn)方法,及具體實現(xiàn)的代碼,需要的朋友可以參考下
    2016-11-11
  • Android ListView在Fragment中的使用示例詳解

    Android ListView在Fragment中的使用示例詳解

    這篇文章主要介紹了Android ListView在Fragment中的使用,因為工作一直在用mvvm框架,因此這篇文章是基于mvvm框架寫的,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • Android實現(xiàn)3D推拉門式滑動菜單源碼解析

    Android實現(xiàn)3D推拉門式滑動菜單源碼解析

    這篇文章主要為大家詳細解析了Android實現(xiàn)3D推拉門式滑動菜單源碼以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
    2017-11-11
  • 結(jié)合Windows窗口深入分析Android窗口的實現(xiàn)

    結(jié)合Windows窗口深入分析Android窗口的實現(xiàn)

    在Android中,窗口是一個基本的圖形用戶界面元素,它提供了一個屏幕區(qū)域來放置應用程序的用戶界面元素。窗口可以是全屏的,也可以是一個小的對話框。每個窗口都有一個特定的主題和樣式,可以根據(jù)應用程序的需求進行自定義
    2023-04-04

最新評論