Skip to content

Instantly share code, notes, and snippets.

View ttlg's full-sized avatar
🤖
ChatGPT

Yota Ishikawa ttlg

🤖
ChatGPT
View GitHub Profile
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:todo_riverpod/view/simple_todo.dart';
void main() {
runApp(
ProviderScope(
child: MaterialApp(
home: SimpleTodo(),
),
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:todo_riverpod/entity/todo.dart';
import 'package:todo_riverpod/provider/todo_providers.dart';
import 'package:todo_riverpod/repository/todo_repository.dart';
class _TodoRepositoryImplDummy implements TodoRepository {
List<Todo> inMemoryTodoList = [];
useEffect(() {
ref.read(todoViewController).initState();
return ref.read(todoViewController).dispose;
}, []);
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:todo_riverpod/entity/todo.dart';
import 'package:todo_riverpod/provider/todo_providers.dart';
class TodoTile extends HookConsumerWidget {
final Todo todo;
const TodoTile({required this.todo});
final todoViewController =
Provider.autoDispose((ref) => TodoViewController(ref.read));
class TodoViewController {
final Reader _read;
TodoViewController(this._read);
Future<void> initState() async {
_read(_todoListState.notifier).state =
await _read(todoRepository).getTodoList();
final sortedTodoListState = StateProvider<List<Todo>?>((ref) {
final List<Todo>? todoList = ref.watch(_todoListState);
if (ref.watch(_sortOrderState) == SortOrder.ASC) {
todoList?.sort((a, b) => a.timestamp.compareTo(b.timestamp));
} else {
todoList?.sort((a, b) => b.timestamp.compareTo(a.timestamp));
}
return todoList;
});
enum SortOrder {
ASC,
DESC,
}
final _sortOrderState = StateProvider<SortOrder>((ref) => SortOrder.ASC);
final _todoListState = StateProvider<List<Todo>?>((ref) => null);
import 'dart:convert';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:todo_riverpod/entity/todo.dart';
final todoRepository =
Provider.autoDispose<TodoRepository>((ref) => TodoRepositoryImpl(ref.read));
abstract class TodoRepository {
class Todo {
final String content;
final bool done;
final DateTime timestamp;
final String id;
//<editor-fold desc="Data Methods">
Todo({
required this.content,