import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:webview_flutter/webview_flutter.dart'; class _ListDetailScreen extends StatefulWidget { final String title; final String? filepath; const _ListDetailScreen({super.key, required this.title, this.filepath}); @override State<_ListDetailScreen> createState() => _ListDetailScreenState(); } class _ListDetailScreenState extends State<_ListDetailScreen> { List checklist = []; late WebViewController _controller; late String? fPath = widget.filepath; @override void initState() { super.initState(); _controller = WebViewController()..setJavaScriptMode(JavaScriptMode.unrestricted); checklist = List.generate(paragraphs.length, (index) => false); if (fPath != null && fPath!.isNotEmpty) { _loadContent(fPath!); // <- ini penting } } final List paragraphs = [ "Paragraf pertama tentang ${"widget.title"}.", "Paragraf kedua dengan informasi tambahan.", "Paragraf ketiga yang menjelaskan detail lebih lanjut.", "Paragraf keempat yang melengkapi pembahasan.", ]; void _loadContent(String path) async { try { if (path.startsWith('http')) { _controller.loadRequest(Uri.parse(path)); } else { String fileHtml = await rootBundle.loadString(path); _controller.loadHtmlString(fileHtml); } } catch (e) { debugPrint("Error loading HTML: $e"); } } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.white, appBar: AppBar(title: Text(widget.title)), body: (fPath != null && fPath!.isNotEmpty) ? WebViewWidget(controller: _controller) : Padding( padding: const EdgeInsets.all(16.0), child: Column( children: [ Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Image.asset( 'assets/images/default.png', width: 100, height: 100, fit: BoxFit.cover, ), const SizedBox(width: 16), Expanded( child: Text( "Ini adalah detail dari ${widget.title}.", style: const TextStyle(fontSize: 18), ), ), ], ), const SizedBox(height: 20), Expanded( child: ListView.builder( itemCount: paragraphs.length, itemBuilder: (context, index) { return ListTile( title: Text(paragraphs[index]), trailing: Checkbox( value: checklist[index], onChanged: (bool? value) { setState(() { checklist[index] = value!; }); }, ), ); }, ), ), ], ), ), ); } }