dynamic_multi_step_form 1.1.5 copy "dynamic_multi_step_form: ^1.1.5" to clipboard
dynamic_multi_step_form: ^1.1.5 copied to clipboard

A flutter package that render dynamic multi step form with different input field which is manage from API json response. This plugin supports both iOS and Android.

example/lib/main.dart

import 'package:dynamic_multi_step_form/dynamic_multi_step_form.dart';
import 'package:example/first_screen.dart';
import 'package:example/time_duration.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';

void main() async {
  // if you are using await in main function then add this line
  WidgetsFlutterBinding.ensureInitialized();
  // Restrict for portrait mode only
  await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
  //Custom local configuration for Input field setup
  TextFieldConfiguration textFieldConfiguration = TextFieldConfiguration(
      cursorColor: Colors.black,
      suffixIconColor: Colors.black,
      fillColor: Color(0xFFE1EFE7),
      textStyle: const TextStyle(color: Colors.black),
      hintStyle: const TextStyle(color: Colors.black, fontSize: 16),
      //contentPadding: const EdgeInsets.all(8),
      filled: true,
      border: const OutlineInputBorder(
          borderRadius: BorderRadius.all(Radius.circular(12)),
          borderSide: BorderSide(
            color: Colors.transparent,
          ) //BorderSide
          ),
      focusedBorder: const OutlineInputBorder(
          borderRadius: BorderRadius.all(Radius.circular(12)),
          borderSide: BorderSide(
            color: Colors.grey,
          ) //BorderSide
          ));

  //textFieldConfiguration.setBorder = const UnderlineInputBorder();
  ConfigurationSetting.instance.setTextFieldViewConfig = textFieldConfiguration;

  //Custom local configuration for tel Input field setup
  TelTextFieldConfiguration telTextFieldConfiguration =
      TelTextFieldConfiguration(
          cursorColor: Colors.yellow,
          suffixIconColor: Colors.black,
          fillColor: Color(0xFFE1EFE7),
          hintStyle: const TextStyle(color: Colors.black, fontSize: 16),
          filled: true,
          border: const OutlineInputBorder(
              borderRadius: BorderRadius.all(Radius.circular(12)),
              borderSide: BorderSide(
                color: Colors.transparent,
              ) //BorderSide
              ),
          focusedBorder: const OutlineInputBorder(
              borderRadius: BorderRadius.all(Radius.circular(12)),
              borderSide: BorderSide(
                color: Colors.grey,
              ) //BorderSide
              ));
  //telTextFieldConfiguration.setBorder = const UnderlineInputBorder();
  ConfigurationSetting.instance.setTelTextFieldViewConfig =
      telTextFieldConfiguration;

  RadioButtonConfiguration radioButtonConfiguration = RadioButtonConfiguration(
    labelAndRadioButtonAlign: LabelAndOptionsAlignment.vertical,
    radioButtonsAlign: LabelAndOptionsAlignment.vertical,
    labelTextStyle: const TextStyle(color: Colors.black, fontSize: 16),
    optionTextStyle: TextStyle(color: Colors.grey.shade800, fontSize: 14),
  );
  ConfigurationSetting.instance.setRadioButtonConfiguration =
      radioButtonConfiguration;

  CheckBoxConfiguration checkBoxConfiguration = CheckBoxConfiguration(
    labelAndRadioButtonAlign: LabelAndOptionsAlignment.vertical,
    optionsAlign: LabelAndOptionsAlignment.vertical,
    labelTextStyle: const TextStyle(color: Colors.black, fontSize: 16),
    optionTextStyle: TextStyle(
      color: Colors.grey.shade800,
      fontSize: 14,
    ),
  );
  ConfigurationSetting.instance.setCheckBoxConfiguration =
      checkBoxConfiguration;


  DropdownConfiguration dropdownConfiguration = DropdownConfiguration(
      rightArrow : const Icon(
        Icons.arrow_forward_ios_outlined,
      )
  );
  ConfigurationSetting.instance.setDropdownConfiguration =
      dropdownConfiguration;

  //Set load form from json
  ConfigurationSetting.instance.setLoadFromApi = true;


  PickImageViewConfiguration pickImageViewConfiguration = PickImageViewConfiguration(
    emptyImgView: Container(
height: 100,
      decoration: BoxDecoration(
          color: Colors.transparent,
          border: Border.all(width: 2,color: Colors.red)
      ),
      child: Center(
          child:Icon(Icons.upload)
      ),
    ),
  );

  ConfigurationSetting.instance.setPickImageViewConfigurationConfig = pickImageViewConfiguration;




  String? jsonString = "";
  runApp(MyApp(jsonString: jsonString));
}

