颤振异步调用不会在initState()中异步运行

时间:2019-11-10 15:34:56

标签: flutter future

我在initState()中调用异步函数, 但是系统实际上正在等待异步功能的结果。 谁能告诉我为什么?

这是我的代码:

...
{
  loader: "css-loader?url=false"
},
...

这是输出:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: MyHomePage());
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Future<int> _f;

  @override
  void initState() {
    super.initState();
    Stopwatch stopwatch = new Stopwatch()..start();
    print('executed in ${stopwatch.elapsed}');
    _f = getFuture();
    print('executed in ${stopwatch.elapsed}');
  }

  Future<int> getFuture() async {
    int i = 0;
    while(i < 1000000000) {
      i++;
    }
    return i;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("test")),
      body: FutureBuilder<int>(
        future: _f,
        builder: (context, snapshot) {
          switch (snapshot.connectionState) {
            case ConnectionState.done:
              return Center(child: Text("snapshot: ${snapshot.data}"));
              break;
            default:
              return Center(child: CircularProgressIndicator());
          }
        }

      ),
    );
  }
}

1 个答案:

答案 0 :(得分:2)

制作了Future函数以异步返回Future对象。这意味着执行一次代码语句所花的时间要比正常语句(例如声明变量)所需的通常时间长得多,例如从api获取json对象。

但是,您正在执行一条普通语句,该语句需要运行毫秒数,1000000000次。这将导致更长的执行时间,该时间以每次执行的毫秒数为基础。

即使它是Future函数,它也不返回Future对象或变量,因此它不是异步的。