页面布局代码如下,第一次打开页面Column里三个组件是紧挨着的,零点几秒后才MainAxisAlignment.spaceBetween分开,时间虽然不是很久但是肉眼还是可见的有点延迟,请问是因为什么原因?
Scaffold( body: WillPopScope( onWillPop: () async { return false; }, child: Container( margin: EdgeInsets.fromLTRB(0, 124, 0, 64), child:Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( child:Text('111')), Container(//几百px的图片 child: Image.asset('images/xxx.png'), ), Container( child:Text('222')), ], ) ) )
在 Flutter 中,页面布局的渲染是异步的,因此你在第一次打开页面时,可能会出现布局初始状态是紧挨着的,然后经过零点几秒后才按照 MainAxisAlignment.spaceBetween 分开的情况。这是因为 Flutter 在初始化时会进行布局计算和渲染,但这些过程并不是立即完成的,可能会需要一些时间。所以,你看到的延迟是因为布局的计算和渲染过程。
为了解决这个问题,你可以尝试使用 WidgetsBinding 组件的 addPostFrameCallback 方法,该方法在 widget 首次渲染完成后会执行传入的回调函数。这样你可以在回调函数中触发重新绘制页面,确保布局在页面加载完成后立即按照 MainAxisAlignment.spaceBetween 进行分开。
示例代码如下:
dart
Copy code
import 'package:flutter/material.dart';
class MyPage extends StatefulWidget {
@override
_MyPageState createState() => _MyPageState();
}
class _MyPageState extends State<MyPage> {
bool _isLayoutReady = false;
@override
Widget build(BuildContext context) {
return Scaffold( body: WillPopScope( onWillPop: () async { return false; }, child: Container( margin: EdgeInsets.fromLTRB(0, 124, 0, 64), child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( child: Text('111'), ), Container( // 几百px的图片 child: Image.asset('images/xxx.png'), ), Container( child: Text('222'), ), ], ), ), ),);
}
@override
void initState() {
super.initState();WidgetsBinding.instance.addPostFrameCallback((_) { setState(() { _isLayoutReady = true; });});
}
}
在这个示例中,我们使用了一个布尔变量 _isLayoutReady 来标记页面是否已经渲染完成。在 initState 方法中,我们使用 WidgetsBinding 组件的 addPostFrameCallback 方法来添加一个回调函数,该回调函数会在 widget 首次渲染完成后执行。在回调函数中,我们调用了 setState 方法来触发重新绘制页面,确保布局按照 MainAxisAlignment.spaceBetween 分开。
这样做的话,即使页面初始化时出现布局紧挨着的情况,页面加载完成后会立即进行重新布局,避免了延迟问题。
页面由组件构成,页面的高度和宽度由组件的高度和宽度确定,当页面的高度大于屏幕的高度,或者页面的宽度大于屏幕的宽度,页面就会出现滚动条。 页面指的是w文件 屏幕指的是门户中用于显示功能界面的区域 目录 1、流式布局 2、充满布局 2.1、左右充满 2.2、上下充满 2.3、多标签页充满 3、响应式布局 4、手机界面布局 4.1、显示多页 4.2、显示多行信息(一行显示一条记录) 4.3、显示多行信息
页面由组件构成,页面的高度和宽度由组件的高度和宽度确定,当页面的高度大于屏幕的高度,或者页面的宽度大于屏幕的宽度,页面就会出现滚动条。 页面指的是w文件 屏幕指的是门户中用于显示功能界面的区域 目录 1、流式布局 2、充满布局 2.1、左右充满 2.2、上下充满 2.3、多标签页充满 3、响应式布局 4、手机界面布局 4.1、显示多页 4.2、显示多行信息(一行显示一条记录) 4.3、显示多行信息
本文向大家介绍asp.net基础学习之前端页面布局,包括了asp.net基础学习之前端页面布局的使用技巧和注意事项,需要的朋友参考一下 前端就是给人看的界面,后台人员不仅要知道后台代码的编写,更要知道前端的布局。有时候要比前端人员知道的还要多,因为有可能前端人员是个21天精通ps的大师级人物。这时候你可以自己写前端。 1.CSS •CSS(Cascading Style Sheet),中文译为层
flutter 状态栏问题 当我设置0的时候 floatingActionButton 显示正常 当我设置一点高度为什么会这样? 这是什么原因导致的? 希望知道原因 我想 floatingActionButton 可以在Appbar下边
前端面试(前言) 面试基础 页面布局 CSS盒模型:是CSS的基石。 DOM事件 HTTP协议 面向对象 原型链:能说出原型链的始末 面试进阶 通信:普通的通信、跨域通信 安全:CSRF、XSS。 算法 回答问题时要注意的 (1)题干的要求真的是字面要求的这么简单吗? (2)答案怎么写,技巧在哪里 (3)如果想证明我的实力,应该有几种答案? 本文来讲一下页面布局。 题目:页面布局 问题:假设高度默
大佬们,用x6如何实现这种布局. 目前使用的是 dagre layout 左右布局。好像无法满足组内的上下布局。