<%_ const baseName = context.baseName; const entityInstance = context.entityInstance; const entityFileName = context.entityFileName; const entityClassPlural = context.entityClassPlural; const entityClassPluralLowered = context.entityClassPluralLowered; const entityClass = context.entityClass; const camelizedUpperFirstBaseName = context.camelizedUpperFirstBaseName; const enableTranslation = context.enableTranslation; const fields = context.fields; _%> import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:<%= baseName %>/account/login/login_repository.dart'; import 'package:<%= baseName %>/entities/<%= entityFileName %>/bloc/<%= entityFileName %>_bloc.dart'; import 'package:<%= baseName %>/entities/<%= entityFileName %>/<%= entityFileName %>_model.dart'; <%_ if(enableTranslation) { _%> import 'package:<%= baseName %>/generated/l10n.dart'; <%_ } _%> import 'package:flutter/material.dart'; import 'package:<%= baseName %>/shared/widgets/drawer/bloc/drawer_bloc.dart'; import 'package:<%= baseName %>/shared/widgets/drawer/drawer_widget.dart'; import 'package:<%= baseName %>/shared/widgets/loading_indicator_widget.dart'; import 'package:<%= baseName %>/shared/models/entity_arguments.dart'; import '<%= entityFileName %>_route.dart'; class <%= entityClass %>ListScreen extends StatelessWidget { <%= entityClass %>ListScreen({Key key}) : super(key: <%= entityClass %>Routes.listScreenKey); final GlobalKey scaffoldKey = new GlobalKey(); @override Widget build(BuildContext context) { return BlocListener<<%= entityClass %>Bloc, <%= entityClass %>State>( listener: (context, state) { if(state.deleteStatus == <%= entityClass %>DeleteStatus.ok) { Navigator.of(context).pop(); scaffoldKey.currentState.showSnackBar(new SnackBar( content: new Text(<%_ if(enableTranslation) { _%>S.of(context).pageEntities<%= entityClass %>DeleteOk<%_ } else { _%> '<%= entityClass %> deleted successfuly' <%_ } _%>) )); } }, child: Scaffold( key: scaffoldKey, appBar: AppBar( centerTitle: true, title:Text(<%_ if(enableTranslation) { _%>S.of(context).pageEntities<%= entityClass %>ListTitle<%_ } else { _%> '<%= entityClassPlural %> List' <%_ } _%>), ), body: SingleChildScrollView( padding: const EdgeInsets.all(15.0), child: BlocBuilder<<%= entityClass %>Bloc, <%= entityClass %>State>( buildWhen: (previous, current) => previous.<%= entityClassPluralLowered %> != current.<%= entityClassPluralLowered %>, builder: (context, state) { return Visibility( visible: state.<%= entityInstance %>StatusUI == <%= entityClass %>StatusUI.done, replacement: LoadingIndicator(), child: Column(children: [ for (<%= entityClass %> <%= entityInstance %> in state.<%= entityClassPluralLowered %>) <%= entityInstance %>Card(<%= entityInstance %>, context) ]), ); } ), ), drawer: BlocProvider( create: (context) => DrawerBloc(loginRepository: LoginRepository()), child: <%= camelizedUpperFirstBaseName %>Drawer()), floatingActionButton: FloatingActionButton( onPressed: () => Navigator.pushNamed(context, <%= entityClass %>Routes.create), child: Icon(Icons.add, color: Theme.of(context).iconTheme.color,), backgroundColor: Theme.of(context).primaryColor, ) ), ); } Widget <%= entityInstance %>Card(<%= entityClass %> <%= entityInstance %>, BuildContext context) { <%= entityClass %>Bloc <%= entityInstance %>Bloc = BlocProvider.of<<%= entityClass %>Bloc>(context); return Card( child: Container( width: MediaQuery.of(context).size.width * 0.90, child: Column( children: [ ListTile( leading: Icon( Icons.account_circle, size: 60.0, color: Theme.of(context).primaryColor, ), <%_ for (let i = 0; i < 2 && i < fields.length ; i++) { _%> <%_ if(i == 0) { _%> title: Text('<%= fields[i].fieldNameHumanized %> : ${<%= entityInstance %>.<%= fields[i].fieldName %>.toString()}'), <%_ } else { _%> subtitle: Text('<%= fields[i].fieldNameHumanized %> : ${<%= entityInstance %>.<%= fields[i].fieldName %>.toString()}'), <%_ } _%> <%_ } _%> trailing: DropdownButton( icon: Icon(Icons.more_vert), onChanged: (String newValue) { switch (newValue) { case "Edit": Navigator.pushNamed( context, <%= entityClass %>Routes.edit, arguments: EntityArguments(<%= entityInstance %>.id)); break; case "Delete": showDialog( context: context, builder: (BuildContext context) { return deleteDialog( <%= entityInstance %>Bloc, context, <%= entityInstance %>.id); }, ); } }, items: [ DropdownMenuItem( value: 'Edit', child: Text('Edit'), ), DropdownMenuItem( value: 'Delete', child: Text('Delete')) ]), selected: false, onTap: () => Navigator.pushNamed( context, <%= entityClass %>Routes.view, arguments: EntityArguments(<%= entityInstance %>.id)), ), ], ), ), ); } Widget deleteDialog(<%= entityClass %>Bloc <%= entityInstance %>Bloc, BuildContext context, int id) { return BlocProvider<<%= entityClass %>Bloc>.value( value: <%= entityInstance %>Bloc, child: AlertDialog( title: new Text(<%_ if(enableTranslation) { _%>S.of(context).pageEntities<%= entityClass %>DeletePopupTitle<%_ } else { _%>'Delete <%= entityClassPlural %>'<%_ } _%>), content: new Text(<%_ if(enableTranslation) { _%>S.of(context).entityActionConfirmDelete<%_ } else { _%>'Are you sure?'<%_ } _%>), actions: [ new FlatButton( child: new Text(<%_ if(enableTranslation) { _%>S.of(context).entityActionConfirmDeleteYes<%_ } else { _%>'Yes'<%_ } _%>), onPressed: () { <%= entityInstance %>Bloc.add(Delete<%= entityClass %>ById(id: id)); }, ), new FlatButton( child: new Text(<%_ if(enableTranslation) { _%>S.of(context).entityActionConfirmDeleteNo<%_ } else { _%>'No'<%_ } _%>), onPressed: () { Navigator.of(context).pop(); }, ), ], ), ); } }