顺便说一句,他们两个有什么区别(睡眠与未来延迟(?在这两种情况下,幕后发生了什么?
我不明白以下示例中的不同结果。
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'),
),
],
),
),
),
),
);
}
}
睡眠:不做我期望它做的事情:
- 一旦我将应用程序颜色更改为黑色,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
计划在将来的某个时间点执行操作。 它是异步的,在此期间可能会发生其他操作。