flutter - 如何在颤振中从 API 获取字符串值?
问题描述
我正在尝试从 API 获取字符串值到颤振的列表中。
每次我尝试获取列表时都会出现异常“未处理的异常:类型'String'不是'Map'类型的子类型”
我拥有的数据格式如下:
{
"status": 1,
"data": [
"Chapter 1",
"Chapter 2",
]
}
解决方案
从上面提到的 json 中,我为 ListView 创建了一个示例 json:
{
"status": 1,
"data": [
"Chapter 1",
"Chapter 2"
]
}
从 json 创建模型类:
// To parse this JSON data, do
//
// final data = dataFromJson(jsonString);
import 'dart:convert';
Data dataFromJson(String str) => Data.fromJson(json.decode(str));
String dataToJson(Data data) => json.encode(data.toJson());
class Data {
int status;
List<String> data;
Data({
this.status,
this.data,
});
factory Data.fromJson(Map<String, dynamic> json) => Data(
status: json["status"],
data: List<String>.from(json["data"].map((x) => x)),
);
Map<String, dynamic> toJson() => {
"status": status,
"data": List<dynamic>.from(data.map((x) => x)),
};
}
解析数据,然后在 ui 上渲染:
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'dummy.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
MyApp({Key key}) : super(key: key);
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
List<String> dataList = List();
bool _isLoading = false;
@override
void initState() {
super.initState();
loadYourData();
}
Future<String> loadFromAssets() async {
return await rootBundle.loadString('json/parse.json');
}
loadYourData() async {
setState(() {
_isLoading = true;
});
String jsonString = await loadFromAssets();
final data = dataFromJson(jsonString);
// here you get the complete object
dataList = data.data;
setState(() {
_isLoading = false;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Container(
child: _isLoading
? CircularProgressIndicator()
: ListView.builder(
itemCount: dataList.length,
itemBuilder: (BuildContext context, int index) {
return Card(
child: Column(
children: <Widget>[
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(dataList[index]),
),
],
),
);
},
),
),
),
);
}
}
以下是 parse.json 文件:
下面是您需要定义 json 文件夹的 pubspec 文件:
推荐阅读
- python - 如何根据网络字符串列表设置多种颜色?
- python - 如何更改 pipenv/virtualenv 位置以使用便携式 VS 代码和拇指驱动器上的项目?
- python - discord.py 如何每天在特定时间发送消息
- vba - 如何使用VBA一次更改多个图形中XY轴和格式的相同标题?
- arrays - 替换嵌套在数组中的 Hash 的键值
- node.js - NodeJs - 一起编写异步和非异步函数
- c++11 - std::stirng 的对象生命周期返回 const char* 作为返回值
- python-3.x - 从 Azure Databricks 读取 Excel 文件
- python - 如何使用熊猫获得滚动期间行数的移动标准开发
- excel - 个人宏工作簿与加载项