[text] ItemForm.dart

Viewer

copydownloadembedprintName: ItemForm.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: Center(
  27.           child: Container(
  28.             color: Colors.blue,
  29.             child: Column(
  30.                mainAxisAlignment: MainAxisAlignment.center,
  31.               children: [
  32.                 Container(
  33.                   width: 300,
  34.                   child: _ProductName()
  35.                   ),
  36.                 const Padding(padding: EdgeInsets.all(7)),
  37.                 Container(
  38.                   width: 300,
  39.                   child: _ProductDescription()
  40.                   ),
  41.                 const Padding(padding: EdgeInsets.all(7)),
  42.                 Container(
  43.                   width: 300,
  44.                   child: _ProductLocation()
  45.                 ),
  46.                 const Padding(padding: EdgeInsets.all(7)),
  47.                 Container(
  48.                   width: 300,
  49.                   child: _ConditionField()
  50.                   ),
  51.                 const Padding(padding: EdgeInsets.all(7)),
  52.                 Container(
  53.                   width: 300,
  54.                   child: _CategoryField(),
  55.                 ),
  56.                   const Padding(padding: EdgeInsets.all(7)),
  57.                   Container(
  58.                     width: 300,
  59.                     child: _imageField()
  60.                   ),
  61.                   const Padding(padding: EdgeInsets.all(7)),
  62.                   _AddItemButton(),
  63.                   const Padding(padding: EdgeInsets.all(7)),
  64.                  Row( // Wrap Icon in a Row widget
  65.                   mainAxisAlignment: MainAxisAlignment.center,
  66.                   children: [
  67.                     Icon(
  68.                       Icons.add_box,
  69.                       color: Color.fromRGBO(92, 118, 95, 1),
  70.                       size: 30.0,
  71.                       ),
  72.                       SizedBox(
  73.                         width: 20,
  74.                       ),
  75.                     
  76.                   ],
  77.                  ),
  78.             
  79.               ],
  80.               ),
  81.           ),
  82.         ),
  83.       );
  84.     
  85.   }
  86. }
  87.  
  88. class _ProductName extends StatelessWidget{
  89.   Widget build(BuildContext context){
  90.  
  91.     return BlocBuilder<AddItemFormBloc,AddItemFormState>(
  92.       buildWhen: (previous,current)=> previous.title != current.title,
  93.       builder:(context,state){
  94.        return TextField(
  95.         key: const Key('AddItemForm_ productname_textfield'),
  96.         onChanged: (title) =>
  97.           context.read<AddItemFormBloc>().add(AddItemFormTitleChanged(title)),
  98.       decoration: InputDecoration(
  99.         labelText: 'Product Title',
  100.         labelStyle: TextStyle(color: Colors.black),
  101.         errorText: state.title.displayError !=null? 'invalid title':null,
  102.         
  103.        ),
  104.        );
  105.       }
  106.     
  107.     );
  108.   }
  109. }
  110. class _ProductDescription extends StatelessWidget{
  111.   Widget build(BuildContext context){
  112.     return BlocBuilder<AddItemFormBloc,AddItemFormState>(
  113.       buildWhen: (previous,current) => previous.description != current.description,
  114.       builder: (context,state){
  115.          return TextField(
  116.           key: const Key('AddItemForm_ProductDescription_textfield'),
  117.           onChanged: (description)=>
  118.           context.read<AddItemFormBloc>().add(AddItemFormDescriptionChanged(description)),
  119.       decoration: InputDecoration(
  120.         labelStyle: TextStyle(color: Colors.black),
  121.         labelText: 'Product Description',
  122.         errorText: 
  123.           state.description.displayError != null? 'invalid description' : null,
  124.        ),
  125.     );
  126.       }
  127.     );
  128.    
  129.   }
  130. }
  131. class _ProductLocation extends StatelessWidget{
  132.   Widget build(BuildContext context){
  133.     return BlocBuilder<AddItemFormBloc,AddItemFormState>(
  134.       buildWhen: (previous,current) => previous.location !=current.location,
  135.       builder:(context,state){
  136.           return TextField(
  137.             key: const Key("AddItemForm_ProductLocation_textfield"),
  138.         onChanged:(location)=>
  139.         context.read()<AddItemFormBloc>().add(AddItemLocationChanged(location)),
  140.       decoration: InputDecoration(
  141.         labelStyle:  TextStyle(color:Colors.black),
  142.         labelText: 'Product Locaation',
  143.         errorText: 
  144.           state.location.displayError !=null? 'invalid location': null,
  145.       ),
  146.     );
  147.       }
  148.       );
  149.   }
  150. }
  151. class _CategoryField extends StatelessWidget{
  152.   Widget build(BuildContext context){
  153.     return BlocBuilder<AddItemFormBloc,AddItemFormState>(
  154.       buildWhen: (previous,current)=> previous.category != current.category,
  155.       builder: (context,state){
  156.            return TextField( 
  157.             key: const Key('AddItemForm_Category_textField'),
  158.             onChanged: (category) => 
  159.             context.read<AddItemFormBloc>().add(AddItemCategoryChanged(category)),
  160.       decoration: InputDecoration(
  161.         labelText: 'Category',
  162.         labelStyle: TextStyle(
  163.           color: Colors.black),
  164.           errorText: 
  165.           state.category.displayError != null? 'invalid category': null,
  166.       
  167.         ),
  168.       );
  169.       }
  170.       );
  171.     
  172.   }
  173. }
  174. class _ConditionField extends StatelessWidget{
  175.   Widget build(BuildContext context){
  176.     return BlocBuilder<AddItemFormBloc,AddItemFormState>(
  177.       buildWhen:(previous,current)=> previous.condition != current.condition,
  178.       builder:(context,state){
  179.          return TextField(
  180.           key: const Key('AddItemForm_condition_textField'),
  181.           onChanged: (condition)=>
  182.           context.read<AddItemFormBloc>().add(AddItemConditionChanged(condition)),
  183.       decoration: InputDecoration(
  184.         labelText: 'condition field',
  185.         labelStyle: TextStyle(color: Colors.black),
  186.         errorText: 
  187.           state.condition.displayError !=null ? 'invalid condition': null,
  188.        ),
  189.     );
  190.       }
  191.     );
  192.   }
  193. }
  194. class _imageField extends StatelessWidget{
  195.   Widget build(BuildContext context){
  196.     return BlocBuilder<AddItemFormBloc, AddItemFormState>(
  197.       buildWhen: (previous,current) => previous.imageId != current.imageId,
  198.       builder: (context,state){
  199.         return TextField(
  200.           key:const Key('AdditemForm_Image_textField'),
  201.           onChanged: (image)=> 
  202.           context.read<AddItemFormBloc>().add(AddItemImageChanged(image)),
  203.       decoration: InputDecoration(
  204.         labelText: 'Image field',
  205.         labelStyle: TextStyle(color: Colors.black),
  206.         errorText: 
  207.           state.imageId.displayError !=null ? 'invalid image': null,
  208.        ),
  209.     );
  210.       }
  211.     );
  212.   }
  213. }
  214. class _AddItemButton extends StatelessWidget{
  215.   Widget build(BuildContext context){
  216.     return BlocBuilder<AddItemFormBloc, AddItemFormState>(
  217.       builder:(context,state){
  218.         return state.status.isInProgress
  219.         ? const CircularProgressIndicator()
  220.         : ElevatedButton(
  221.           key: const Key('AddItemForm_continue_raisedButton'),
  222.           onPressed: state.isValid  
  223.           ?(){
  224.             context.read<AddItemFormBloc>().add(const AddItemFormSubmitted());
  225.           }
  226.           : null,
  227.           child: const Text('Add Item'),
  228.         );
  229.       }
  230.     );
  231.   }
  232. }
  233.  
  234.  

Editor

You can edit this paste and save as new:


File Description
  • ItemForm.dart
  • Paste Code
  • 24 Apr-2024
  • 7.63 Kb
You can Share it: