Skip to content

Instantly share code, notes, and snippets.

View ttlg's full-sized avatar
🤖
ChatGPT

Yota Ishikawa ttlg

🤖
ChatGPT
View GitHub Profile
@ttlg
ttlg / shared_preferences_client.dart
Last active July 21, 2021 16:40
SharedPreferencesClient
import 'dart:convert';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:shared_preferences/shared_preferences.dart';
final sharedPreferencesClient = Provider((ref) => SharedPreferencesClient());
class SharedPreferencesClient {
Future<List<Map<String, dynamic>>> getJsonList(String key) async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
@ttlg
ttlg / todo.dart
Created September 5, 2020 06:27
todo
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:flutter/foundation.dart';
part 'todo.freezed.dart';
part 'todo.g.dart';
@freezed
abstract class Todo with _$Todo {
const factory Todo(
String content, bool done, DateTime timestamp, String uid) = _Todo;
@ttlg
ttlg / todo_repository.dart
Created September 5, 2020 06:28
todo_repository
import 'package:architect_test/client/shared_preferences_client.dart';
import 'package:architect_test/entity/todo.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
final todoRepository =
Provider.autoDispose<TodoRepository>((ref) => TodoRepositoryImpl(ref.read));
abstract class TodoRepository {
Future<List<Todo>> getTodos();
Future<void> saveTodos(List<Todo> todos);
@ttlg
ttlg / todo_providers.dart
Created September 5, 2020 06:31
sorted todos
final sortedTodos = StateProvider<List<Todo>>((ProviderReference ref) {
final List<Todo> todos = ref.watch(_todos).state;
final SortOrder sortOrder = ref.watch(_sortOrder).state;
if (sortOrder == SortOrder.ASC) {
todos?.sort((a, b) => a.timestamp.compareTo(b.timestamp));
} else {
todos?.sort((a, b) => b.timestamp.compareTo(a.timestamp));
}
return todos;
@ttlg
ttlg / todo_providers.dart
Created September 5, 2020 06:32
sort order
enum SortOrder {
ASC,
DESC,
}
final _sortOrder = StateProvider.autoDispose((ref) => SortOrder.ASC); 
final _todos = StateProvider.autoDispose<List<Todo>>((ref) => null);
@ttlg
ttlg / todo_providers.dart
Created September 5, 2020 06:34
TodosViewController
final todosViewController =
Provider.autoDispose((ref) => TodosViewController(ref.read));
class TodosViewController {
final Reader read;
TodosViewController(this.read);
void initState() async {
read(_todos).state = await read(todoRepository).getTodos();
}
@ttlg
ttlg / todo_view.dart
Created September 5, 2020 06:35
todo_view
import 'package:architect_test/entity/todo.dart';
import 'package:architect_test/provider/todo_providers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
final _currentTodo = ScopedProvider<Todo>(null);
class TodoTile extends HookWidget {
const TodoTile();
@ttlg
ttlg / todo_view.dart
Created September 5, 2020 06:36
todo view useEffect
useEffect(() {
context.read(todosViewController).initState();
return context.read(todosViewController).dispose;
}, []);
@ttlg
ttlg / main.dart
Created September 5, 2020 06:37
main.dart
import 'package:architect_test/view/my_simple_todo.dart';
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
void main() {
runApp(
ProviderScope(
child: MaterialApp(
home: MySimpleTodo(),
),