質問編集履歴

3

ChangeNotifierモデルを追加しました。

2022/08/30 03:37

投稿

my0930
my0930

スコア19

test CHANGED
File without changes
test CHANGED
@@ -22,7 +22,35 @@
22
22
 
23
23
  ### 該当のソースコード
24
24
 
25
- ```Flutter
25
+ ```model
26
+ import 'package:cloud_firestore/cloud_firestore.dart';
27
+ import 'package:flutter/foundation.dart';
28
+ import 'package:main/model/history.dart';
29
+ import 'package:provider/provider.dart';
30
+
31
+ class AddWorkModel extends ChangeNotifier {
32
+ String? workerName;
33
+ String? workName;
34
+ bool? complite;
35
+ int? manHour;
36
+ int? phase;
37
+ Timestamp? startTime;
38
+
39
+ Future addWork() async {
40
+ FirebaseFirestore.instance.collection("nowWork").add({
41
+ "complite": false,
42
+ "manHour": "",
43
+ "phase": 1,
44
+ "workerName": "",
45
+ "workName": workName,
46
+ "startTime": Timestamp.now(),
47
+ });
48
+ }
49
+ }
50
+ ```
51
+
52
+
53
+ ```page
26
54
  import 'package:cloud_firestore/cloud_firestore.dart';
27
55
  import 'package:flutter/material.dart';
28
56
  import 'package:flutter/src/foundation/key.dart';

2

ソースコード追加しました。試したことを追加しました。

2022/08/29 01:00

投稿

my0930
my0930

スコア19

test CHANGED
File without changes
test CHANGED
@@ -17,20 +17,170 @@
17
17
  ### 発生している問題・エラーメッセージ
18
18
 
19
19
  ラジオリストのvalueの変数をElevatedbutton内のConsumerウィジェットに入れられない。
20
-
20
+ _currentnameがnullになってしまう。
21
21
 
22
22
 
23
23
  ### 該当のソースコード
24
24
 
