首页 > 解决方案 > FutureBuilder 没有建设

问题描述

您知道为什么在启动流并返回 Future 时不调用以下 FutureBuilder 吗?

注意:我知道有很多方法可以用流等解决这个问题。这是为了学习,所以如果你知道为什么,我想知道 - 谢谢。

// import 'package:flutter/foundation.dart';
import 'dart:async';
import 'package:flutter/material.dart';

class MyFutureClass {
  Future<String> myF;

  setMyF() {
    this.myF = Future.value("Hello F");
  }

  Future<String> getMyF() {
    return myF;
  }
}

class MyFutureWidget extends StatelessWidget {
  MyStreamWidget();

  final _myStreamClass = MyStreamClass();

  // var stream = countStream(10);
  // var sum = await sumStream(stream);
  // print(sum); // 55

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: new Row(
        children: [
          RaisedButton(
            child: Text("Add to future"),
            onPressed: () {
              _myStreamClass.setMyF();
            },
          ),
          FutureBuilder(
            // future: _myStreamClass.getMyF(),
            future: _myStreamClass.myF),
            builder: (context, snapshot) {
              if (snapshot.hasData) {
                return Text(snapshot.data);
              } else {
                return Text("No data");
              }
            },
          ),
        ]
            .map((c) => Container(
                  padding: EdgeInsets.all(8.0),
                  child: c,
                ))
            .toList(),
      ),
    );
  }
}

使用StateFullWidget:刚刚尝试使用 StateFullWidget,结果相同 - 未调用 FutureBuilder?

// import 'package:flutter/foundation.dart';
import 'dart:async';
import 'package:flutter/material.dart';

class MyStreamClass {
  Future<String> myF;

  setMyF() {
    this.myF = Future.value("Hello F");
    this.myF.then((v) {
      print(v);
    });
  }

  Future<String> getMyF() {
    return myF;
  }
}

class MyStreamWidget extends StatefulWidget {

   @override
  _MyStreamWidget createState() => _MyStreamWidget();

}

class _MyStreamWidget extends State<MyStreamWidget> {
  final _myStreamClass = MyStreamClass();

  // var stream = countStream(10);
  // var sum = await sumStream(stream);
  // print(sum); // 55

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: new Row(
        children: [
          RaisedButton(
            child: Text("Add to future"),
            onPressed: () {
              _myStreamClass.setMyF();
            },
          ),
          FutureBuilder(
            future: _myStreamClass.myF,
            builder: (context, snapshot) {
              if (snapshot.hasData) {
                return Text(snapshot.data);
              } else {
                return Text("No data");
              }
            },
          ),
        ]
            .map((c) => Container(
                  padding: EdgeInsets.all(8.0),
                  child: c,
                ))
            .toList(),
      ),
    );
  }
}

标签: dart

解决方案


推荐阅读