我有一个 CarouselView,我在其中调用具有单独且完全不同的视图的对象。
我的 ContentPage 拥有的唯一元素是 CarouselView 本身,以及上面带有渐变的底部栏(注意下图中的渐变)。
我已经这样做了,当页面的滚动空间变为 0 时(当我滚动到页面末尾时),渐变消失。
问题是,当我在 CarouselView 中的项目之间滑动时,CarouselView 始终保持调用的第一个 View 的高度。
这意味着,在比第一个高度更多的视图中,当向上滚动时(在最底部之后,因此不显示渐变)渐变只会在达到第一页的高度值时再次显示。
在高度小于第一个的视图中,页面将允许我向下滚动,直到达到第一页的高度值,即使页面上没有足够的元素甚至需要滚动。
本质上,我要问的是,是否有一种方法可以在每次滚动完成到 CarouselView 中的另一个视图时以某种方式“刷新”页面的高度,以更小的方式解决我的高度问题视图,以及我在较大视图中的梯度问题。
主要内容页面代码隐藏(渐变)
public double ScrollingSpace
{
get
{
return MainScrollView.ContentSize.Height - MainScrollView.Height;
}
set { }
}
// Removes gradient when scroll is complete
private void OnScrolled(object sender, ScrolledEventArgs e)
{
if (ScrollingSpace <= e.ScrollY) // Touched bottom
EndPageGradient.SetValue(IsVisibleProperty, false); // the view is GONE, not invisible
else
EndPageGradient.SetValue(IsVisibleProperty, true);
}
// Removes gradient if page is not large enough …Run Code Online (Sandbox Code Playgroud) 我正在构建一个登录页面,并且已经创建了打算用作完全动态 TextField 小部件的内容。
我现在需要创建该小部件的 2 个实例(电子邮件和密码输入)并发送hintText、errorText 的参数,然后发送我的LoginBloc 和验证方法,这些参数对于每个输入当然是不同的。
我的问题是 Dart 不允许我使用小部件接收的块作为类型,因此代码不起作用。
我可以做什么来解决这个问题?或者我完全做错了,有更好的方法吗?
登录页面:
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Padding(
padding: const EdgeInsets.only(
left: 16,
right: 16,
),
child: SingleChildScrollView(
child: Column(
children: <Widget>[
Container(
margin: EdgeInsets.only(top: 50),
child: Text(
AppLocalizations.of(context).initiateSession,
style: Theme.of(context).textTheme.headline6,
),
),
BlocProvider(
create: (context) {
return LoginBloc();
},
child: BlocListener<LoginBloc, LoginState>(
listener: (context, state) {
if (state.status.isSubmissionFailure) {
ScaffoldMessenger.of(context)
..hideCurrentSnackBar()
..showSnackBar(
const SnackBar(
content: Text('Authentication Failure')),
);
}
},
child: Align(
alignment: …Run Code Online (Sandbox Code Playgroud)