class MyApp extends StatelessWidget {
  final String jsonString;

  const MyApp({this.jsonString = ""});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Dynamic Multi Step Form',
      theme: ThemeData(
        primarySwatch: Colors.green,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyForm(jsonString: jsonString),
      debugShowCheckedModeBanner: false,
    );
  }
}

class MyForm extends StatefulWidget {
  final String jsonString;

  const MyForm({this.jsonString = ""});

  @override
  _MyFormState createState() => _MyFormState(jsonString);
}

class _MyFormState extends State<MyForm> {
  String jsonString = "";
  bool isLoading = false;

  _MyFormState(this.jsonString) {
    if (kDebugMode) {
      print("$jsonString");
    }
  }

  @override
  void initState() {
    super.initState();
  }

  @override
  void dispose() {
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        backgroundColor: Colors.grey[200],
        appBar: AppBar(
          centerTitle: true,
          title: const Text('Dynamic Multi Step Form'),
        ),
        body: Center(
          child: Stack(
            alignment: Alignment.center,
            children: [
              isLoading
                  ? Container()
                  : SizedBox(
                      child: Column(
                        mainAxisSize: MainAxisSize.min,
                        children: [
                          OutlinedButton(
                            child: Text(
                                !ConfigurationSetting.instance.getLoadFromApi
                                    ? "Switch to always from API"
                                    : "Switch to always from local"),
                            onPressed: () async {
                              setState(() {
                                ConfigurationSetting.instance.setLoadFromApi =
                                    !ConfigurationSetting
                                        .instance.getLoadFromApi;
                              });
                            },
                          ),
                          const SizedBox(
                            height: 20,
                          ),
                          OutlinedButton(
                            child: const Text("Get Data"),
                            onPressed: () async {
                              timeDuration.startTimeDuration();
                              setState(() {
                                isLoading = true;
                              });
                              //get data which is stored in shared prefernce
                              String? jsonString = await ConfigurationSetting
                                  .instance
                                  .getFormDataLocal();
                              //if(jsonString!.isEmpty) {
                              // Comment this while get data from local json
                              //  String jsonStringResponse = await httpService.getPosts();

                              //== Uncomment while get data from local json
                              String jsonStringResponse =
                                  await localJsonRw.localRead();

                              jsonString = await ConfigurationSetting.instance
                                  .storeFormDataLocal(jsonStringResponse);
                              // }
                              setState(() {
                                isLoading = false;
                              });
                              String time = timeDuration.endTime(
                                  message: "Api calling", reset: true);
                              Navigator.push(
                                context,
                                MaterialPageRoute(
                                    builder: (context) => FirstScreen(
                                          jsonString: jsonString!,
                                          apiCallingTime: time,
                                        )),
                              );
                            },
                          ),
                        ],
                      ),
                    ),
              isLoading
                  ? const SizedBox(
                      height: 50, width: 50, child: CircularProgressIndicator())
                  : Container()
            ],
          ),
        ));
  }
}
43
likes
140
points
184
downloads

Publisher

verified publisherdexbytes.com

Weekly Downloads

A flutter package that render dynamic multi step form with different input field which is manage from API json response. This plugin supports both iOS and Android.

Homepage
Repository (GitHub)

Documentation

API reference

License

Apache-2.0 (license)

Dependencies

cached_network_image, country_code_picker, file, file_picker, flutter, flutter_barcode_scanner, image_pickers, intl, shared_preferences

More

Packages that depend on dynamic_multi_step_form