Flutter의 Todo 앱 샘플

11310 단어 todoDartFlutter

완성 이미지





코드



main 에 쓰고 있는 샘플입니다.

main.dart
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: TodoList(),
    );
  }
}

class TodoList extends StatefulWidget {
  @override
  TodoListState createState() => TodoListState();
}

class TodoListState extends State<TodoList> {
  List<String> _todoItems = ['task1', 'task2', 'task3', 'task4'];

  void _addTodoItem(String task) {
    if (task.length > 0) {
      setState(() => _todoItems.insert(0, task));
    }
  }

  Widget _buildTodoList() {
    return ListView.separated(
      itemCount: _todoItems.length,
      itemBuilder: (context, index) {
        return _buildTodoItem(
          context,
          _todoItems[index],
          index
        );
      },
      separatorBuilder: (context, index) {
        return Divider();
      },
    );
  }

  Widget _buildTodoItem(BuildContext context, String todoText, int index) {
    return Dismissible(
      // Show a red background as the item is swiped away.
      background: Container(color: Colors.red),
      key: Key(todoText),
      onDismissed: (direction) {
        setState(() {
          _todoItems.removeAt(index);
        });

        Scaffold
            .of(context)
            .showSnackBar(SnackBar(content: Text("$todoText dismissed")));
      },
      child: ListTile(title: Text(todoText)),
    );
  }

  Widget _floatingButton() {
    return FloatingActionButton(
      onPressed: () => {
        Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => Scaffold(
            appBar: AppBar(title: Text('New task'),),
            body: TextField(
              autofocus: true,
              onSubmitted: (val) {
                _addTodoItem(val);
                Navigator.pop(context);
              },
              decoration: InputDecoration(
                hintText: 'タスクをどうぞ',
                contentPadding: const EdgeInsets.all(16.0),
                )
              ),
            )
          )
        )
      },
      child: Icon(Icons.add)
    );
  }

  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Todo')),
      body: _buildTodoList(),
      floatingActionButton: _floatingButton(),
    );
  }
}

참고



htps : // 메이 m. 이 m / te-u-b-b-b / Makin-G-A-do-p-u-th-f r-5c63 b88190
htps // 푸시 r. 코 m / 쓰리 아 ls / f ぅ r ぃ st
htps : // f ぅ라고 r. v / cs / 코오 k 보오 k / 나 ぃ가 치온 / 나
htps : // f ぅ라고 r. v / 도 cs / 코오 k 보오 k / 게 s 얽힌 s / ぢ s 미시 b

좋은 웹페이지 즐겨찾기