[text] Item_form.dart

Viewer

copydownloadembedprintName: Item_form.dart
  1. import 'package:client/additemform/bloc/additem_bloc.dart';
  2. import 'package:flutter/foundation.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:flutter/rendering.dart';
  5. import 'package:flutter_bloc/flutter_bloc.dart';
  6. import 'package:formz/formz.dart';
  7.  
  8.  
  9.  
  10.  
  11. class AddItemForm extends StatelessWidget {
  12.   const AddItemForm({super.key});
  13.  
  14.   @override
  15.   Widget build(BuildContext context) {
  16.     return BlocListener<AddItemFormBloc, AddItemFormState>(
  17.       listener: (context,state){
  18.         if(state.status.isFailure){
  19.           ScaffoldMessenger.of(context)
  20.           ..hideCurrentSnackBar()
  21.           ..showSnackBar(
  22.             const SnackBar(content: Text('Unable to create Item')),
  23.           );
  24.         }
  25.       },
  26.         child: Scaffold(
  27.           body: SingleChildScrollView(
  28.             child: Center(
  29.               child: Container(
  30.                 color: Colors.blue,
  31.                 child: Column(
  32.                    mainAxisAlignment: MainAxisAlignment.center,
  33.                   children: [
  34.                     Container(
  35.                       width: 300,
  36.                       child: _ProductName(),
  37.                       ),
  38.                     const Padding(padding: EdgeInsets.all(7)),
  39.                     Container(
  40.                       width: 300,
  41.                       child: _ProductDescription(),
  42.                       ),
  43.                     const Padding(padding: EdgeInsets.all(7)),
  44.                     Container(
  45.                       width: 300,
  46.                       child: _ProductLocation(),
  47.                     ),
  48.                     const Padding(padding: EdgeInsets.all(7)),
  49.                     Container(
  50.                       width: 300,
  51.                       child: _CategoryField(),
  52.                       ),
  53.                     const Padding(padding: EdgeInsets.all(7)),
  54.                     Container(
  55.                       width: 300,
  56.                       child: _ConditionField(),
  57.                     ),
  58.                       const Padding(padding: EdgeInsets.all(7)),
  59.                       Container(
  60.                         width: 300,
  61.                         child: _imageField(),
  62.                       ),
  63.                       const Padding(padding: EdgeInsets.all(7)),
  64.                       _AddItemButton(),
  65.                       const Padding(padding: EdgeInsets.all(7)),
  66.                      Row( // Wrap Icon in a Row widget
  67.                       mainAxisAlignment: MainAxisAlignment.center,
  68.                       children: [
  69.                         Icon(
  70.                           Icons.add_box,
  71.                           color: Color.fromRGBO(92, 118, 95, 1),
  72.                           size: 30.0,
  73.                           ),
  74.                           SizedBox(
  75.                             width: 20,
  76.                           ),
  77.                         
  78.                       ],
  79.                      ),
  80.                 
  81.                   ],
  82.                   ),
  83.               ),
  84.             ),
  85.           ),
  86.         ),
  87.       );
  88.     
  89.   }
  90. }
  91.  
  92. class _ProductName extends StatelessWidget{
  93.   Widget build(BuildContext context){
  94.  
  95.     return BlocBuilder<AddItemFormBloc,AddItemFormState>(
  96.       buildWhen: (previous,current)=> previous.title != current.title,
  97.       builder:(context,state){
  98.         print('Current Title state: $state\n');
  99.        return TextField(
  100.         key: const Key('AddItemForm_ productname_textfield'),
  101.         onChanged: (title) =>
  102.           context.read<AddItemFormBloc>().add(AddItemFormTitleChanged(title)),
  103.       decoration: InputDecoration(
  104.         labelText: 'Product Title',
  105.         labelStyle: TextStyle(color: Colors.black),
  106.         errorText: state.title.displayError !=null? 'invalid title':null,
  107.         
  108.        ),
  109.        );
  110.       }
  111.     
  112.     );
  113.   }
  114. }
  115. class _ProductDescription extends StatelessWidget{
  116.   Widget build(BuildContext context){
  117.     return BlocBuilder<AddItemFormBloc,AddItemFormState>(
  118.       buildWhen: (previous,current) => previous.description != current.description,
  119.       builder: (context,state){
  120.         print('Current Description state: $state\n');
  121.          return TextField(
  122.           key: const Key('AddItemForm_ProductDescription_textfield'),
  123.           onChanged: (description)=>
  124.           context.read<AddItemFormBloc>().add(AddItemFormDescriptionChanged(description)),
  125.       decoration: InputDecoration(
  126.         labelStyle: TextStyle(color: Colors.black),
  127.         labelText: 'Product Description',
  128.         errorText: 
  129.           state.description.displayError != null? 'invalid description' : null,
  130.        ),
  131.     );
  132.       }
  133.     );
  134.    
  135.   }
  136. }
  137. class _ProductLocation extends StatelessWidget{
  138.   Widget build(BuildContext context){
  139.     return BlocBuilder<AddItemFormBloc,AddItemFormState>(
  140.       buildWhen: (previous,current) => previous.location !=current.location,
  141.       builder:(context,state){
  142.         print('Current Location state: $state\n');
  143.           return TextField(
  144.             key: const Key("AddItemForm_ProductLocation_textfield"),
  145.         onChanged:(location)=>
  146.         context.read()<AddItemFormBloc>().add(AddItemLocationChanged(location)),
  147.       decoration: InputDecoration(
  148.         labelStyle:  TextStyle(color:Colors.black),
  149.         labelText: 'Product Locaation',
  150.         errorText: 
  151.           state.location.displayError !=null? 'invalid location': null,
  152.       ),
  153.     );
  154.       }
  155.       );
  156.   }
  157. }
  158. class _CategoryField extends StatelessWidget{
  159.   Widget build(BuildContext context){
  160.     return BlocBuilder<AddItemFormBloc,AddItemFormState>(
  161.       buildWhen: (previous,current)=> previous.category != current.category,
  162.       builder: (context,state){
  163.         print('Current Category state: $state\n');
  164.            return TextField( 
  165.             key: const Key('AddItemForm_Category_textField'),
  166.             onChanged: (category) => 
  167.             context.read<AddItemFormBloc>().add(AddItemCategoryChanged(category)),
  168.       decoration: InputDecoration(
  169.         labelText: 'Category',
  170.         labelStyle: TextStyle(
  171.           color: Colors.black),
  172.           errorText: 
  173.           state.category.displayError != null? 'invalid category': null,
  174.       
  175.         ),
  176.       );  
  177.       }
  178.       );
  179.     
  180.   }
  181. }
  182. class _ConditionField extends StatelessWidget{
  183.   Widget build(BuildContext context){
  184.     return BlocBuilder<AddItemFormBloc,AddItemFormState>(
  185.       buildWhen:(previous,current)=> previous.condition != current.condition,
  186.       builder:(context,state){
  187.         print('Current Condition state: $state\n');
  188.          return TextField(
  189.           key: const Key('AddItemForm_condition_textField'),
  190.           onChanged: (condition)=>
  191.           context.read<AddItemFormBloc>().add(AddItemConditionChanged(condition)),
  192.       decoration: InputDecoration(
  193.         labelText: 'condition field',
  194.         labelStyle: TextStyle(color: Colors.black),
  195.         errorText: 
  196.           state.condition.displayError !=null ? 'invalid condition': null,
  197.        ),
  198.     );
  199.       }
  200.     );
  201.   }
  202. }
  203. class _imageField extends StatelessWidget{
  204.   Widget build(BuildContext context){
  205.     return BlocBuilder<AddItemFormBloc, AddItemFormState>(
  206.       buildWhen: (previous,current) => previous.imageId != current.imageId,
  207.       builder: (context,state){
  208.         print('Current image state: $state\n');
  209.         return TextField(
  210.           key:const Key('AdditemForm_Image_textField'),
  211.           onChanged: (image)=> 
  212.           context.read<AddItemFormBloc>().add(AddItemImageChanged(image)),
  213.       decoration: InputDecoration(
  214.         labelText: 'Image field',
  215.         labelStyle: TextStyle(color: Colors.black),
  216.         errorText: 
  217.           state.imageId.displayError !=null ? 'invalid image': null,
  218.        ),
  219.     );
  220.       }
  221.     );
  222.   }
  223. }
  224. class _AddItemButton extends StatelessWidget{
  225.   Widget build(BuildContext context){
  226.     return BlocBuilder<AddItemFormBloc, AddItemFormState>(
  227.       builder:(context,state){
  228.         return state.status.isInProgress
  229.         ? const CircularProgressIndicator()
  230.         : ElevatedButton(
  231.           key: const Key('AddItemForm_continue_raisedButton'),
  232.           onPressed: (){
  233.            // print(state);
  234.             print(state.isValid);
  235.             print("clicked");
  236.           },
  237.           // onPressed: state.isValid  
  238.           // ?(){
  239.           //   print("is valid");
  240.           //   context.read<AddItemFormBloc>().add(const AddItemFormSubmitted());
  241.           // }
  242.           // : null,
  243.           child: const Text('Add Item'),
  244.         );
  245.       },
  246.     );
  247.   }
  248. }
  249.  
  250.  

Editor

You can edit this paste and save as new:


File Description
  • Item_form.dart
  • Paste Code
  • 08 May-2024
  • 8.43 Kb
You can Share it: