import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart' show rootBundle; class Listview extends StatefulWidget { const Listview({Key? key}) : super(key: key); @override State<Listview> createState() => _ListviewState(); } class _ListviewState extends State<Listview> { List<Map<String, dynamic>> items = []; @override void initState() { super.initState(); loadJsonData(); } Future<void> loadJsonData() async { final String response = await rootBundle.loadString('assets/Response.json'); final List<dynamic> data = json.decode(response); setState(() { items = List<Map<String, dynamic>>.from(data); }); } void _onItemTap(Map<String, dynamic> item) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text( 'REQUEST STATUS: ${item['REQUEST STATUS']}, RESULT: ${item['RESULT']}'), ), ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('JSON ListView'), ), body: ListView.separated( itemCount: items.length, itemBuilder: (context, index) { final item = items[index]; return Card( child: ListTile( title: Text(item['REQUEST STATUS']), subtitle: Text(item['RESULT']), trailing: Icon(Icons.last_page_rounded), onTap: () => _onItemTap(item), ), ); }, separatorBuilder: (context, index) => const Divider(), ), ); } } void main() { runApp(const MaterialApp( home: Listview(), )); }
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter