Flutter 可滚动小部件内的颤振页面视图
在我的应用程序中,我有一个页面视图,其中包含一些页面 正如你们所见,我错过了更多的屏幕尺寸Flutter 可滚动小部件内的颤振页面视图,flutter,Flutter,在我的应用程序中,我有一个页面视图,其中包含一些页面 正如你们所见,我错过了更多的屏幕尺寸 导入“包装:颤振/材料.省道”; main(){ runApp(材料应用程序)( 主题:主题数据( 原色样本:颜色。靛蓝, ), 主页:App(), )); } 类应用程序扩展StatefulWidget{ @凌驾 State createState()=>_AppState(); } 类_AppState扩展了状态{ @凌驾 小部件构建(构建上下文){ 返回脚手架( 正文:自定义滚动视图( 条子:[
导入“包装:颤振/材料.省道”;
main(){
runApp(材料应用程序)(
主题:主题数据(
原色样本:颜色。靛蓝,
),
主页:App(),
));
}
类应用程序扩展StatefulWidget{
@凌驾
State createState()=>_AppState();
}
类_AppState扩展了状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:自定义滚动视图(
条子:[
滑动双轴适配器(
子:列(
儿童:[
容器(
高度:MediaQuery.of(context).size.height,
子:列(
儿童:[
填充物(
填充:仅限边缘设置(顶部:50.0),
子:文本(
“测试文本”,
textAlign:textAlign.center,
样式:TextStyle(颜色:Colors.black),
),
),
扩大(
弹性:1,
子:页面视图(
相反:是的,
onPageChanged:(i){},
儿童:[
约束盒(
约束:const-BoxConstraints.expand(),
子:容器(
边距:LTRB(8.0,8.0,8.0,12.0)的边距集,
子:容器(
颜色:颜色。靛蓝[400],
子:列(
儿童:[
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
填充(填充:边集。对称(垂直:30.0),子级:文本('33333')),
],
),
),
),
),
约束盒(
约束:const-BoxConstraints.expand(),
子:容器(
边距:LTRB(8.0,8.0,8.0,12.0)的边距集,
子:容器(
颜色:颜色。靛蓝[400],
子:列(
儿童:[
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
Padding(Padding:EdgeInsets.symmetric(vertical:30.0),child:Text('11111')),
import 'package:flutter/material.dart';
main() {
runApp(MaterialApp(
theme: ThemeData(
primarySwatch: Colors.indigo,
),
home: App(),
));
}
class App extends StatefulWidget {
@override
State<App> createState() => _AppState();
}
class _AppState extends State<App> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: CustomScrollView(
slivers: <Widget>[
SliverToBoxAdapter(
child: Column(
children: <Widget>[
Container(
height: MediaQuery.of(context).size.height,
child: Column(
children: <Widget>[
Padding(
padding: EdgeInsets.only(top: 50.0),
child: Text(
'test text',
textAlign: TextAlign.center,
style: TextStyle(color: Colors.black),
),
),
Expanded(
flex: 1,
child: PageView(
reverse: true,
onPageChanged: (i) {},
children: <Widget>[
ConstrainedBox(
constraints: const BoxConstraints.expand(),
child: Container(
margin: EdgeInsets.fromLTRB(8.0, 8.0, 8.0, 12.0),
child: Container(
color: Colors.indigo[400],
child: Column(
children: <Widget>[
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('33333333333333')),
],
),
),
),
),
ConstrainedBox(
constraints: const BoxConstraints.expand(),
child: Container(
margin: EdgeInsets.fromLTRB(8.0, 8.0, 8.0, 12.0),
child: Container(
color: Colors.indigo[400],
child: Column(
children: <Widget>[
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('33333333333333')),
],
),
),
),
),
ConstrainedBox(
constraints: const BoxConstraints.expand(),
child: Container(
margin: EdgeInsets.fromLTRB(8.0, 8.0, 8.0, 12.0),
child: Container(
color: Colors.indigo[400],
child: Column(
children: <Widget>[
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('11111111111111')),
Padding(padding: EdgeInsets.symmetric(vertical: 30.0), child: Text('33333333333333')),
],
),
),
),
),
],
),
),
],
),
),
],
),
),
],
),
);
}
}
class FragmentProfile extends StatefulWidget {
.......
@override
State<FragmentProfile> createState() => _FragmentPage();
}
class _FragmentPage extends State<FragmentProfile> {
....
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return ....
}
}
class ProfilePage extends StatefulWidget {
@override
State<ProfilePage> createState() => _ProfilePageState();
}
class _ProfilePageState extends State<ProfilePage> {
.....
ScrollController _scrollController;
....
@override
void initState() {
super.initState();
.....
_scrollController = ScrollController();
KeyboardVisibilityNotification().addNewListener(
onChange: (bool visible) {
if(visible){
final offset = _scrollController.offset;
print("current offset = ${offset}");
_scrollController.animateTo(
offset+50.0,
duration: Duration(milliseconds: 100),
curve: Curves.easeIn);
}else{
final offset = _scrollController.offset;
print("current offset = ${offset}");
_scrollController.animateTo(
offset-50.0,
duration: Duration(milliseconds: 100),
curve: Curves.easeIn);
}
},
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.transparent,
body: Directionality(
textDirection: TextDirection.rtl,
child: Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height - 130,
child: NestedScrollView(
controller: _scrollController,
headerSliverBuilder:(BuildContext context, bool innerBoxIsScrolled){
return <Widget>[
SliverAppBar(
title: Component1(),
),
centerTitle: true,
bottom: _buildMenuBar(context),
//pinned: true,
floating: true,
forceElevated: innerBoxIsScrolled,
)
];
} ,
body: PageView(
controller: _pageController,
reverse: true,
onPageChanged: (i) {},
children: <Widget>[
ConstrainedBox(
constraints: const BoxConstraints.expand(),
child: Container(
margin: EdgeInsets.fromLTRB(8.0, 8.0, 8.0, 12.0),
child: BmiCalculator(),
),
),
ConstrainedBox(
constraints: const BoxConstraints.expand(),
child: ....
),
ConstrainedBox(
constraints: const BoxConstraints.expand(),
child: Directionality(
textDirection: TextDirection.rtl,
child: Container(
margin: EdgeInsets.fromLTRB(8.0, 8.0, 8.0, 12.0),
child: UserProfileForm(),
),
),
),
],
),
)
),
));
}
Widget _buildMenuBar(BuildContext context) {
....
}
}