flutter sql uygulamama ek veri tabanındaki ürünleri hızlı bir şekilde kontrol edebilmek için aplikasyon geliştirmeye kara verdim ve json dosyası oluşturup bunu pupspec.yml de http pub get yaptıktan sonra bilgisayarımdaki belgelere kayıtlı olan db.json formatındaki veri tabanı bilgilerini uygulamada buton olarak olarak görmek istiyorum ve FlatButton artık güncel kullanımda olmadığı için TextButton kullandım ve hem veri tabanından bilgi çekemeyip hem de butonları göremiyorum amacım her butonu tek sıra halinde ekrana sığmasa bile yana kaydırılabilir bir kullanıma sahip olup, butonlara her tıklanışta bilgileri güncellemek veya silmek .
main.dart kısmı
import 'package:flutter/material.dart';
import 'package:flutter_proje/screens/main_Screen.dart';
import 'package:http/http.dart' as http;
void main() => runApp(HttpApp());
class HttpApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MainScreen(),
);
}
}
----------------------------------------------------
category.dart kısmı
class Category {
late int id;
late String categoryName;
late String seoUrl;
Category(this.id, this.categoryName, this.seoUrl);
Category.fromJson(Map json) {
id = json["id"];
categoryName = json["categoryName"];
seoUrl = json["seoUrl"];
}
Map tojson() {
return {"id": id, "categoryName": categoryName, "seoUrl": seoUrl};
}
}
--------------------------------------------------
product.dart
class Product {
late int id;
late int categoryId;
late String productName;
late String quantityPerUnite;
late double unitePrice;
late int unitInStock;
Product(this.id, this.categoryId, this.productName, this.quantityPerUnite,
this.unitePrice, this.unitInStock);
Product.fromJson(Map json) {
id = json["id"];
categoryId = json["categoryId"];
productName = json["productName"];
quantityPerUnite = json["quantityPerUnite"];
unitePrice = double.tryParse(json["unitePrice"].toString())!;
unitInStock = json["unitInStock"];
}
Map tojson() {
return {
"id": id,
"categoryId": categoryId,
"ProductName": productName,
"quantityPerUnite": quantityPerUnite,
"unitePrice": unitePrice,
"unitestock": unitInStock
};
}
}
--------------------------------------------------
main.Screen.dart
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_proje/data/api/category_api.dart';
import 'package:flutter_proje/data/api/product_api.dart';
import 'package:flutter_proje/widgets/product_list_widget.dart';
import '../models/category.dart';
import '../models/product.dart';
class MainScreen extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return MainScreenState();
}
}
class MainScreenState extends State {
List<Category> categories = <Category>[];
List<Widget> categoryWidgets = <Widget>[];
List<Product> products = <Product>[];
@override
void initState() {
getCategoriesFromApi();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
"Alışveriş Sistemi",
style: TextStyle(color: Colors.white),
),
backgroundColor: Colors.lightBlueAccent,
centerTitle: true,
),
body: Padding(
padding: EdgeInsets.all(10.0),
child: Column(
children: <Widget>[
SingleChildScrollView(
scrollDirection:
Axis.horizontal, //aşagı yukarı yapmak için vertikal kulanılır
child: Row(
children: categoryWidgets,
),
), //birden fazla buton olduğu için ekranda kaydırılablir buton eklme yaptık tab ile yapılabilir.
ProductListWidget(products)
],
),
),
);
}
void getCategoriesFromApi() {
CategoryApi.getCategories().then((response) {
//data değişince ekrana yasıması için setstate kullanılır
setState(() {
Iterable list = json.decode(response
.body); //map formatına çekmek için kullanılır,ıterable yapılar for gibi döngülere denir
//aşağıda category değerlerini categories parametrelerini Category sınıfında haritalamak içinfromJson ve sonunda liste hali alınır.
this.categories =
list.map((category) => Category.fromJson(category)).toList();
// bu methotda categoriesde eleman sayısı kadar dolaşıp her brinin floatbutton haline getirilmesi sağlanır.
getCategoryWidgets();
});
}); //then response yapmamızın sebebi yanıt almamız için kullanılır
}
List<Widget> getCategoryWidgets() {
for (int i = 0; i < categories.length; i++) {
categoryWidgets.add(getCategoryWidget(categories[i]));
}
return categoryWidgets;
}
Widget getCategoryWidget(Category category) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Center(child: Text("Buttons")),
),
body: Center(
child: TextButton(
onPressed: () {
getProductsByCategoryId(category);
},
child: Text(
category.categoryName,
style: TextStyle(
fontSize: 25,
color: Colors.pinkAccent,
fontWeight: FontWeight.bold),
),
),
),
),
);
}
void getProductsByCategoryId(Category category) {
ProductApi.getProductsByCategoryId(category.id).then((response) {
setState(() {
Iterable list = json.decode(response.body);
this.products =
list.map((product) => Product.fromJson(product)).toList();
});
});
}
}
---------------------------------------------
product_list_widget
import 'package:flutter/cupertino.dart';
import '../models/product.dart';
class ProductListWidget extends StatefulWidget {
late List<Product> products = <Product>[];
ProductListWidget(List<Product> products) {
this.products = products;
}
@override
State<StatefulWidget> createState() {
return ProductListWidgetState();
}
}
class ProductListWidgetState extends State<ProductListWidget> {
@override
Widget build(BuildContext context) {
return buildProductList(context);
}
Widget buildProductList(BuildContext context) {
return Expanded(
child: ListView.builder(
itemCount: widget.products.length,
itemBuilder: (context, index) {
return Text(widget.products[index].productName);
}),
);
}
/*listedeki products verisini alabilmek için class daki ProductListWidget in state kısmına ProductList listesinin widgetını belirterek veri alındı*/
}
---------------------------------------------------------------
büyük ihtimal hata aldığım kısım category_api.dart_
import "package:http/http.dart" as http;
class CategoryApi {
static Future getCategories() {
return http.get(Uri.parse("http://10.0.2.2:3000/categories"));
}
}
----------------------------------------------
product_api.dart
import 'package:http/http.dart' as http;
class ProductApi {
static Future getProducts() {
return http.get(Uri.parse(
"http://10.0.2.2:3000/products")); //veri listeleme ve filtreleme işlemleri için get kullanılır
}
static Future getProductsByCategoryId(int categoryId) {
return http
.get(Uri.parse("http://10.0.2.2:3000/products?categoryId=$categoryId"));
}
}
flutter da hiç bir hata gözükmüyor ama verileri çekemiyorum
şimdiden yardımlarınız için teşekkür ederim.