Future<String> 作为 flutter 中的文本

Future<String> as text in flutter

我对 flutter 没有多少经验。

我想将 language_tool 库用于 Dart 和 Flutter (https://pub.dev/packages/language_tool)

我在 dart 中创建了这个脚本,它打印到控制台,即列表中第一项的 .message。

void tool(String text) async {
  var tool = LanguageTool();
  var result = tool.check(text);

  List correction = await result;
  print(correction[0].message);
}

void main() {
  tool('Henlo i am Gabriele');
}

之后,我想:更正 [0].message,在我的 flutter 应用程序中显示为文本,但我不知道我该怎么做,因为 tool() 函数必须 return 一个未来。

我该怎么办?


class mainApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Chat(),
    );
  }
}

class Chat extends StatefulWidget {
  const Chat({Key? key}) : super(key: key);

  @override
  _ChatState createState() => _ChatState();
}

class _ChatState extends State<Chat> {
  String text = 'Henlo i am Gabriele';

  Future<String> tool(String text) async {
    var tool = LanguageTool();

    var result = tool.check(text);

    List correction = await result;

    //print(correction[0].message);
    return correction[0].message;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: Column(
          children: [
            Text(text),
            //Text(tool(text)),
          ],
        ),
      ),
    );
  }
}

希望有人能帮助我, 谢谢。

您收到错误是因为您没有使用 FutureBuilder。尝试使用 FutureBuilder。您可以通过将小部件包装在 FutureBuilder 中来解决它。

检查这个 post Flutter Future <String > cant be assigned to parameter type string

tool() 是一种 Future 方法。尝试使用 FutureBuilder.

FutureBuilder<String>(
  future: tool(text),
  builder: (context, snapshot) {
    if (snapshot.hasData &&
        snapshot.connectionState == ConnectionState.done) {
      return Text(snapshot.data!);
    }

    return CircularProgressIndicator();
  },
)

查看更多关于 FutureBuilder and

您需要使用 FutureBuilder class:

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: SafeArea(
      child: Column(
        children: [
          Text(text),
          FutureBuilder<String>(
            future: _calculation,
            builder: (BuildContext context, AsyncSnapshot<String> snapshot) =>
              Text(tool(snapshot.data)),
          ),
        ],
      ),
    ),
  );
}