Skip to content

Instantly share code, notes, and snippets.

View rizumita's full-sized avatar
🏠
Working from home

Ryoichi Izumita rizumita

🏠
Working from home
View GitHub Profile
testWidget('my test', (tester) async {
final robot = MyWidgetRobot(tester);
await robot.show();
await robot.tapHelloWorldButton();
robot.expectHelloWorldAppears();
});
testWidget('my test', (tester) async {
await tester.pumpWidget(MaterialApp(home: MyWidget()));
await tester.tap(find.byKey(const Key('my_widget_key')));
await tester.pumpAndSettle();
expect(find.text('Hello, World!'), findsOneWidget);
});
@rizumita
rizumita / using_usereducer_with_storeinjector.dart
Created October 18, 2023 22:17
Using useReducer with StoreInjector
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:use_reducer_example/store_injector.dart';
import 'reducer.dart';
final itemsForDropdown1 = ['A', 'B', 'C'];
final itemsForDropdown2 = ['1', '2', '3'];
class MyFormUseReducerWithStoreInjectorView extends HookWidget {
@rizumita
rizumita / store_injector.dart
Created October 18, 2023 22:16
StoreInjector
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
typedef Aspect<State> = bool Function(State oldState, State newState);
typedef ListenState<State, Selected> = Selected Function(State state);
bool unaspect(dynamic oldState, dynamic newState) => false;
class StoreInjector<State, Action> extends StatelessWidget {
const StoreInjector({super.key, required this.store, required this.child});
@rizumita
rizumita / reducer.dart
Created October 18, 2023 22:15
reducer
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
class MyFormState extends Equatable {
const MyFormState(
this.formKey,
this.textInputController, [
this.dropdown1Value,
this.textInput,
@rizumita
rizumita / using-usereducer.dart
Created October 18, 2023 22:14
Using useReducer code
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:use_reducer_example/reducer.dart';
final itemsForDropdown1 = ['A', 'B', 'C'];
final itemsForDropdown2 = ['1', '2', '3'];
class MyFormUseReducerView extends HookWidget {
const MyFormUseReducerView({super.key});
@rizumita
rizumita / not-using-usereducer.dart
Created October 18, 2023 22:12
Not using useReducer
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:use_reducer_example/reducer.dart';
final itemsForDropdown1 = ['A', 'B', 'C'];
final itemsForDropdown2 = ['1', '2', '3'];
enum Stage { dropdown1, textInput, dropdown2, finished }
class MyFormUseStateView extends HookWidget {
@rizumita
rizumita / dvorakjp.lua
Last active September 4, 2022 08:33
Hammerspoon DvorakJP config
local function Split (inputstr, sep)
if sep == nil then
sep = "%s"
end
local t={}
for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
table.insert(t, str)
end
return t
end
import 'package:flutter/material.dart';
const Color darkBlue = Color.fromARGB(255, 18, 32, 47);
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
"macros": {
"commentLine": [
"editor.action.commentLine",
"cursorDown"
]
}