【发布时间】:2022-01-21 06:39:36
【问题描述】:
我希望通过使用 JSON 来缩短我的代码。请帮忙,如何将本地 JSON 生成到 Tabbar 中?以前我读过这个网站的帖子,但它调用 JSON API,而不是 LOCAL JSON。我还是不明白怎么称呼它
我想要这样的应用
我的 JSON 文件 (assets/product.json)
[
{
"id": 1,
"title": "NoteBook",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.",
"image": "assets/img/notebook.jpg",
"price": "Rp. 13.000.000"
},
{
"id": 2,
"title": "Printer",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.",
"image": "assets/img/printer.jpg",
"price": "Rp. 700.000"
},
{
"id": 3,
"title": "Mouse",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.",
"image": "assets/img/standard-mouse.jpg",
"price": "Rp. 1.100.000"
},
{
"id": 4,
"title": "Keyboard",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.",
"image": "assets/img/rgb-keyboard.jpg",
"price": "Rp. 2.100.000"
},
{
"id": 5,
"title": "Mouse Gaming",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.",
"image": "assets/img/gaming-mouse.jpg",
"price": "Rp. 500.000"
},
{
"id": 6,
"title": "Proccessor",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.",
"image": "assets/img/procie.jpg",
"price": "Rp. 6.000.000"
},
{
"id": 7,
"title": "Solid State Drive",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.",
"image": "assets/img/ssd.jpg",
"price": "Rp. 2.100.000"
}
]
我的产品模型 (ProductModel.dart)
import 'dart:convert';
List<Product> ProductFromJson(String str) =>
List<Product>.from(json.decode(str).map((x) => Product.fromJson(x)));
class Product {
Product({
this.id,
this.title,
this.image,
this.description,
this.price,
});
final int id;
final String title;
final String image;
final String description;
final String price;
factory Product.fromJson(Map<String, dynamic> json) => Product(
id: json["id"],
title: json["title"],
image: json["image"],
description: json["description"],
price: json["price"],
);
String getTitle() {
return title;
}
String getImage() {
return image;
}
String getDescription() {
return description;
}
String getPrice() {
return price;
}
}
我的主页(MainPage.dart)
import 'package:flutter/material.dart';
class MainPage extends StatefulWidget {
const MainPage({Key key}) : super(key: key);
@override
State<MainPage> createState() => _MainPageState();
}
class _MainPageState extends State<MainPage>
with SingleTickerProviderStateMixin {
TabController myTabController;
List<Widget> myTabs = [];
List<Widget> myTabsContent = [];
@override
void initState() {
super.initState();
myTabController = TabController(vsync: this, length: myTabs.length);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
titleSpacing: 10,
title: Text("My Store"),
bottom: TabBar(
labelPadding: EdgeInsets.fromLTRB(20, 0, 20, 10),
isScrollable: true,
controller: myTabController,
tabs: myTabs.toList(),
),
),
body: TabBarView(
controller: myTabController,
children: myTabsContent.toList(),
),
);
}
}
【问题讨论】: