Flutter:如何从资产读取文本文件并将其显示到容器

Emr*_*kib 4 text load assets dart flutter

我想从资产中读取文本文件并将其显示到我的 flutter 应用程序中的容器小部件中。当我运行应用程序时,容器不显示任何文本,只显示一个空白的白页。我已经尝试过这种方式:

 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';


 class cs_one extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
 final appTitle = 'Read Text File';

 return MaterialApp(
  title: appTitle,
  home: Scaffold(
    appBar: AppBar(
      title: Text(appTitle),
    ),
    body: a()
    ),
   );
  }
} 

 class a extends StatelessWidget {
 String _data;

 Future<void> _loadData() async {
 final _loadedData = await rootBundle.loadString('lib/asset/textfile/cs_one.txt');
 _data = _loadedData;
}

@override
Widget build(BuildContext context) {
return Container(
  child: Text(_data),
   );
  }
}
Run Code Online (Sandbox Code Playgroud)

pubsepec.YAML 文件:

  # To add assets to your application, add an assets section, like this:
      assets:
        - image/background.jpg
        - image/icon.png
        - lib/asset/textfile/cs_one.txt
Run Code Online (Sandbox Code Playgroud)

我该怎么解决这个问题?

Wil*_*las 5

您需要在使用 StatefulWidget 或 FutureBuilder 显示数据之前加载数据。

这是使用 StatefulWidget 的示例:

class MyWidget extends StatefulWidget {

  const MyWidget({Key? key}): super(key: key);

  @override
  State<StatefulWidget> createState() => _MyWidgetState();
  
}

class _MyWidgetState extends State<MyWidget> {

  String? data;

  void _loadData() async {
    final _loadedData = await rootBundle.loadString('lib/asset/textfile/cs_one.txt');
    setState(() {
      data = _loadedData;
    });
  }

  @override
  void initState() {
    super.initState();
    _loadData();
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Text(data ?? 'empty'),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)