2022-10-14 10:36:34 +02:00
|
|
|
import 'package:flutter/material.dart';
|
2022-10-14 10:52:33 +02:00
|
|
|
import 'package:flutter_address_form/flutter_address_form.dart';
|
2022-10-14 10:36:34 +02:00
|
|
|
|
|
|
|
void main() {
|
|
|
|
runApp(const MyApp());
|
|
|
|
}
|
|
|
|
|
|
|
|
class MyApp extends StatelessWidget {
|
|
|
|
const MyApp({super.key});
|
|
|
|
|
|
|
|
// This widget is the root of your application.
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
return MaterialApp(
|
|
|
|
title: 'Flutter Demo',
|
|
|
|
theme: ThemeData(
|
|
|
|
// This is the theme of your application.
|
|
|
|
//
|
|
|
|
// Try running your application with "flutter run". You'll see the
|
|
|
|
// application has a blue toolbar. Then, without quitting the app, try
|
|
|
|
// changing the primarySwatch below to Colors.green and then invoke
|
|
|
|
// "hot reload" (press "r" in the console where you ran "flutter run",
|
|
|
|
// or simply save your changes to "hot reload" in a Flutter IDE).
|
|
|
|
// Notice that the counter didn't reset back to zero; the application
|
|
|
|
// is not restarted.
|
|
|
|
primarySwatch: Colors.blue,
|
|
|
|
),
|
2022-10-19 11:52:57 +02:00
|
|
|
home: AddressFormExample(),
|
2022-10-14 10:36:34 +02:00
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-10-14 10:52:33 +02:00
|
|
|
class AddressFormExample extends StatelessWidget {
|
2022-10-25 08:36:32 +02:00
|
|
|
AddressFormExample({super.key});
|
2022-10-19 11:52:57 +02:00
|
|
|
|
2022-10-25 08:36:32 +02:00
|
|
|
// final RegExp zipcodeRegExp = RegExp(r'^[1-9][0-9]{3}\s?[a-zA-Z]{2}$');
|
|
|
|
|
|
|
|
final _addressController = AddressController(
|
|
|
|
zipCodeValidator: (text) {
|
|
|
|
if (text.isEmpty) {
|
|
|
|
return 'Can\'t be empty';
|
|
|
|
}
|
|
|
|
if (!RegExp(r'^[1-9][0-9]{3}\s?[a-zA-Z]{2}$').hasMatch(text)) {
|
|
|
|
return 'Invalid zipcode';
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
},
|
|
|
|
housenumberValidator: (text) {
|
|
|
|
if (text.isEmpty) {
|
|
|
|
return 'Can\'t be empty';
|
|
|
|
}
|
|
|
|
if (text.length >= 3 || int.tryParse(text) == null) {
|
|
|
|
return 'Invalid number';
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
},
|
|
|
|
suffixValidator: (text) {
|
|
|
|
if (text.isNotEmpty && RegExp(r'/^[a-z]*$/').hasMatch(text)) {
|
|
|
|
return 'Invalid prefix';
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
},
|
|
|
|
streetValidator: (text) {
|
|
|
|
if (text.isEmpty) {
|
|
|
|
return 'Can\'t be empty';
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
},
|
|
|
|
onAutoComplete: (address) {
|
|
|
|
return address;
|
|
|
|
},
|
|
|
|
cityValidator: (text) {
|
|
|
|
if (text.isEmpty) {
|
|
|
|
return 'Can\'t be empty';
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
},
|
|
|
|
);
|
2022-10-14 10:36:34 +02:00
|
|
|
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
return Scaffold(
|
2022-10-14 10:52:33 +02:00
|
|
|
appBar: AppBar(),
|
2022-10-25 08:36:32 +02:00
|
|
|
body: Column(
|
|
|
|
children: [
|
|
|
|
AddressForm(
|
|
|
|
onSubmit: (value) => value, controller: _addressController),
|
|
|
|
TextButton(
|
2022-10-25 12:25:20 +02:00
|
|
|
onPressed: () {
|
|
|
|
_addressController.validate();
|
|
|
|
},
|
|
|
|
child: Text('Test'),
|
|
|
|
)
|
2022-10-25 08:36:32 +02:00
|
|
|
],
|
2022-10-19 11:52:57 +02:00
|
|
|
),
|
2022-10-14 10:36:34 +02:00
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|