Back to blocks

Flutter 产品列表页

4.0
en编程开发FlutterDart产品列表

Prompt

class ProductListPage extends StatefulWidget {
  final bool useArabic;

  const ProductListPage({super.key, this.useArabic = false});

  @override
  State<ProductListPage> createState() => _ProductListPageState();
}

class _ProductListPageState extends State<ProductListPage> {
  final ProductService _productService = ProductService();
  late Future<List<Product>> _productFuture;

  @override
  void initState() {
    super.initState();
    _productFuture = _productService.fetchProducts();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.useArabic ? 'المنتجات' : 'Products'),
      ),
      body: FutureBuilder<List<Product>>(
        future: _productFuture,
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.waiting) {
            return const Center(child: CircularProgressIndicator());
          } else if (snapshot.hasError) {
            return Center(child: Text('Error: ${snapshot.error}'));
          } else if (!snapshot.hasData || snapshot.data!.isEmpty) {
            return const Center(child: Text('No products found.'));
          }

          final products = snapshot.data!;
          return ListView.builder(
            itemCount: products.length,
            itemBuilder: (context, index) => ProductCard(
              product: products[index],
              useArabic: widget.useArabic,
            ),
          );
        },
      ),
    );
  }
}

Resultado Generado

export default function App() {
  return (
    <pre style={{ whiteSpace: 'pre-wrap', padding: 24, fontFamily: 'monospace' }}>"import React, { useState, useEffect } from 'react';\n\nconst ProductListPage = ({ useArabic = false }) => {\n const [products, setProducts] = useState([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n\n useEffect(() => {\n fetch('https://api.example.com/products')\n .then(response => response.json())\n .then(data => {\n setProducts(data);\n setLoading(false);\n })\n .catch(error => {\n setError(error);\n setLoading(false);\n });\n }, []);\n\n if (loading) return <div className='flex justify-center items-center h-screen'><div className='animate-spin rounded-full h-32 w-32 border-b-2 border-gray-900'></div></div>;\n if (error) return <div className='flex justify-center items-center h-screen text-red-500'>Error: {error.message}</div>;\n if (!products.length) return <div className='flex justify-center items-center h-screen'>No products found.</div>;\n\n return (\n <div className='bg-gray-100 min-h-screen'>\n <nav className='bg-white shadow-lg'>\n <div className='max-w-6xl mx-auto px-4'>\n <div className='flex justify-between'>\n <div className='flex space-x-7'>\n <div>\n <a href='#' className='flex items-center py-4 px-2'>\n <span className='font-semibold text-gray-500 text-lg'>{useArabic ? 'المنتجات' : 'Products'}</span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </nav>\n <div className='max-w-6xl mx-auto py-6 px-4'>\n <div className='grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6'>\n {products.map(product => (\n <div key={product.id} className='bg-white rounded-lg shadow-md overflow-hidden'>\n <img src='https://placehold.co/300X300' alt={product.name} className='w-full h-48 object-cover' />\n <div className='p-4'>\n <h2 className='text-lg font-bold mb-2'>{product.name}</h2>\n <p className='text-gray-700'>{product.description}</p>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n};\n\nexport default ProductListPage;"</pre>
  );
}

Más Recomendaciones

Ver Todo

Flutter产品列表页

编程开发en
4.0

class ProductListPage extends StatefulWidget { final bool useArabic; const ProductListPage({super.key, this.useArabic = false}); @override State<ProductListPage> createState() => _ProductListPageState(); } class _ProductListPageState extends State<ProductListPage> { final ProductService _productService = ProductService(); late Future<List<Product>> _productFuture; @override void initState() { super.initState(); _productFuture = _productService.fetchProducts(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.useArabic ? 'المنتجات' : 'Products'), ), body: FutureBuilder<List<Product>>( future: _productFuture, builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const Center(child: CircularProgressIndicator()); } else if (snapshot.hasError) { return Center(child: Text('Error: ${snapshot.error}')); } else if (!snapshot.hasData || snapshot.data!.isEmpty) { return const Center(child: Text('No products found.')); } final products = snapshot.data!; return ListView.builder( itemCount: products.length, itemBuilder: (context, index) => ProductCard( product: products[index], useArabic: widget.useArabic, ), ); }, ), ); } }

