场景:在使用 ListView 组件时候,如果渲染多个 input 组件,在滚动时会出现 input 的值被销毁; 原因在于 listView 组件的垃圾回收机制,如果子组件脱离了视口会在内存中销毁,等下次会被重新渲染
使用 SingleChildScrollView 替代 ListView
SingleChildScrollView (
children:[]
)
优化 Listview 组件的水波纹效果
需要封装一个 NoShadowScrollBehavior 方法
// 自定义组件取消水波纹
import 'package:flutter/material.dart';
class NoShadowScrollBehavior extends ScrollBehavior {
@override
Widget buildViewportChrome(BuildContext context, Widget child, AxisDirection axisDirection) {
switch (getPlatform(context)) {
case TargetPlatform.iOS:
case TargetPlatform.macOS:
return child;
case TargetPlatform.android:
case TargetPlatform.fuchsia:
case TargetPlatform.linux:
case TargetPlatform.windows:
return GlowingOverscrollIndicator(
child: child,
//不显示头部水波纹
showLeading: false,
//不显示尾部水波纹
showTrailing: false,
axisDirection: axisDirection,
color: Theme.of(context).accentColor,
);
}
}
}
使用 ScrollConfiguration 组件包裹 ListView 组件
ScrollConfiguration(
behavior: NoShadowScrollBehavior(),
child:ListView(
children:[]
)
)