我正在尝试读取名为“catalog.json”的本地 json 文件,我编写了所有必需代码,但它显示此错误“lateinitializationError:字段'catalogdata'尚未初始化。” 然后我尝试初始化“catalogdata”变量,但随后显示“catalogdata”变量为空。我不知道如何解决。请帮我。我的代码
import 'package:flutter/material.dart';
import 'dart:convert';
import 'package:flutter/services.dart';
class Homepage extends StatefulWidget {
const Homepage({Key? key}) : super(key: key);
@override
_HomepageState createState() => _HomepageState();
}
class _HomepageState extends State<Homepage> {
late List catalogdata;
Future<String> loadData() async {
var data = await rootBundle.loadString("assets/images/files/catalog.json");
setState(() {
catalogdata = json.decode(data);
});
return "success";
}
@override
void initState() {
// TODO: implement initState
this.loadData();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Homepage"),
),
body: Center(
child: Text(
catalogdata[0],
style: TextStyle(fontSize: 20),
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 31
这里\xe2\x80\x99ssample.json:
\n{\n "items": [\n {\n "id": "p1",\n "name": "Item 1",\n "description": "Description 1"\n },\n {\n "id": "p2",\n "name": "Item 2",\n "description": "Description 2"\n },\n {\n "id": "p3",\n "name": "Item 3",\n "description": "Description 3"\n }\n ]\n}\nRun Code Online (Sandbox Code Playgroud)\n用于从 JSON 文件获取数据的代码(请参阅下面的完整代码):
\nFuture<void> readJson() async {\n final String response = await rootBundle.loadString('assets/sample.json');\n final data = await json.decode(response);\n// ... \n}\nRun Code Online (Sandbox Code Playgroud)\n在 pubspec.yaml 文件的 asset 部分声明 json 文件:
\nflutter:\n assets:\n - assets/sample.json\nRun Code Online (Sandbox Code Playgroud)\n主程序.dart
\nimport 'package:flutter/material.dart';\nimport 'dart:convert';\n\nimport 'package:flutter/services.dart';\n\n void main() {\n runApp(const MyApp());\n }\n\n class MyApp extends StatelessWidget {\n const MyApp({Key? key}) : super(key: key);\n\n @override\n Widget build(BuildContext context) {\n return const MaterialApp(\n // Hide the debug banner\n debugShowCheckedModeBanner: false,\n title: 'Kindacode.com',\n home: HomePage(),\n);\n}\n}\n\nclass HomePage extends StatefulWidget {\n const HomePage({Key? key}) : super(key: key);\n\n @override\n_HomePageState createState() => _HomePageState();\n}\n\nclass _HomePageState extends State<HomePage> {\n List _items = [];\n\n// Fetch content from the json file\nFuture<void> readJson() async {\nfinal String response = await rootBundle.loadString('assets/sample.json');\nfinal data = await json.decode(response);\nsetState(() {\n _items = data["items"];\n});\n}\n\n @override\n Widget build(BuildContext context) {\n return Scaffold(\n appBar: AppBar(\n centerTitle: true,\n title: const Text(\n 'Kindacode.com',\n ),\n ),\n body: Padding(\n padding: const EdgeInsets.all(25),\n child: Column(\n children: [\n ElevatedButton(\n child: const Text('Load Data'),\n onPressed: readJson,\n ),\n\n // Display the data loaded from sample.json\n _items.isNotEmpty\n ? Expanded(\n child: ListView.builder(\n itemCount: _items.length,\n itemBuilder: (context, index) {\n return Card(\n margin: const EdgeInsets.all(10),\n child: ListTile(\n leading: Text(_items[index]["id"]),\n title: Text(_items[index]["name"]),\n subtitle: Text(_items[index]["description"]),\n ),\n );\n },\n ),\n )\n : Container()\n ],\n ),\n ),\n );\n }\n }\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
42817 次 |
| 最近记录: |