gpt4 book ai didi

flutter - sleep (持续时间)与 Future.delayed(持续时间)

转载 作者:行者123 更新时间:2023-12-03 04:46:23 28 4
gpt4 key购买 nike

他们两个有什么区别(sleep vs Future.delayed)?在这两种情况下,幕后发生了什么?

我不理解以下示例中的不同结果。

Future.delayed: 做我期望它做的事情:

  • setState 重建小部件并将矩形着色为黑色
  • 然后等待 10 秒
  •     import 'package:flutter/material.dart';
    import 'dart:io';

    void main() {
    runApp(MyApp());
    }

    class MyApp extends StatefulWidget {
    @override
    _MyAppState createState() => _MyAppState();
    }

    class _MyAppState extends State<MyApp> {
    Color appColor = Colors.green;

    changeColors() async {
    setState(() {
    appColor = Color(0xff000000);
    });
    await Future.delayed(Duration(seconds: 10));
    print('after 10 seconds');
    }

    @override
    Widget build(BuildContext context) {
    return MaterialApp(
    home: Scaffold(
    body: SafeArea(
    child: Center(
    child: Column(
    children: [
    Container(height: 100, width: 100, color: appColor),
    FlatButton(
    onPressed: () => changeColors(),
    child: Text('click me'),
    ),
    ],
    ),
    ),
    ),
    ),
    );
    }
    }


    sleep :没有做我期望它做的事情:
  • 一旦我将 appColor 更改为黑色,setState 就不会重建小部件树。为什么不?
  • 等待 10 秒
  • 然后不知从何而来,小部件树正在重建,矩形的颜色变成黑色:为什么?
  •     import 'package:flutter/material.dart';
    import 'dart:io';

    void main() {
    runApp(MyApp());
    }

    class MyApp extends StatefulWidget {
    @override
    _MyAppState createState() => _MyAppState();
    }

    class _MyAppState extends State<MyApp> {
    Color appColor = Colors.green;

    changeColors() {
    setState(() {
    appColor = Color(0xff000000);
    });

    sleep(Duration(seconds:10));
    print('after 10 seconds');
    }

    @override
    Widget build(BuildContext context) {
    return MaterialApp(
    home: Scaffold(
    body: SafeArea(
    child: Center(
    child: Column(
    children: [
    Container(height: 100, width: 100, color: appColor),
    FlatButton(
    onPressed: () => changeColors(),
    child: Text('click me'),
    ),
    ],
    ),
    ),
    ),
    ),
    );
    }
    }

    最佳答案

    sleep 将 Dart 隔离中的执行暂停指定的时间。在那段时间里什么都不会发生。
    Future.delayed安排在 future 某个时间发生的操作。它是异步的,同时可以进行其他操作。

    关于flutter - sleep (持续时间)与 Future.delayed(持续时间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62204206/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com