25
- ```ここに言語名を入力
25
+ ```Flutter
26
+ import 'package:cloud_firestore/cloud_firestore.dart';
27
+ import 'package:flutter/material.dart';
28
+ import 'package:flutter/src/foundation/key.dart';
29
+ import 'package:flutter/src/widgets/framework.dart';
30
+ import 'package:main/model/add_work_model.dart';
31
+ import 'package:main/model/work_list.dart';
32
+ import 'package:provider/provider.dart';
33
+
34
+ import '../../model/work_list_model.dart';
35
+
36
+ class InstructionPage extends StatefulWidget {
37
+ const InstructionPage({Key? key}) : super(key: key);
38
+
39
+ @override
40
+ State<InstructionPage> createState() => _InstructionPageState();
41
+ }
42
+
43
+ class _InstructionPageState extends State<InstructionPage> {
44
+ String _currentname = "";
45
+ @override
46
+ Widget build(BuildContext context) {
47
+ return ChangeNotifierProvider<WorkListModel>(
48
+ create: (_) => WorkListModel()..fetchWorkList(),
49
+ child: Scaffold(
50
+ appBar: AppBar(
51
+ title: Text("指示選択"),
52
+ ),
53
+ body: Column(
54
+ mainAxisAlignment: MainAxisAlignment.center,
55
+ children: [
56
+ Card(
57
+ margin: const EdgeInsets.all(30),
58
+ elevation: 8,
59
+ shadowColor: Colors.black,
60
+ shape: RoundedRectangleBorder(
61
+
62
+ borderRadius: BorderRadius.circular(10),
63
+ ),
64
+ child: Column(
65
+ children: const [
66
+ ListTile(
67
+ leading: CircleAvatar(
68
+ backgroundImage: NetworkImage(""),
69
+ ),
70
+ title: Text("name"),
71
+ subtitle: Text("subtilte"),
72
+ ),
73
+ ],
74
+ ),
75
+ ),
76
+ ChangeNotifierProvider<WorkListModel>(
77
+ create: (_) => WorkListModel()..fetchWorkList(),
78
+ child: SizedBox(
79
+ height: 300,
80
+ child: Center(child:
81
+ Consumer<WorkListModel>(builder: (context, model, child) {
82
+ final works = model.works;
83
+
84
+ if (works == null) {
85
+ return const CircularProgressIndicator();
86
+ }
87
+
88
+ final List<Widget> widgets = works
89
+ .map((workname) => RadioListTile<dynamic>(
90
+ groupValue: _currentname,
91
+ title: Text(workname.name),
92
+ value: workname.name,
93
+ onChanged: (value) {
94
+ setState(() {
95
+ debugPrint('workname = $value');
96
+ _currentname = value!;
97
+ });
98
+ },
99
+ ))
100
+ .toList();
101
+ return ListView(children: widgets);
102
+ })),
103
+ ),
104
+ ),
105
+ ChangeNotifierProvider<AddWorkModel>(
106
+ create: (_) => AddWorkModel(),
107
+ child: Container(child: Consumer<AddWorkModel>(
108
+ builder: ((context, model, child) {
109
+ return ElevatedButton(
110
+ child: const Text("決定"),
111
+ onPressed: () async {
112
+ try {
113
+ await model.addWork();
114
+ ScaffoldMessenger.of(context)
115
+ .showSnackBar(SnackBar(
116
+ behavior: SnackBarBehavior.floating,
117
+ content: Text("指示が飛ばされました!"),
118
+ action: SnackBarAction(
119
+ label: "OK",
120
+ onPressed: () async {
121
+ print('SnackBarActionをクリックしました');
122
+ Navigator.of(context).pop();
123
+ },
124
+ )));
125
+ await FirebaseFirestore.instance
126
+ .collection("nowWork")
26
- ソースコード
127
+ .add({
128
+ "workName": "$_currentname",
129
+ "complite": false,
130
+ "manHour": int.parse(""),
131
+ "phase": 1,
132
+ });
133
+ if (_currentname == "掃除") {
134
+ await FirebaseFirestore.instance
135
+ .collection("clean_history")
136
+ .add({
137
+ "workName": "$_currentname",
138
+ "complite": false,
139
+ "manHour": int.parse(""),
140
+ "phase": 1,
141
+ });
142
+ } else if (_currentname == "休憩") {
143
+ await FirebaseFirestore.instance
144
+ .collection("clean_history")
145
+ .add({
146
+ "workName": "$_currentname",
147
+ "complite": false,
148
+ "manHour": int.parse(""),
149
+ "phase": 1,
150
+ });
151
+ } else if (_currentname == "プログラム") {
152
+ await FirebaseFirestore.instance
153
+ .collection("clean_history")
154
+ .add({
155
+ "workName": "$_currentname",
156
+ "complite": false,
157
+ "manHour": int.parse(""),
158
+ "phase": 1,
159
+ });
160
+ } else if (_currentname == "ピッキング") {}
161
+ } catch (e) {
162
+ print("$e==保存エラーです。");
163
+ CircularProgressIndicator();
164
+ }
165
+ });
166
+ }),
167
+ )))
168
+ ],
169
+ ),
170
+ ));
171
+ }
172
+ }
173
+
174
+
27
175
  ```
28
176
 
29
177
  ### 試したこと
30
178
 
179
+ 実際にfirebaseに登録されるものの
180
+ _currentname がnullとなっています。
31
- ここ問題に対して試したこと記載しください。
181
+ 初期化時の値文字列入れも入ってません
32
182
 
33
183
  ### 補足情報(FW/ツールのバージョンなど)
184
+ Fluter 3.0.5
185
+ vscode
34
186
 
35
- ここにより詳細な情報を記載してください。
36
-

1

タイトル

2022/08/26 04:39

投稿

my0930
my0930

スコア19

test CHANGED
@@ -1 +1 @@
1
- RadioListTileで選択した項目をfirebaseに登録する方法
1
+ 【Flutter】RadioListTileで選択した項目をfirebaseに登録する方法
test CHANGED
File without changes