mirror of
				https://github.com/AppFlowy-IO/AppFlowy.git
				synced 2025-10-31 18:15:09 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			100 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| 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<StatefulWidget> createState() => DetailsPlaceholderScreenState();
 | |
| }
 | |
| 
 | |
| /// The state for DetailsScreen
 | |
| class DetailsPlaceholderScreenState extends State<DetailsPlaceholderScreen> {
 | |
|   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: <Widget>[
 | |
|           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) ...<Widget>[
 | |
|             const Padding(padding: EdgeInsets.all(16)),
 | |
|             TextButton(
 | |
|               onPressed: () {
 | |
|                 GoRouter.of(context).pop();
 | |
|               },
 | |
|               child: const Text(
 | |
|                 '< Back',
 | |
|                 style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18),
 | |
|               ),
 | |
|             ),
 | |
|           ],
 | |
|         ],
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| }
 | 
