Flutter Web 应用程序卡在`rootBundle.loadString`

问题描述 投票:0回答:1

当应用程序加载时,我正在尝试加载一些 json:

final contentJson = await rootBundle.loadString('assets/content.json');

但是应用程序加载卡住并且显示白屏。控制台中没有出现任何错误。

这是我的

pubspec.yaml

flutter:
  generate: true
  uses-material-design: true
  assets:
    - assets/icons/
    - assets/images/
    - assets/fonts/
    - assets/content.json

我猜测这与网络应用程序有关。因为这在其他平台上不会发生。

这里是围绕调用的完整代码:

home_data_provider.dart

@override
  Future<List<ArticleDto>> getArticleDtos() async {
    final contentJson = await rootBundle.loadString('assets/content.json');
    final content = json.decode(contentJson) as Iterable<Map<String, dynamic>>;

    return List<ArticleDto>.from(
      content.map((articleData) async {
        final articlePath = articleData['articlePath'] as String;
        final article = await rootBundle.loadString(articlePath);

        return ArticleDto(
          title: articleData['title'] as String,
          topic: articleData['topic'] as String,
          articleInMarkdown: article,
          imagePath: articleData['imagePath'] as String,
          createdAt: articleData['createdAt'] as String,
        );
      }),
    );
  } 

home_repository.dart

@override
  Future<List<ArticleEntity>> getArticles() async {
    final articleDtos = await _dataProvider.getArticleDtos();
    return _articlesConverter.convertMultiple(articleDtos).toList();
  }

home_page.dart

Scaffold(
      body: BlocProvider(
        create: createHomeCubit,
        child: SomeChild()),
    );

create_home_cubit.dart

HomeCubit createHomeCubit(BuildContext context) {
  final localeService = context.read<ILocaleService>();
  return HomeCubit(
    context.read<IThemeService>(),
    context.read<ILocaleService>(),
    HomeRepository(
      articlesConverter: ArticlesConverter(),
      dataProvider: HomeDataProvider(localeService.currentLocale.languageCode),
    ),
  );
}

getArticles
将在 cubit 构造函数中调用。

flutter dart assets
1个回答
0
投票

这是预期的答案:

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

Future<Map<String, dynamic>> loadJsonData() async {
// Load the JSON file using rootBundle
String jsonString = await rootBundle.loadString('assets/content.json');

// Parse the JSON string
Map<String, dynamic> jsonData = json.decode(jsonString);

return jsonData;
}
© www.soinside.com 2019 - 2024. All rights reserved.