🧩

Serverpod 1.0.0覚え書き 7

2023/03/20に公開

今日の課題はここ

https://github.com/afzalali15/artikool
これはServerpodの公式ではなく、公式で推奨されているtutorialの動画を撮っているCodeXの人のGitHub。動画のFlutter部分があまりにはしょられていたので、こっちまで見にきたのだけれど、そもそも動画と違うじゃないの。というかよく聞くと、「もっといろいろやりたい人はGitHubを見ろ」と動画の中でも言っている。まあよい。このコードを読みながら、どこまで自分のやりたいことができるか試してみよう。

できたこと

前回Flutterから入力したデータを、今回は読み出して表示する。以前のようにタイムアウトにもならずに、うまく読み出して、Listに表示できた。slidableで削除もできた。これらに関して、backendを触る必要はない。(もう設定済みだから、という意味)

コードはこんな感じ

newpod/newpod_flutter/lib/read_all.dart
import 'package:newpod_client/newpod_client.dart';
import 'package:flutter/material.dart';
import 'package:serverpod_flutter/serverpod_flutter.dart';
import 'package:flutter_slidable/flutter_slidable.dart';

var client = Client('http://localhost:8080/')
  ..connectivityMonitor = FlutterConnectivityMonitor();

class ReadAllPage extends StatefulWidget {
  const ReadAllPage({Key? key, required this.title}) : super(key: key);
  final String title;

  
  State<ReadAllPage> createState() => ReadAllPageState();
}

class ReadAllPageState extends State<ReadAllPage> {

  List<Principal> _principal = [];
  
  
  void initState(){
    super.initState();
    fetchPrincipal();
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Expanded(
        child: ListView.builder(
          itemCount: _principal.length,
          itemBuilder: (context, index) {
            return Slidable(
              endActionPane: ActionPane(
                motion: const ScrollMotion(),
                children: [
                  SlidableAction(
                    onPressed: (context) {
                      deletePrincipal(_principal[index].id!);
                    },
                    icon: Icons.delete,
                    label: 'Delete',
                    ),
                ],
                ),
                child: ListTile(
                  leading: Text(_principal[index].year),
                  title: Text(_principal[index].event),
                  subtitle: Text(_principal[index].country),
                ),
            );
	  },
        ),
      ),
    );
  }

  fetchPrincipal() async {
    try {
      _principal = await client.newpod.getPrincipal();
      setState(() {
      });
    }
    on Exception catch (e) {
      debugPrint('$e');
    }
  }

    deletePrincipal(int id) async {
    try {
      var result = await client.newpod.deletePrincipal(id);
      debugPrint('Delete principal status : $result');

      fetchPrincipal();
    } on Exception catch (e) {
      debugPrint('$e');
    }
  }
}

できていないこと

  • yearをintにすること。(なぜできないかもわかっていない)
  • yearでORDER BY すること。intじゃないので、ちゃんと並ばない。

ともかく、前進あるのみ。

Flutter大学

Discussion