Usage

import 'package:devaloop_data_detail_page/data_detail_page.dart';
import 'package:devaloop_form_builder/form_builder.dart';
import 'package:devaloop_form_builder/input_field_text.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: DataDetailPage(
        title: 'Detail Doctor',
        subtitle: 'Detail Doctor',
        id: '001',
        inputFields: const [
          InputText(
            name: 'name',
            label: 'Name',
          ),
          InputText(
            name: 'email',
            label: 'Email (Google Account)',
            inputTextMode: InputTextMode.email,
          ),
        ],
        onInitial: (context, inputValues) {
          inputValues['name']!.setString('user');
          inputValues['email']!.setString('user@gmail.com');
        },
        onAfterValidation: (context, inputValues, isValid, erorMessage) {
          if (isValid) {
            if (!inputValues['email']!.getString()!.contains('gmail.com')) {
              erorMessage['email'] = 'Email must an google account (gmail.com)';
            }
          }
        },
        save: (id, inputValues) => Future(() async {
          // ignore: unused_local_variable
          var name = inputValues['name']!.getString()!;
          // ignore: unused_local_variable
          var email = inputValues['email']!.getString()!;

          await Future.delayed(Durations.extralong4);
        }),
        delete: (id) => Future(() async {
          await Future.delayed(Durations.extralong4);
        }),
      ),
    );
  }
}

Libraries

data_detail_page