如何将Text Asset的值分配给String并在Text()中显示?

时间:2019-03-24 14:54:43

标签: android dart flutter

我想使用功能修改文本资产(.txt文件)中的数据,并将其显示在Text()小部件中。 myFunction将数据类型String作为参数并返回数据类型String

我已经阅读了文档。 Loading Asset from Image,此操作无效。我也尝试过Suragch's Answer的解决方案。

在这种情况下,我应该使用FutureBuilder,但是我不明白如何使它在这里工作(我是新手)。我将使用另一个功能来修改文件中的数据,然后显示。

这是我尝试过的事情之一:

Widget build(BuildContext context) {
  Future<String> aloadAsset(BuildContext context) async {
    return await DefaultAssetBundle.of(context).loadString('assets/help.txt');
  }

  String helps = myFunction(await aloadAsset(context));
  return Scaffold(
    body: Text(helps)
  );
}

将值从await aloadAsset(context)分配给String时,出现以下错误:Unexpected text 'await'.A value of type 'Future<String>' can't be assigned to a variable of type 'String'.

2 个答案:

答案 0 :(得分:0)

await关键字只能在async函数中使用。您可以在这里执行以下操作: 将小部件设置为StatefulWidget,然后在状态类中:

String helps = "";

initState()方法中:

aloadAsset();

并将您的功能更改为:

aloadAsset() async {
    helps = myFunction(await rootBundle.loadString('assets/help.txt'));
    setState((){});
  }

别忘了添加导入

import 'package:flutter/services.dart' show rootBundle;

答案 1 :(得分:0)

这是从文件中读取text的方法,您必须修改Build函数以使其包含FutureBuilder。然后,您必须将aloadAsset函数移出构建版本:

@override
Widget build(BuildContext context) {
  return FutureBuilder(
      future: aloadAsset(),
      builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
        if(if(snapshot.hasData)){
            return Scaffold(
              body: Text(snapshot.data)
            );
        }
            return Scaffold(
              body: Text('No Available data') //This will be returned in case you didn't receive data yet or in the case of a file error.
            );
      }
}

Future<String> aloadAsset(BuildContext context) async {
     return await DefaultAssetBundle.of(context).loadString('assets/help.txt');

}