Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions lib/model/entity/attend_status.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import 'package:freezed_annotation/freezed_annotation.dart';
// {ファイル名}.freezed.dart と書く
part 'generated/attend_status.freezed.dart';

//Freezed特有の書き方なので、スニペットを用意するのが良い
@freezed
class AttendStatus with _$AttendStatus {
const factory AttendStatus({
required bool attend,
}) = _AttendStatus;
}
129 changes: 129 additions & 0 deletions lib/model/entity/generated/attend_status.freezed.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion lib/model/entity/schedule_list.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import 'package:schetify/model/entity/schedule.dart';

import 'test_weather.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
// {ファイル名}.freezed.dart と書く
part 'generated/schedule_list.freezed.dart';
Expand Down
5 changes: 4 additions & 1 deletion lib/model/entity/schedule_update_page_util.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';

class ScheduleUpdatePageUtil {
final String tileName;
final String routeName;
final Icon? iconName;
final Consumer toggleConsumer;

ScheduleUpdatePageUtil(this.tileName, this.routeName, this.iconName);
ScheduleUpdatePageUtil(this.tileName, this.routeName, this.iconName,
this.toggleConsumer);
}
17 changes: 17 additions & 0 deletions lib/provider/attend_provider.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import 'package:hooks_riverpod/hooks_riverpod.dart';

import '../model/entity/attend_status.dart';


class AttendNotifier extends StateNotifier<AttendStatus> {
AttendNotifier() : super(const AttendStatus(attend: false));

changeAttend(bool flag){
state = state.copyWith(attend: flag);
}
}

final attendProvider = StateNotifierProvider<AttendNotifier
,AttendStatus>((ref) {
return AttendNotifier();
});
20 changes: 8 additions & 12 deletions lib/widget/components/schedule/sub_list_item.dart
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:schetify/widget/dialog/event_detail_dialog.dart';

class SubListItem extends StatelessWidget {
class SubListItem extends HookConsumerWidget {
final String title;
final Widget leading;
final String route;
final String toggle;
final Consumer toggleConsumer;
final String address;

SubListItem({required this.title, required this.leading, required this.route, required this.toggle, required this.address});
SubListItem({required this.title, required this.leading, required this.route,
required this.toggleConsumer, required this.address});

@override
Widget build(BuildContext context) {
Widget build(BuildContext context, WidgetRef ref) {
return ListTile(
title: Row(
mainAxisSize: MainAxisSize.min,
Expand Down Expand Up @@ -41,19 +43,13 @@ class SubListItem extends StatelessWidget {
)
)
}else{
Navigator.of(context).pushNamed(route)
Navigator.pushNamed(context,route)
}
},
// onLongPress: () => {},
trailing: Row(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Text(
toggle,
style: const TextStyle(
fontSize: 20,
),
),
toggleConsumer,
const SizedBox(
width: 50,
),
Expand Down
67 changes: 56 additions & 11 deletions lib/widget/page/schedule/common/schedule_update_page.dart
Original file line number Diff line number Diff line change
@@ -1,29 +1,74 @@
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:schetify/provider/attend_provider.dart';
import 'package:schetify/provider/settings_label_provider.dart';
import 'package:schetify/provider/splitting_the_cost_provider.dart';
import '../../../../model/entity/schedule_update_page_util.dart';
import '../../../components/schedule/sub_list_item.dart';

class ScheduleUpdatePage extends HookConsumerWidget {
ScheduleUpdatePage({Key? key}) : super(key: key);

final List<ScheduleUpdatePageUtil> util = <ScheduleUpdatePageUtil>[
ScheduleUpdatePageUtil("予定詳細", "detail", const Icon(Icons.details)),
ScheduleUpdatePageUtil("日にち設定", "/schedule/new/day", const Icon(Icons.calendar_today)),
ScheduleUpdatePageUtil("席分け設定", "/schedule/new/seat", const Icon(Icons.table_bar)),
ScheduleUpdatePageUtil("ラベル設定", "/schedule/new/label", const Icon(Icons.label)),
ScheduleUpdatePageUtil("割り勘設定", "/schedule/new/cost", const Icon(Icons.money)),
ScheduleUpdatePageUtil("目的地:", "/schedule/new/destination", const Icon(Icons.room),),
ScheduleUpdatePageUtil("アンケート設定", "/schedule/new/questionnaire", const Icon(Icons.feed)),
ScheduleUpdatePageUtil("出席", "", const Icon(Icons.confirmation_num)),
ScheduleUpdatePageUtil("シェア(URL)", "", const Icon(Icons.add_link)),
ScheduleUpdatePageUtil("予定詳細", "", const Icon(Icons.details),
Consumer(builder: (context, ref, _) {
return const Text("");
})),
ScheduleUpdatePageUtil("日にち設定", "/schedule/new/day", const Icon(Icons.calendar_today),
Consumer(builder: (context, ref, _) {
return const Text("");
})),
ScheduleUpdatePageUtil("席分け設定", "/schedule/new/seat", const Icon(Icons.table_bar),
Consumer(builder: (context, ref, _) {
return const Text("");
})),
ScheduleUpdatePageUtil("ラベル設定", "/schedule/new/label", const Icon(Icons.label),
Consumer(builder: (context, ref, _) {
var flag = ref.read(settingsLabelProvider);
if(flag.flag){
return const Text("ON");
}else{
return const Text("OFF");
}
})),
ScheduleUpdatePageUtil("割り勘設定", "/schedule/new/cost", const Icon(Icons.money),
Consumer(builder: (context, ref, _) {
var flag = ref.read(splittingTheCostProvider);
if(flag.flag){
return const Text("ON");
}else{
return const Text("OFF");
}
})),
ScheduleUpdatePageUtil("目的地:", "/schedule/new/destination", const Icon(Icons.room),
Consumer(builder: (context, ref, _) {
return const Text("");
})),
ScheduleUpdatePageUtil("アンケート設定", "/schedule/new/questionnaire", const Icon(Icons.feed),
Consumer(builder: (context, ref, _) {
return const Text("");
})),
ScheduleUpdatePageUtil("出席", "", const Icon(Icons.confirmation_num),
Consumer(builder: (context, ref, _) {
var flag = ref.read(attendProvider);
if(flag.attend){
return const Text("ON");
}else{
return const Text("OFF");
}
})),
ScheduleUpdatePageUtil("シェア(URL)", "", const Icon(Icons.add_link),
Consumer(builder: (context, ref, _) {
return const Text("");
})),
];

// tentative variable
String toggleState = "ON";
String address = "東京都世田谷区北沢3丁目23−14";

@override
Widget build(BuildContext context, WidgetRef ref) {

return Scaffold(
appBar: AppBar(
title: const Text("予定作成&編集"),
Expand Down Expand Up @@ -71,7 +116,7 @@ class ScheduleUpdatePage extends HookConsumerWidget {
child: util[index].iconName,
),
route: util[index].routeName,
toggle: util[index].tileName == '出席' ? toggleState : '',
toggleConsumer: util[index].toggleConsumer,
address: util[index].tileName == '目的地:' ? address : '',
);
},
Expand Down