Skip to content

Instantly share code, notes, and snippets.

@hongsw
Last active May 24, 2023 01:18
Show Gist options
  • Select an option

  • Save hongsw/3c8806164985fa8ccd8d0b09511ff68a to your computer and use it in GitHub Desktop.

Select an option

Save hongsw/3c8806164985fa8ccd8d0b09511ff68a to your computer and use it in GitHub Desktop.

Revisions

  1. hongsw revised this gist May 24, 2023. 1 changed file with 1 addition and 2 deletions.
    3 changes: 1 addition & 2 deletions main.dart
    Original file line number Diff line number Diff line change
    @@ -119,7 +119,7 @@ class FirstPage extends StatelessWidget {
    ),
    ],
    ),
    if (studentProfile.name.isNotEmpty)

    Card(
    child: Padding(
    padding: const EdgeInsets.all(8.0),
    @@ -134,7 +134,6 @@ class FirstPage extends StatelessWidget {
    ),
    ),
    ),
    if (engineerProfile.name.isNotEmpty)
    Card(
    child: Padding(
    padding: const EdgeInsets.all(8.0),
  2. hongsw created this gist May 16, 2023.
    336 changes: 336 additions & 0 deletions main.dart
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,336 @@

    import 'package:flutter/material.dart';

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

    class MyApp extends StatefulWidget {
    @override
    State<MyApp> createState() => _MyAppState();
    }

    class _MyAppState extends State<MyApp> {
    final userProfile = UserProfile(name: '', email: '');
    final studentProfile = StudentProfile(name: '', email: '', grade: 0);
    final engineerProfile = EngineerProfile(name: '', email: '', skill: '');

    void updateStudentProfile(StudentProfile profile) {
    setState(() {
    studentProfile.name = profile.name;
    studentProfile.email = profile.email;
    studentProfile.grade = profile.grade;
    });
    }

    void updateEngineerProfile(EngineerProfile profile) {
    setState(() {
    engineerProfile.name = profile.name;
    engineerProfile.email = profile.email;
    engineerProfile.skill = profile.skill;
    });
    }

    @override
    Widget build(BuildContext context) {
    return MaterialApp(
    title: 'Profile App',
    theme: ThemeData(
    primarySwatch: Colors.blue,
    ),
    initialRoute: '/',
    routes: {
    '/': (context) => FirstPage(
    studentProfile: studentProfile,
    engineerProfile: engineerProfile,
    ),
    '/studentProfileForm': (context) => StudentProfileForm(
    userProfile: userProfile,
    updateProfile: updateStudentProfile,
    ),
    '/engineerProfileForm': (context) => EngineerProfileForm(
    userProfile: userProfile,
    updateProfile: updateEngineerProfile,
    ),
    },
    );
    }
    }

    class UserProfile {
    String name;
    String email;

    UserProfile({required this.name, required this.email});
    }

    class StudentProfile extends UserProfile {
    int grade;

    StudentProfile({
    required String name,
    required String email,
    required this.grade,
    }) : super(name: name, email: email);
    }

    class EngineerProfile extends UserProfile {
    String skill;

    EngineerProfile({
    required String name,
    required String email,
    required this.skill,
    }) : super(name: name, email: email);
    }

    class FirstPage extends StatelessWidget {
    final StudentProfile studentProfile;
    final EngineerProfile engineerProfile;

    FirstPage({
    required this.studentProfile,
    required this.engineerProfile,
    });

    @override
    Widget build(BuildContext context) {
    return Scaffold(
    appBar: AppBar(
    title: Text('First Page'),
    ),
    body: Column(
    mainAxisAlignment: MainAxisAlignment.center,
    children: [
    Row(
    mainAxisAlignment: MainAxisAlignment.spaceEvenly,
    children: [
    ElevatedButton(
    onPressed: () {
    Navigator.pushNamed(context, '/studentProfileForm');
    },
    child: Text('Go to Student Page'),
    ),
    ElevatedButton(
    onPressed: () {
    Navigator.pushNamed(context, '/engineerProfileForm');
    },
    child: Text('Go to Engineer Page'),
    ),
    ],
    ),
    if (studentProfile.name.isNotEmpty)
    Card(
    child: Padding(
    padding: const EdgeInsets.all(8.0),
    child: Column(
    crossAxisAlignment: CrossAxisAlignment.start,
    children: [
    Text('Student Profile:'),
    Text('Name: ${studentProfile.name}'),
    Text('Email: ${studentProfile.email}'),
    Text('Grade: ${studentProfile.grade}'),
    ],
    ),
    ),
    ),
    if (engineerProfile.name.isNotEmpty)
    Card(
    child: Padding(
    padding: const EdgeInsets.all(8.0),
    child: Column(
    crossAxisAlignment: CrossAxisAlignment.start,
    children: [
    Text('Engineer Profile:'),
    Text('Name: ${engineerProfile.name}'),
    Text('Email: ${engineerProfile.email}'),
    Text('Skill: ${engineerProfile.skill}'),
    ],
    ),
    ),
    ),
    ],
    ),
    );
    }
    }

    class StudentProfileForm extends StatefulWidget {
    final UserProfile userProfile;
    final Function(StudentProfile) updateProfile;

    StudentProfileForm({
    Key? key,
    required this.userProfile,
    required this.updateProfile,
    }) : super(key: key);

    @override
    _StudentProfileFormState createState() => _StudentProfileFormState();
    }

    class _StudentProfileFormState extends State<StudentProfileForm> {
    final _formKey = GlobalKey<FormState>();
    final _studentProfile = StudentProfile(name: '', email: '', grade: 0);

    @override
    Widget build(BuildContext context) {
    return Scaffold(
    appBar: AppBar(
    title: Text('Student Profile'),
    ),
    body: Form(
    key: _formKey,
    child: Column(
    children: <Widget>[
    TextFormField(
    decoration: InputDecoration(labelText: 'Name'),
    validator: (value) {
    if (value == null || value.isEmpty) {
    return 'Please enter your name';
    }
    return null;
    },
    onSaved: (value) {
    setState(() {
    _studentProfile.name = value!;
    });
    },
    ),
    TextFormField(
    decoration: InputDecoration(labelText: 'Email'),
    validator: (value) {
    if (value == null || value.isEmpty) {
    return 'Please enter your email';
    }
    return null;
    },
    onSaved: (value) {
    setState(() {
    _studentProfile.email = value!;
    });
    },
    ),
    TextFormField(
    decoration: InputDecoration(labelText: 'Grade'),
    validator: (value) {
    if (value == null || value.isEmpty) {
    return 'Please enter your grade';
    }
    return null;
    },
    onSaved: (value) {
    setState(() {
    _studentProfile.grade = int.parse(value!);
    });
    },
    ),
    ElevatedButton(
    onPressed: () {
    if (_formKey.currentState!.validate()) {
    _formKey.currentState!.save();
    ScaffoldMessenger.of(context).showSnackBar(
    SnackBar(content: Text('Processing Data')),
    );
    widget.updateProfile(_studentProfile);
    Navigator.pop(context);
    }
    },
    child: Text('친구 신청'),
    ),
    ],
    ),
    ),
    );
    }
    }

    class EngineerProfileForm extends StatefulWidget {
    final UserProfile userProfile;
    final Function(EngineerProfile) updateProfile;

    EngineerProfileForm({
    Key? key,
    required this.userProfile,
    required this.updateProfile,
    }) : super(key: key);

    @override
    _EngineerProfileFormState createState() => _EngineerProfileFormState();
    }

    class _EngineerProfileFormState extends State<EngineerProfileForm> {
    final _formKey = GlobalKey<FormState>();
    final _engineerProfile = EngineerProfile(name: '', email: '', skill: '');

    @override
    Widget build(BuildContext context) {
    return Scaffold(
    appBar: AppBar(
    title: Text('Engineer Profile'),
    ),
    body: Form(
    key: _formKey,
    child: Column(
    children: <Widget>[
    TextFormField(
    decoration: InputDecoration(labelText: 'Name'),
    validator: (value) {
    if (value == null || value.isEmpty) {
    return 'Please enter your name';
    }
    return null;
    },
    onSaved: (value) {
    setState(() {
    _engineerProfile.name = value!;
    });
    },
    ),
    TextFormField(
    decoration: InputDecoration(labelText: 'Email'),
    validator: (value) {
    if (value == null || value.isEmpty) {
    return 'Please enter your email';
    }
    return null;
    },
    onSaved: (value) {
    setState(() {
    _engineerProfile.email = value!;
    });
    },
    ),
    TextFormField(
    decoration: InputDecoration(labelText: 'Skill'),
    validator: (value) {
    if (value == null || value.isEmpty) {
    return 'Please enter your field';
    }
    return null;
    },
    onSaved: (value) {
    setState(() {
    _engineerProfile.skill = value!;
    });
    },
    ),
    ElevatedButton(
    onPressed: () {
    if (_formKey.currentState!.validate()) {
    _formKey.currentState!.save();
    ScaffoldMessenger.of(context).showSnackBar(
    SnackBar(content: Text('Processing Data')),
    );
    widget.updateProfile(_engineerProfile);
    Navigator.pop(context);
    }
    },
    child: Text('친구 신청'),
    ),
    ],
    ),
    ),
    );
    }
    }
    3 changes: 3 additions & 0 deletions readme.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,3 @@
    # TextFormField + Class 예시

    Created with <3 with [dartpad.dev](https://dartpad.dev).