Flutter学习
2024-04-19 本文已影响0人
nicaho
实现展开/收起的功能
需求
需求:
0.用系统自带的ExpansionTile
1.展开时,去除上下的线条
2.根据内容行数,决定显示"展开/收起"与否
需求1
通过 Theme 修改分割线的颜色
Theme(
data:Theme.of(context).copyWith(dividerColor: Colors.transparent),
child: ExpansionTile(xxx)
)
需求2
通过 String 初始化 TextSpan
通过 TextSpan 初始化 Text,根据行数显示展开还是收缩
通过 TextSpan 初始化 TextPainter,根据行数是否显示 展开/收缩
不提前运行入口 widget 的 initState 的代码
监听原生 ViewController 的 ViewDidLoad
0.通过 GlobalKey 关联
GlobalKey<_MyHomePageState> widgetKey = GlobalKey();
1.在 initState 增加监听
observer = ViewDidLoadObserver(widgetKey);
WidgetsBinding.instance.addObserver(observer);
2.在 WidgetBindingObserver 处理
3.同时,要增加标识,判断何时重新刷新(build)
void buildDatas() {
_isShowList = true
}
FutureBuilder<XXX>(
future: futureXXX,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting || !_isShowList) {
}
)