xiao_qingnian 2023-08-02 16:51 采纳率: 0%
浏览 3
已结题

flutter页面布局加载问题

页面布局代码如下,第一次打开页面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')),
              ],
            )
        )
    )
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-02 17:33
    关注

    【以下回答由 ChatGPT 生成】

    这种延迟的原因可能是Flutter的渲染机制导致的。当页面初次打开时,Flutter可能需要一小段时间来计算和布局组件。在这段时间内,组件可能会以紧挨着的方式显示,然后在布局计算完成后进行重新调整。

    要解决这个问题,你可以尝试以下方法:

    1. 使用LayoutBuilder组件:将Column组件用LayoutBuilder包装起来,并将ColumnmainAxisAlignment属性设置为MainAxisAlignment.spaceBetween。这样可以确保布局在绘制之前以指定的方式完成。

    dart Scaffold( body: WillPopScope( onWillPop: () async { return false; }, child: LayoutBuilder( builder: (BuildContext context, BoxConstraints constraints) { return Container( margin: EdgeInsets.fromLTRB(0, 124, 0, 64), child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( child: Text('111'), ), Container( child: Image.asset('images/xxx.png'), // 几百px的图片 ), Container( child: Text('222'), ), ], ), ); }, ), ), )

    1. 使用AnimatedContainer组件:将Column组件用AnimatedContainer包装起来,并在布局完成后,通过调用setState()方法来改变AnimatedContainer的参数,从而出发重新布局。

    ```dart class MyPage extends StatefulWidget { @override _MyPageState createState() => _MyPageState(); }

    class _MyPageState extends State { bool shouldExpand = false;

     @override
     void initState() {
       super.initState();
       Future.delayed(Duration(milliseconds: 100), () {
         setState(() {
           shouldExpand = true;
         });
       });
     }
    
     @override
     Widget build(BuildContext context) {
       return Scaffold(
         body: WillPopScope(
           onWillPop: () async {
             return false;
           },
           child: AnimatedContainer(
             duration: Duration(milliseconds: 300),
             margin: EdgeInsets.fromLTRB(0, 124, 0, 64),
             child: Column(
               mainAxisAlignment: shouldExpand ? MainAxisAlignment.spaceBetween : MainAxisAlignment.start,
               children: [
                 Container(
                   child: Text('111'),
                 ),
                 Container(
                   child: Image.asset('images/xxx.png'), // 几百px的图片
                 ),
                 Container(
                   child: Text('222'),
                 ),
               ],
             ),
           ),
         ),
       );
     }
    

    } ```

    这两种方法都可以尝试一下,看看是否能够解决你遇到的延迟问题。如果仍然存在延迟,可能是由于其他原因导致,此时可能需要进一步检查其他代码或组件是否存在性能问题。


    【相关推荐阅读】

    • 这篇博客: 【flutter】Row和Column组件中的 示例八,Row设置主轴对齐spaceBetween—MainAxisAlignment.spaceBetween 部分也许能够解决你的问题。

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月3日
  • 创建了问题 8月2日

悬赏问题

  • ¥15 ogg dd trandata 报错
  • ¥15 高缺失率数据如何选择填充方式
  • ¥50 potsgresql15备份问题
  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错