我有一個 json 物件,其中data陣列包含不同的映射,包括具有型別的映射,list并且data包含另一個映射陣列。
{
"data": [
{
"type": "title",
"data": "data1"
},
{
"type": "text",
"data": "data2"
},
{
"type": "list",
"data": [
{
"item1": "value1"
},
{
"item2": "value2"
},
{
"item3": "value3"
}
]
}
],
}
我也有視圖我想在哪里展示不同的地方,items比如title,text和list. 我可以使用小部件顯示textand 。titleText()
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:salescore_mobile_app/app_controllers/block_handler/list_block_handler.dart';
import '../app_controllers/getters/settings_getters/get_client_settings.dart';
import 'app_menu.dart';
class AppView extends StatefulWidget {
final List items;
const AppView({Key? key, required this.items}) : super(key: key);
@override
_AppBaseState createState() => _AppBaseState();
}
class _AppBaseState extends State<AppView> {
@override
initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: CustomScrollView(
slivers: <Widget>[
const SliverToBoxAdapter(),
SliverList(
delegate:
SliverChildBuilderDelegate((BuildContext context, int index) {
return Column(
children: [
if (widget.items[index]['type'] == "list")
Container(
alignment: Alignment.topLeft,
child: Padding(
padding: const EdgeInsets.all(25),
child: SingleChildScrollView(
child: Table(
columnWidths: const {
0: FixedColumnWidth(50),
1: FlexColumnWidth(),
},
children:
(widget.items[index]['data']).map((object) {
return TableRow(children: [
Container(
color: (widget.items[index]['data'])
.indexOf(object) %
2 ==
0
? const Color(0xFF161616)
: Colors.grey[800],
padding: const EdgeInsets.all(15),
child: Text(
object["title"].toString(),
style: TextStyle(color: Colors.white),
)),
]);
}).toList(),
border: TableBorder.all(
width: 1, color: Color(0xFF161616)),
),
),
))
else
Container(),
if (widget.items[index]['type'] == "title")
Container(
alignment: Alignment.topLeft,
child: Text(
widget.items[index]['data'],
),
)
else
Container(),
if (widget.items[index]['type'] == "text")
Container(
alignment: Alignment.topLeft,
child: Text(
widget.items[index]['data'],
),
)
else
Container(),
],
);
}, childCount: widget.items.length),
),
],
),
drawer: const AppMenu(),
),
);
}
}
如您所見,我想顯示item1內部TableRow,但是我想在內部顯示的帶有鍵item1內部list陣列的地圖TableRow給出了錯誤:type 'List<dynamic>' is not a subtype of type 'List<TableRow>'。
這是因為widget.items[index]['data']which is the array maps of keylist在除錯列印時顯示不帶引號的陣列鍵和值,如下所示:
[
{
item1: value1
},
{
item2: value2
},
{
item3: value3
}
]
我的問題是如何解決代碼中的型別宣告,以便將item1值顯示為TableRow
uj5u.com熱心網友回復:
您將需要投射它。您可以通過.cast<TableRow>()呼叫List<dynamic>
所以你在哪里
}).toList(),
您可以將其更改為
}).toList().cast<TableRow>(),
甚至更好,是在地圖功能上注明型別。為此,您可以更改
(widget.items[index]['data']).map((object) {
到
(widget.items[index]['data']).map<TableRow>((object) {
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/450894.html
