Flutter 在Flatter上键入TextField时滚动到顶部
我在Flutter 在Flatter上键入TextField时滚动到顶部,flutter,dart,flutter-sliver,Flutter,Dart,Flutter Sliver,我在SliverPersistentHeaderDelegate上添加了TextFormField。滚动到中间/底部,然后在文本字段中键入后,SliverList自动进入顶部。如何禁用此功能 完整代码 class MyWidget extends StatelessWidget { static const String route = '/myWidget'; @override Widget build(BuildContext context) { return Sc
SliverPersistentHeaderDelegate
上添加了TextFormField
。滚动到中间/底部,然后在文本字段中键入后,SliverList
自动进入顶部。如何禁用此功能
完整代码
class MyWidget extends StatelessWidget {
static const String route = '/myWidget';
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: CustomScrollView(
slivers: <Widget>[
SliverPersistentHeader(
pinned: true,
delegate: MyDynamicHeader(),
),
SliverList(
delegate: SliverChildBuilderDelegate((BuildContext context, int index) {
return Container(
height: 200,
color: Color(Random().nextInt(0xffffffff)),
);
},
)
)
],
)
)
);
}
}
class MyDynamicHeader extends SliverPersistentHeaderDelegate {
int index = 0;
@override
Widget build(BuildContext context, double shrinkOffset, bool overlapsContent) {
return LayoutBuilder(
builder: (context, constraints) {
final Color color = Colors.primaries[index];
final double percentage = (constraints.maxHeight - minExtent)/(maxExtent - minExtent);
if (++index > Colors.primaries.length-1)
index = 0;
return Container(
decoration: BoxDecoration(
boxShadow: [BoxShadow(blurRadius: 4.0, color: Colors.black45)],
gradient: LinearGradient(
colors: [Colors.blue, color]
)
),
height: constraints.maxHeight,
child: SafeArea(
child: Center(
child: Row(
children: <Widget>[
CircularProgressIndicator(
value: percentage,
valueColor: AlwaysStoppedAnimation<Color>(Colors.white),
),
InkWell(
onTap: (){
print('is working');
},
child: Container(
height: 50,
width: 100,
color: Palette.orelPay,
),
),
Expanded(child: TextFormField(
//controller: searchController,
decoration: InputDecoration(
contentPadding:
EdgeInsets.fromLTRB(20.0, 15.0, 20.0, 15.0),
hintText: "Search on OrelBuy",
border: OutlineInputBorder(
borderSide:
BorderSide(color: Palette.background, width: 32.0),
borderRadius: BorderRadius.circular(50.0)),
fillColor: Palette.background,
filled: true,
enabledBorder: OutlineInputBorder(
borderSide:
BorderSide(color: Palette.background, width: 32.0),
borderRadius: BorderRadius.circular(50.0)),
focusedBorder: OutlineInputBorder(
borderSide:
BorderSide(color: Palette.background, width: 32.0),
borderRadius: BorderRadius.circular(50.0))),
),)
],
),
)
),
);
}
);
}
@override
bool shouldRebuild(SliverPersistentHeaderDelegate old) => false;
@override
double get maxExtent => 250.0;
@override
double get minExtent => 80.0;
}
类MyWidget扩展了无状态Widget{
静态常量字符串route='/myWidget';
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:容器(
子:自定义滚动视图(
条子:[
滑冰机(
对,,
委托:MyDynamicHeader(),
),
银表(
委托:SliverChildBuilderDelegate((BuildContext上下文,int索引){
返回容器(
身高:200,
颜色:颜色(Random().nextInt(0xffffffff)),
);
},
)
)
],
)
)
);
}
}
类MyDynamicHeader扩展SliverPersistentHeaderDelegate{
int指数=0;
@凌驾
小部件构建(BuildContext上下文、双收缩偏移、布尔重叠内容){
返回布局生成器(
生成器:(上下文、约束){
最终颜色=颜色。原色[索引];
最终双百分比=(constraints.maxHeight-minExtent)/(maxExtent-minExtent);
if(++index>Colors.primaries.length-1)
指数=0;
返回容器(
装饰:盒子装饰(
boxShadow:[boxShadow(模糊半径:4.0,颜色:Colors.black45)],
梯度:线性梯度(
颜色:[颜色。蓝色,颜色]
)
),
高度:constraints.maxHeight,
儿童:安全区(
儿童:中心(
孩子:排(
儿童:[
循环压缩机指示器(
值:百分比,
valueColor:AlwaysStoppedAnimation(颜色.白色),
),
墨水池(
onTap:(){
打印(“正在工作”);
},
子:容器(
身高:50,
宽度:100,
颜色:Palette.orelPay,
),
),
已展开(子项:TextFormField)(
//控制器:搜索控制器,
装饰:输入装饰(
内容填充:
来自LTRB(20.0,15.0,20.0,15.0)的边缘集,
hintText:“在OrelBuy上搜索”,
边框:大纲输入边框(
边界:
边框(颜色:调色板.背景,宽度:32.0),
边界半径:边界半径。圆形(50.0)),
fillColor:Palette.background,
是的,
enabledBorder:OutlineInputBorder(
边界:
边框(颜色:调色板.背景,宽度:32.0),
边界半径:边界半径。圆形(50.0)),
聚焦顺序:大纲输入边框(
边界:
边框(颜色:调色板.背景,宽度:32.0),
边界半径:边界半径。圆形(50.0)),
),)
],
),
)
),
);
}
);
}
@凌驾
布尔应该重建(SliverPersistentHeaderDelegate old)=>false;
@凌驾
double get maxExtent=>250.0;
@凌驾
double-get-minExtent=>80.0;
}
您可以使用CustomScrollView小部件的物理特性来控制滚动
CustomScrollView(
physics: PageScrollPhysics(), // added
slivers: <Widget>[
CustomScrollView(
物理:PageScrollPhysics(),//已添加
条子:[
Viren谢谢。你能检查一下这个问题吗?