

[Flutterの教科書](https://zenn.dev/flutteruniv/books/flutter-textbook)
内の「『チャット』【後編】』でチャットページ内で編集ボタン＋削除ボタンを追加する作業を行ってみたのですが、そのうちの投稿を削除する機能を作成使用した所、「delete」に赤い波線が出て、エラーが出てしまいました。教科書通りに進めたはずですが、このコードで間違っている点はあるのでしょうか？？

**エラーメッセージ:**

[code]

    The method 'delete' isn't defined for the type 'CollectionReference'.
    Try correcting the name to the name of an existing method, or defining a method named 'delete'.
    
[/code]

**ソースコード:**

[code]

    import 'package:chat_prime/firebase_options.dart';
    import 'package:chat_prime/my_page.dart';
    import 'package:chat_prime/post.dart';
    import 'package:cloud_firestore/cloud_firestore.dart';
    import 'package:firebase_auth/firebase_auth.dart';
    import 'package:firebase_core/firebase_core.dart';
    import 'package:flutter/material.dart';
    import 'package:google_sign_in/google_sign_in.dart';
    import 'package:intl/intl.dart';
    
    Future<void> main() async {
      // main 関数でも async が使えます
      WidgetsFlutterBinding.ensureInitialized(); // runApp 前に何かを実行したいときはこれが必要です。
      await Firebase.initializeApp(
        // これが Firebase の初期化処理です。
        options: DefaultFirebaseOptions.android,
      );
      runApp(const MyApp());
    }
    class MyApp extends StatelessWidget {
      const MyApp({super.key});
      @override
      Widget build(BuildContext context) {
        if(FirebaseAuth.instance.currentUser == null){
          return const MaterialApp(
            home: SignInPage(),
          );
        } else {
          return const MaterialApp(
            home: ChatPage(),
          );
        }
      }
    }
    
    class SignInPage extends StatefulWidget {
      const SignInPage({super.key});
    
      @override
      State<SignInPage> createState() => _SignInPageState();
    }
    
    class _SignInPageState extends State<SignInPage> {
      Future<void> signInWithGoogle() async {
        // GoogleSignIn をして得られた情報を Firebase と関連づけることをやっています。
        final googleUser = await GoogleSignIn(scopes: ['profile', 'email']).signIn();
    
        final googleAuth = await googleUser?.authentication;
    
        final credential = GoogleAuthProvider.credential(
          accessToken: googleAuth?.accessToken,
          idToken: googleAuth?.idToken,
        );
    
        await FirebaseAuth.instance.signInWithCredential(credential);
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: const Text('GoogleSignIn'),
          ),
          body: Center(
            child: ElevatedButton(
              child: const Text('GoogleSignIn'),
              onPressed: () async {
                await signInWithGoogle();
    
                if (mounted){
                   Navigator.of(context).pushAndRemoveUntil(
                      MaterialPageRoute(builder: (context) {
                        return const ChatPage();
                      }),
                      (route) => false,
                    );
                }
              },
            ),
          ),
        );
      }
    }
    
    final postsReference = FirebaseFirestore.instance.collection('posts').withConverter<Post>( // <> ここに変換したい型名をいれます。今回は Post です。
      fromFirestore: ((snapshot, _) { // 第二引数は使わないのでその場合は _ で不使用であることを分かりやすくしています。
        return Post.fromFirestore(snapshot); // 先ほど定期着した fromFirestore がここで活躍します。
      }),
      toFirestore: ((value, _) {
        return value.toMap(); // 先ほど適宜した toMap がここで活躍します。
      }),
    );
    
    class ChatPage extends StatefulWidget{
      const ChatPage({super.key});
      @override
      State<ChatPage> createState() => _ChatPageState();
    }
    
    class _ChatPageState extends State<ChatPage> {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: const Text('チャット'),
            actions: [
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: InkWell(
                  onTap: (){
                    Navigator.of(context).push(
                      MaterialPageRoute(builder: (context){
                        return const MyPage();
                      },)
                    );
                  },
                  child: CircleAvatar(
                      backgroundImage: NetworkImage(
                    FirebaseAuth.instance.currentUser!.photoURL!,
                  ),
                  ),
                ),
              ),
            ],
          ),
          body: Column(
            children: [
                Expanded(
                  child: StreamBuilder<QuerySnapshot<Post>>(
                      stream: postsReference.orderBy('createdAt').snapshots(),
                    builder: (context,snapshot) {
                      final docs =snapshot.data?.docs??[];
                      return ListView.builder(
                        itemCount: docs.length,
                        itemBuilder: (context,index){
                          final post = docs[index].data();
                          return PostWidget(post: post);
                        },
                      );
                    },
                  ),
                ),
                TextFormField
                (
                onFieldSubmitted: (text) {
                  final user = FirebaseAuth.instance.currentUser!;
    
                  final posterId = user.uid;
                  final posterName = user.displayName!;
                  final posterImageUrl = user.photoURL!;
    
                  final newDocumentReference = postsReference.doc();
    
                  final newPost = Post(
                    text: text,
                    createdAt: Timestamp.now(),
                    posterName: posterName,
                    posterImageUrl: posterImageUrl,
                    posterId: posterId,
                    reference: newDocumentReference,
                  );
                  newDocumentReference.set(newPost);
                },
              ),
            ],
          ),
        );
      }
    }
    
    class PostWidget extends StatelessWidget {
      const PostWidget({
        super.key,
        required this.post,
      });
    
      final Post post;
    
      @override
      Widget build(BuildContext context) {
        return Padding(
          padding: const EdgeInsets.all(8.0),
          child: Row(
            children: [
              CircleAvatar(
                backgroundImage: NetworkImage(post.posterImageUrl),
              ),
              const SizedBox(width: 8),
    
               Expanded(
               child: Column(
                 crossAxisAlignment: CrossAxisAlignment.start,
                 children: [
                   Row(
                     mainAxisAlignment: MainAxisAlignment.spaceBetween,
                     children: [
                       Text(
                         post.posterName,
                         style: const TextStyle(
                           fontWeight: FontWeight.bold,
                           fontSize: 12,
                         ),
                       ),
                       Text(
                         // toDate() で Timestamp から DateTime に変換できます。
                         DateFormat('MM/dd HH:mm').format(post.createdAt.toDate()),
                         style: const TextStyle(fontSize: 10),
                       ),
                     ],
                   ),
                  Container(
                    padding: const EdgeInsets.all(8),
                    decoration: BoxDecoration(
                      borderRadius: BorderRadius.circular(4),
                      color : FirebaseAuth.instance.currentUser!.uid == post.posterId ?
                       Colors.amber
                       : Colors.blue[100],
                    ),
                    child: Text(post.text),
                  ),
                  if(FirebaseAuth.instance.currentUser!.uid == post.posterId)
                  IconButton(
                    onPressed: (){},
                  icon: const Icon(Icons.edit),
                  ),
                  IconButton(
                    onPressed: (){
                      postsReference.delete();
                    },
                  icon: const Icon(Icons.delete),
                  ),
                 ],
               ),
             ),
           ],
         ),
       );
     }
    }
    
[/code]

[![現時点での状態](https://i.stack.imgur.com/OcU2w.jpg)](https://i.stack.imgur.com/OcU2w.jpg)


CC BY-SA 4.0
2023-06-22T07:47:25.623
95324
2023-06-22T08:04:02.540
2023-06-22T08:04:02.540
3060
54140
question
flutter
deleteを書いたはずなのに「delete」が定義されていないとエラーが出てしまう