如何在主方法 Flutter 中加载 json?
Posted
技术标签:
【中文标题】如何在主方法 Flutter 中加载 json?【英文标题】:How to load json in main method Flutter? 【发布时间】:2021-09-28 08:30:18 【问题描述】:我正在尝试将 json 文件加载到我的 main() 应用程序方法中。 你能告诉我这是否可能吗?我试过 File 和 rootBundle 但似乎 Assets 的文件夹还没有准备好。
这是我的代码:
资产
assets:
- assets/settings/settings.json
主要方法
void main() async
final file = await rootBundle.loadString('assets/settings/settings.json');
final data = jsonDecode(file);
Settings settings = Get.put(Settings.fromJson(data), permanent: true);
runApp(MyApp());
【问题讨论】:
您能提供更多信息吗?例如,您的 pubspec.yaml 文件。你有任何错误吗?当您尝试打印变量“数据”时,输出是什么? 我更喜欢在 MyApp() initState 中进行操作 * 我正在使用 getx 包创建实例 pub.dev/packages/get * 我遇到的错误是“对空值使用空检查运算符”,这在执行 rootBundle 时发生。我要做的是在整个应用程序启动之前加载我的 settings.json,例如 NetCore load appsettings.json 【参考方案1】:使用 FutureBuilder 找到解决方案
class MyApp extends StatefulWidget
@override
_MyAppState createState() => _MyAppState();
class _MyAppState extends State<MyApp>
_load() async
final file = await rootBundle.loadString('assets/j.json');
final data = await jsonDecode(file);
print(data.toString());
@override
Widget build(BuildContext context)
return FutureBuilder(
future: _load(),
builder: (_, AsyncSnapshot<dynamic> snapshot)
return !snapshot.hasData
? Container(
color: Colors.white,
child: Center(
child: Container(
child: CircularProgressIndicator(),
width: 20,
height: 20,
)),
)
: MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
appBarTheme: AppBarTheme(
titleTextStyle: Theme.of(context).textTheme.headline1,
),
),
home: Scaffold(
body: Text("Body"),
// MaxWidthButton(),
),
);
);
【讨论】:
抱歉,我尝试了 initState 但它不起作用,我尝试在 FutureBuilder 中调用我的方法,而不是加载我的 initState 方法,并且效果很好。【参考方案2】:我好像不是,而是尝试MyApp
并使其成为statefullWidget
class MyApp extends StatefulWidget
@override
_MyAppState createState() => _MyAppState();
class _MyAppState extends State<MyApp>
@override
void initState()
super.initState();
_load();
_load() async
final file = await rootBundle.loadString('assets/j.json');
final data = await jsonDecode(file);
print(data.toString());
@override
Widget build(BuildContext context)
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
appBarTheme: AppBarTheme(
titleTextStyle: Theme.of(context).textTheme.headline1,
),
),
home: Scaffold(
body: Text("Body"),
// MaxWidthButton(),
),
);
【讨论】:
它不起作用,抛出同样的错误“Null check operator used on a null value” 检查更新的答案,如果发现任何错误,请分享?以上是关于如何在主方法 Flutter 中加载 json?的主要内容,如果未能解决你的问题,请参考以下文章
Facebook 如何发布 json 并在 iframe 中加载响应?