import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; // TODO(yijing): delete this after implementing the real screen inside bottom navigation bar. /// For demonstration purposes class DetailsPlaceholderScreen extends StatefulWidget { /// Constructs a [DetailsScreen]. const DetailsPlaceholderScreen({ required this.label, this.param, this.extra, this.withScaffold = true, super.key, }); /// The label to display in the center of the screen. final String label; /// Optional param final String? param; /// Optional extra object final Object? extra; /// Wrap in scaffold final bool withScaffold; @override State createState() => DetailsPlaceholderScreenState(); } /// The state for DetailsScreen class DetailsPlaceholderScreenState extends State { int _counter = 0; @override Widget build(BuildContext context) { if (widget.withScaffold) { return Scaffold( appBar: AppBar( title: Text('Details Screen - ${widget.label}'), ), body: _build(context), ); } else { return Container( color: Theme.of(context).scaffoldBackgroundColor, child: _build(context), ); } } Widget _build(BuildContext context) { return Center( child: Column( mainAxisSize: MainAxisSize.min, children: [ Text( 'Details for ${widget.label} - Counter: $_counter', style: Theme.of(context).textTheme.titleLarge, ), const Padding(padding: EdgeInsets.all(4)), TextButton( onPressed: () { setState(() { _counter++; }); }, child: const Text('Increment counter'), ), const Padding(padding: EdgeInsets.all(8)), if (widget.param != null) Text( 'Parameter: ${widget.param!}', style: Theme.of(context).textTheme.titleMedium, ), const Padding(padding: EdgeInsets.all(8)), if (widget.extra != null) Text( 'Extra: ${widget.extra!}', style: Theme.of(context).textTheme.titleMedium, ), if (!widget.withScaffold) ...[ const Padding(padding: EdgeInsets.all(16)), TextButton( onPressed: () { GoRouter.of(context).pop(); }, child: const Text( '< Back', style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18), ), ), ] ], ), ); } }