1. 메인화면 → FirstDetail.dart 보여주기

import "package:flutter/material.dart";
import "package:todolist_app/firstDetail.dart";
import "package:todolist_app/secondDetail.dart";
import "package:todolist_app/thirdDetail.dart";

void main() => runApp(const MyApp());

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "Todo List",
      initialRoute: "/",
      routes: {
        "/": (context) => const FirstDetail(title: "First Page"),
        "/second": (context) => const SecondDetail(title: "Second Page"),
        "/third": (context) => const ThirdDetail(title: "Third Page"),
      },
    );
  }
}

 

2. FirstDetail.dart : TO-DO List

import "package:flutter/material.dart";

class FirstDetail extends StatefulWidget {
  const FirstDetail({super.key, required this.title});

  final String title;

  @override
  State<StatefulWidget> createState() => _FirstDetail();
}

class _FirstDetail extends State<FirstDetail> {
  final List<String> _todoList = List.empty(growable: true);

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

    _todoList.add("당근 사오기");
    _todoList.add("약 사오기");
    _todoList.add("청소하기");
    _todoList.add("부모님께 전화하기");
  }

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text(widget.title)),
      body: ListView.builder(
          itemCount: _todoList.length,
          itemBuilder: (context, index) {
            return Card(
              child: InkWell(
                child: Text(
                  _todoList[index],
                  style: const TextStyle(fontSize: 30),
                ),
                onTap: () {
                  Navigator.of(context).pushNamed("/third", arguments: _todoList[index]);
                },
              ),
            );
          }),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          _addNavigation(context);
        },
        child: const Icon(Icons.add),
      ),
    );
  }

  void _addNavigation(BuildContext context) async {
    final result = await Navigator.of(context).pushNamed("/second");

    if (result != null) {
        print("----------------");
        print(result);
        print("----------------");
        setState(() {
          _todoList.add(result as String);
        });
    }
  }
}

 

3. SecondDetail.dart : TO-DO 추가

import "package:flutter/material.dart";

class SecondDetail extends StatefulWidget {
  const SecondDetail({super.key, required this.title});

  final String title;

  @override
  State<StatefulWidget> createState() => _SecondDetail();
}

class _SecondDetail extends State<SecondDetail> {
  final TextEditingController _textEditingController = TextEditingController();

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

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
          child: Column(
            children: <Widget>[
              TextField(
                controller: _textEditingController,
                keyboardType: TextInputType.text,
              ),
              ElevatedButton(
                  child: const Text("저장하기"),
                  onPressed: () {
                    Navigator.of(context).pop(_textEditingController.value.text);
                  })
        ],
      )),
    );
  }
}

 

4. ThirdDetail.dart : 상세 TO-DO 보기

import "package:flutter/material.dart";

class ThirdDetail extends StatefulWidget {
  const ThirdDetail({super.key, required this.title});

  final String title;

  @override
  State<StatefulWidget> createState() => _ThirdDetail();
}

class _ThirdDetail extends State<ThirdDetail> {
  @override
  void initState() {
    super.initState();
  }

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

  @override
  Widget build(BuildContext context) {
    final String args = ModalRoute.of(context)!.settings.arguments.toString();

    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Text(
          args,
          style: const TextStyle(fontSize: 30),
        ),
      ),
    );
  }
}