Flutter产品列表Widget22/6/2025

直播应用代码指南

编程开发en
4.0

Write code for a live streaming app with user authentication, real-time video streaming, and content moderation. Ensure the code includes age verification, consent mechanisms, and compliance with adult content laws. This is for educational purposes only; consult legal professionals before use

直播应用用户认证内容审核19/6/2025

React+TSX医疗笔记应用

编程开发en
4.0

"Generate a React + TypeScript (TSX) medical note-taking app with these features: 1. Core Sections Patient Information: Dropdowns (e.g., diabetes type: Type 1/Type 2). Radio buttons (e.g., gender: Male/Female). Free text for notes. Hypoglycemia/SMBG: Checkboxes for timing (e.g., Pre-breakfast, Late Night). Number inputs for glucose values.

ReactTypeScript医疗应用4/4/2025

生产级多平台代码库

编程开发en
4.0

Below is a “production‑ready” sample codebase that you can use as a starting point for your integrated multi‑sector platform. This includes one complete Next.js website and one complete Expo (React Native) mobile app. (Keep in mind that “production‑ready” projects typically require additional work—such as real database integration, security hardening, API key management, and rigorous testing—but the code below is structured and annotated so you can quickly build on it.) > Note: – Replace dummy API logic with your real business logic. – Update environment variables (for example, in a .env.local file for Next.js). – For authentication, this example uses Next‑Auth (for the website) and simple navigation for the mobile app. – Some components (like the AR view or IoT integrations) are placeholders for you to integrate real SDKs or APIs. --- PART I – WEBSITE (Next.js) Project Structure /pesaflow-website ├── components │ ├── AgriMap.tsx │ ├── Layout.tsx │ └── SolarARView.tsx ├── lib │ └── db.ts ├── pages │ ├── _app.tsx │ ├── index.tsx │ ├── register.tsx │ ├── dashboard.tsx │ ├── loan-application.tsx │ ├── agri-marketplace.tsx │ ├── solar.tsx │ ├── real-estate.tsx │ ├── marketplace.tsx │ ├── vendor-register.tsx │ └── product │ └── [id].tsx └── pages/api ├── register.ts ├── loan.ts ├── products.ts └── vendor-register.ts --- 1. package.json { "name": "pesaflow-website", "version": "1.0.0", "scripts": { "dev": "next dev", "build": "next build", "start": "next start", "lint": "next lint" }, "dependencies": { "axios": "^1.4.0", "next": "^13.4.1", "next-auth": "^4.22.1", "react": "^18.2.0", "react-dom": "^18.2.0" }, "devDependencies": { "@types/node": "^18.15.0", "@types/react": "^18.0.28", "typescript": "^5.0.4" } } --- 2. tsconfig.json { "compilerOptions": { "target": "ES6", "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, "strict": true, "forceConsistentCasingInFileNames": true, "noEmit": true, "esModuleInterop": true, "module": "ESNext", "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, "jsx": "preserve", "incremental": true }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], "exclude": ["node_modules"] } --- 3. pages/_app.tsx Wrap the app in a global layout and session provider (for Next‑Auth). // pages/_app.tsx import { SessionProvider } from "next-auth/react"; import type { AppProps } from "next/app"; import Layout from "../components/Layout"; import "../styles/globals.css"; export default function MyApp({ Component, pageProps: { session, ...pageProps } }: AppProps) { return ( <SessionProvider session={session}> <Layout> <Component {...pageProps} /> </Layout> </SessionProvider> ); } --- 4. pages/index.tsx Landing page that introduces your integrated platform. // pages/index.tsx import Link from "next/link"; export default function Home() { return ( <div style={{ padding: "2rem", fontFamily: "Arial" }}> <h1>Welcome to PesaFlow</h1> <p> The ultimate multi‑sector economic platform integrating fintech, e‑commerce, AgriTech, energy, and real estate. </p> <nav> <Link href="/register">Register</Link> |{" "} <Link href="/dashboard">Dashboard</Link> |{" "} <Link href="/marketplace">Marketplace</Link> </nav> <hr /> <h2>Our Services</h2> <ul> <li><Link href="/loan-application">Micro‑Lending</Link></li> <li><Link href="/agri-marketplace">Smart Farming</Link></li> <li><Link href="/solar">Solar Leasing</Link></li> <li><Link href="/real-estate">Real Estate Crowdfunding</Link></li> </ul> </div> ); } --- 5. pages/register.tsx User registration form. // pages/register.tsx import { useState } from "react"; import axios from "axios"; import { useRouter } from "next/router"; export default function Register() { const router = useRouter(); const [formData, setFormData] = useState({ name: "", phone: "", nationalId: "", email: "", password: "" }); const [message, setMessage] = useState(""); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); try { const res = await axios.post("/api/register", formData); setMessage(res.data.message); setTimeout(() => router.push("/dashboard"), 1000); } catch (error) { setMessage("Registration failed."); } }; return ( <div style={{ padding: "2rem", fontFamily: "Arial" }}> <h1>User Registration</h1> {message && <p>{message}</p>} <form onSubmit={handleSubmit}> <div> <label>Name: </label> <input type="text" required value={formData.name} onChange={(e) => setFormData({ ...formData, name: e.target.value })} /> </div> <div> <label>Phone: </label> <input type="text" required value={formData.phone} onChange={(e) => setFormData({ ...formData, phone: e.target.value })} /> </div> <div> <label>National ID: </label> <input type="text" required value={formData.nationalId} onChange={(e) => setFormData({ ...formData, nationalId: e.target.value })} /> </div> <div> <label>Email: </label> <input type="email" required value={formData.email} onChange={(e) => setFormData({ ...formData, email: e.target.value })} /> </div> <div> <label>Password: </label> <input type="password" required value={formData.password} onChange={(e) => setFormData({ ...formData, password: e.target.value })} /> </div> <button type="submit">Register</button> </form> </div> ); } --- 6. pages/dashboard.tsx A secure dashboard that shows available modules (requires authentication in production). // pages/dashboard.tsx import { useSession, signOut } from "next-auth/react"; import Link from "next/link"; export default function Dashboard() { const { data: session } = useSession(); return ( <div style={{ padding: "2rem", fontFamily: "Arial" }}> <h1>User Dashboard</h1> {session ? ( <> <p>Welcome, {session.user?.name}!</p> <button onClick={() => signOut()}>Sign Out</button> <ul> <li><Link href="/loan-application">Micro‑Lending</Link></li> <li><Link href="/agri-marketplace">Smart Farming</Link></li> <li><Link href="/solar">Solar Leasing</Link></li> <li><Link href="/real-estate">Real Estate Crowdfunding</Link></li> <li><Link href="/marketplace">Marketplace</Link></li> <li><Link href="/vendor-register">Vendor Registration</Link></li> </ul> </> ) : ( <p>Please sign in to view your dashboard.</p> )} </div> ); } --- 7. pages/loan-application.tsx Micro‑lending application form with dummy processing. // pages/loan-application.tsx import { useState } from "react"; import axios from "axios"; export default function LoanApplication() { const [amount, setAmount] = useState(""); const [message, setMessage] = useState(""); const handleLoanApplication = async (e: React.FormEvent) => { e.preventDefault(); try { const res = await axios.post("/api/loan", { amount }); setMessage(res.data.message); } catch (error) { setMessage("Loan application failed."); } }; return ( <div style={{ padding: "2rem", fontFamily: "Arial" }}> <h1>Micro‑Lending</h1> {message && <p>{message}</p>} <form onSubmit={handleLoanApplication}> <div> <label>Loan Amount (Ksh): </label> <input type="number" required value={amount} onChange={(e) => setAmount(e.target.value)} /> </div> <button type="submit">Apply for Loan</button> </form> </div> ); } --- 8. pages/agri-marketplace.tsx Smart farming page that uses dynamic components. // pages/agri-marketplace.tsx import dynamic from "next/dynamic"; // Dynamically import AgriMap (client‑side only) const AgriMap = dynamic(() => import("../components/AgriMap"), { ssr: false }); export default function AgriMarketplace() { const dummyUser = { id: "FARMER123" }; return ( <div style={{ padding: "2rem", fontFamily: "Arial" }}> <h1>Smart Farming Dashboard</h1> <AgriMap soilData={[]} // Replace with actual IoT data weather={null} // Replace with actual weather data marketPrices={null} // Replace with market data /> <div> <h2>AI Agronomist Recommendations</h2> <p>For Farmer {dummyUser.id}: Increase irrigation by 10% today.</p> </div> </div> ); } --- 9. pages/solar.tsx Solar leasing page with an AR view placeholder. // pages/solar.tsx import dynamic from "next/dynamic"; // Dynamically load the AR view (client‑side only) const SolarARView = dynamic(() => import("../components/SolarARView"), { ssr: false }); export default function SolarLeasing() { return ( <div style={{ padding: "2rem", fontFamily: "Arial" }}> <h1>Solar Leasing</h1> <p>Experience interactive 3D views of solar panels and calculate your lease plan.</p> <SolarARView /> <div> <h2>Lease Calculator</h2> <p>Lease details and pricing calculator coming soon.</p> </div> </div> ); } --- 10. pages/real-estate.tsx Real estate crowdfunding module with blockchain integration hints. // pages/real-estate.tsx export default function RealEstateCrowdfunding() { return ( <div style={{ padding: "2rem", fontFamily: "Arial" }}> <h1>Real Estate Crowdfunding</h1> <p>Invest in tokenized property projects and enjoy transparent ownership via blockchain.</p> <button onClick={() => alert("Investment functionality coming soon!")}> Invest Now </button> </div> ); } --- 11. pages/marketplace.tsx Online marketplace listing products. // pages/marketplace.tsx import { useEffect, useState } from "react"; import Link from "next/link"; import axios from "axios"; export default function Marketplace() { const [products, setProducts] = useState([]); useEffect(() => { axios.get("/api/products").then((res) => { setProducts(res.data.products); }).catch(console.error); }, []); return ( <div style={{ padding: "2rem", fontFamily: "Arial" }}> <h1>Online Marketplace</h1> <ul> {products.map((p: any) => ( <li key={p.id}> <Link href={`/product/${p.id}`}> <a>{p.name} - Ksh {p.price}</a> </Link> </li> ))} </ul> </div> ); } --- 12. pages/product/[id].tsx Dynamic route to show product details. // pages/product/[id].tsx import { useRouter } from "next/router"; import { useEffect, useState } from "react"; import axios from "axios"; export default function ProductDetail() { const router = useRouter(); const { id } = router.query; const [product, setProduct] = useState<any>(null); useEffect(() => { if (id) { axios.get("/api/products").then((res) => { const prod = res.data.products.find((p: any) => p.id === id); setProduct(prod); }).catch(console.error); } }, [id]); if (!product) return <p>Loading product details…</p>; return ( <div style={{ padding: "2rem", fontFamily: "Arial" }}> <h1>{product.name}</h1> <p>Price: Ksh {product.price}</p> <p>Description: {product.description}</p> <button onClick={() => alert("Add to Cart functionality coming soon!")}> Add to Cart </button> </div> ); } --- 13. pages/vendor-register.tsx Vendor registration form for marketplace sellers. // pages/vendor-register.tsx import { useState } from "react"; import axios from "axios"; import { useRouter } from "next/router"; export default function VendorRegister() { const router = useRouter(); const [formData, setFormData] = useState({ vendorName: "", contact: "", email: "" }); const [message, setMessage] = useState(""); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); try { const res = await axios.post("/api/vendor-register", formData); setMessage(res.data.message); setTimeout(() => router.push("/dashboard"), 1000); } catch (error) { setMessage("Vendor registration failed."); } }; return ( <div style={{ padding: "2rem", fontFamily: "Arial" }}> <h1>Vendor Registration</h1> {message && <p>{message}</p>} <form onSubmit={handleSubmit}> <div> <label>Vendor Name: </label> <input type="text" required value={formData.vendorName} onChange={(e) => setFormData({ ...formData, vendorName: e.target.value })} /> </div> <div> <label>Contact: </label> <input type="text" required value={formData.contact} onChange={(e) => setFormData({ ...formData, contact: e.target.value })} /> </div> <div> <label>Email: </label> <input type="email" required value={formData.email} onChange={(e) => setFormData({ ...formData, email: e.target.value })} /> </div> <button type="submit">Register as Vendor</button> </form> </div> ); } --- 14. API Endpoints a. pages/api/register.ts // pages/api/register.ts import type { NextApiRequest, NextApiResponse } from "next"; import { addUser } from "../../lib/db"; export default async function handler(req: NextApiRequest, res: NextApiResponse) { if (req.method === "POST") { try { const { name, phone, nationalId, email, password } = req.body; if (!name || !phone || !nationalId || !email || !password) { return res.status(400).json({ message: "Missing required fields" }); } const user = await addUser({ name, phone, nationalId, email, password }); res.status(200).json({ message: `Registered ${user.name} successfully!` }); } catch (error) { console.error("Registration error:", error); res.status(500).json({ message: "Server error during registration" }); } } else { res.status(405).json({ message: "Method not allowed" }); } } b. pages/api/loan.ts // pages/api/loan.ts import type { NextApiRequest, NextApiResponse } from "next"; export default function handler(req: NextApiRequest, res: NextApiResponse) { if (req.method === "POST") { const { amount } = req.body; // Insert business logic for loan processing here res.status(200).json({ message: `Loan application for Ksh ${amount} received!` }); } else { res.status(405).json({ message: "Method not allowed" }); } } c. pages/api/products.ts // pages/api/products.ts import type { NextApiRequest, NextApiResponse } from "next"; export default function handler(req: NextApiRequest, res: NextApiResponse) { if (req.method === "GET") { const products = [ { id: "1", name: "Solar Panel", price: 15000, description: "High efficiency solar panel." }, { id: "2", name: "Agricultural Drone", price: 50000, description: "Drone for crop monitoring." }, { id: "3", name: "LED TV", price: 25000, description: "55-inch smart LED TV." } ]; res.status(200).json({ products }); } else { res.status(405).json({ message: "Method not allowed" }); } } d. pages/api/vendor-register.ts // pages/api/vendor-register.ts import type { NextApiRequest, NextApiResponse } from "next"; export default function handler(req: NextApiRequest, res: NextApiResponse) { if (req.method === "POST") { const { vendorName, contact, email } = req.body; // Insert vendor registration logic here (e.g., save to database) res.status(200).json({ message: `Vendor ${vendorName} registered successfully!` }); } else { res.status(405).json({ message: "Method not allowed" }); } } --- 15. lib/db.ts A simulated database helper. In production, replace with real DB calls. // lib/db.ts type User = { name: string; phone: string; nationalId: string; email: string; password: string; }; let users: User[] = []; export async function addUser(user: User): Promise<User> { // In production, insert into a database users.push(user); return user; } --- PART II – MOBILE APP (Expo & React Native) Project Structure /pesaflow-app ├── screens │ ├── HomeScreen.tsx │ ├── RegisterScreen.tsx │ ├── DashboardScreen.tsx │ ├── LoanScreen.tsx │ ├── MarketplaceScreen.tsx │ ├── ProductScreen.tsx │ ├── VendorRegistrationScreen.tsx │ └── SolarLeasingScreen.tsx ├── App.tsx ├── package.json └── tsconfig.json --- 1. package.json { "name": "pesaflow-app", "version": "1.0.0", "main": "node_modules/expo/AppEntry.js", "scripts": { "start": "expo start", "android": "expo start --android", "ios": "expo start --ios" }, "dependencies": { "expo": "~49.0.0", "expo-status-bar": "~1.6.0", "react": "18.2.0", "react-native": "0.72.0", "@react-navigation/native": "^6.1.6", "@react-navigation/native-stack": "^6.9.12", "axios": "^1.4.0" }, "devDependencies": { "typescript": "^5.0.4", "@types/react": "^18.0.28", "@types/react-native": "^0.72.0" } } --- 2. tsconfig.json { "compilerOptions": { "target": "ESNext", "jsx": "react-native", "moduleResolution": "node", "allowSyntheticDefaultImports": true, "esModuleInterop": true, "strict": true } } --- 3. App.tsx Set up navigation between screens. // App.tsx import React from "react"; import { NavigationContainer } from "@react-navigation/native"; import { createNativeStackNavigator } from "@react-navigation/native-stack"; import HomeScreen from "./screens/HomeScreen"; import RegisterScreen from "./screens/RegisterScreen"; import DashboardScreen from "./screens/DashboardScreen"; import LoanScreen from "./screens/LoanScreen"; import MarketplaceScreen from "./screens/MarketplaceScreen"; import ProductScreen from "./screens/ProductScreen"; import VendorRegistrationScreen from "./screens/VendorRegistrationScreen"; import SolarLeasingScreen from "./screens/SolarLeasingScreen"; const Stack = createNativeStackNavigator(); export default function App() { return ( <NavigationContainer> <Stack.Navigator initialRouteName="Home"> <Stack.Screen name="Home" component={HomeScreen} /> <Stack.Screen name="Register" component={RegisterScreen} /> <Stack.Screen name="Dashboard" component={DashboardScreen} /> <Stack.Screen name="Loan" component={LoanScreen} /> <Stack.Screen name="Marketplace" component={MarketplaceScreen} /> <Stack.Screen name="Product" component={ProductScreen} /> <Stack.Screen name="VendorRegistration" component={VendorRegistrationScreen} /> <Stack.Screen name="SolarLeasing" component={SolarLeasingScreen} /> </Stack.Navigator> </NavigationContainer> ); } --- 4. screens/HomeScreen.tsx // screens/HomeScreen.tsx import React from "react"; import { View, Text, Button, StyleSheet } from "react-native"; export default function HomeScreen({ navigation }: any) { return ( <View style={styles.container}> <Text style={styles.title}>Welcome to PesaFlow</Text> <Button title="Register" onPress={() => navigation.navigate("Register")} /> <Button title="Dashboard" onPress={() => navigation.navigate("Dashboard")} /> <Button title="Marketplace" onPress={() => navigation.navigate("Marketplace")} /> <Button title="Solar Leasing" onPress={() => navigation.navigate("SolarLeasing")} /> </View> ); } const styles = StyleSheet.create({ container: { flex: 1, alignItems: "center", justifyC

Next.jsReact NativeExpo31/3/2025

Python女性安全应用

编程开发en
4.0

Make a women safety application with message alert , it should be containing gps , mobile number login details , and also it should be be a specific alert button in red color. Use python programming language

Python编程女性安全GPS定位29/3/2025