在颤动中使用多个计算

是否可以同时使用多个计算?

我想在列表上调用一个沉重的函数,该函数我想并行运行,但是它使应用程序崩溃,而没有任何错误消息。 我应该一次只进行一次计算调用吗?

这是我的测试代码,经常(但并非总是)崩溃。

import 'package:flutter/foundation.dart';
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<List<int>> f;

  @override
  void initState() {
    super.initState();
    f = getFutures();
  }

  Future<List<int>> getFutures() async {
    List<int> output = [];
    List<Future<int>> futures = [];
    for (int i = 0; i < 100; ++i) {
      print("call getFuture");
      futures.add(getFuture());
    }

    for (int i = 0; i < futures.length; ++i) {
      var f = await futures[i];
      output.add(f);
    }

    return output;
  }

  Future<int> getFuture() async {
    print("call compute");
    var i = await compute(count,1000000000);
    return i;
  }

  static int count(int max) {
    print("start count");
    int j;
    for (int i = 0; i < max; ++i) {
      j = i;
    }
    return j;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("test")),body: FutureBuilder<List<int>>(
          future: f,builder: (context,snapshot) {
            switch (snapshot.connectionState) {
              case ConnectionState.done:
                print(snapshot);
                return ListView.builder(
                    itemCount: 100,itemBuilder: (context,index) {
                      return Text("snapshot: ${snapshot.data[index]}");
                    });
                break;
              default:
                return Center(child: CircularProgressIndicator());
            }
          }),);
  }
}
climb166 回答:在颤动中使用多个计算

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3117274.html

大家都在问