study-note

ライブラリ

目次

go_router

基本構文

import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';

void main() {
  final router = GoRouter(
    routes: [
      GoRoute(
        path: '/',
        builder: (context, state) => const HomePage(),
      ),
      GoRoute(
        path: '/detail/:id',
        builder: (context, state) {
          final id = state.params['id']!;
          return DetailPage(id: id);
        },
      ),
    ],
  );

  runApp(MyApp(router: router));
}

class MyApp extends StatelessWidget {
  final GoRouter router;
  const MyApp({super.key, required this.router});

  @override
  Widget build(BuildContext context) {
    return MaterialApp.router(
      routerConfig: router,
    );
  }
}

画面遷移操作

参照

web_socket_channel

基本構文

import 'package:web_socket_channel/web_socket_channel.dart';

void main() {
  final channel = WebSocketChannel.connect(
    Uri.parse('wss://echo.websocket.org'), // WebSocketサーバーのURL
  );

  // サーバーからのメッセージを受け取る
  channel.stream.listen((message) {
    print('受信: $message');
  });

  // サーバーにメッセージを送る
  channel.sink.add('Hello WebSocket');

  // 通信終了
  channel.sink.close();
}


provider


http

HTTPとは

Dartの非同期処理

import 'package:http/http.dart' as http;

void main() async {
  final url = Uri.parse('https://jsonplaceholder.typicode.com/todos/1');

  // 非同期通信
  final response = await http.get(url);

  print(response.statusCode); // 200
  print(response.body);       // レスポンスの内容
}

GET通信

final url = Uri.parse('https://jsonplaceholder.typicode.com/todos/1');
final response = await http.get(url);

if (response.statusCode == 200) {
  print('成功!レスポンス: ${response.body}');
} else {
  print('エラー: ${response.statusCode}');
}


POST通信

import 'dart:convert'; // JSON変換用

final url = Uri.parse('https://jsonplaceholder.typicode.com/posts');

final response = await http.post(
  url,
  headers: {'Content-Type': 'application/json'},
  body: jsonEncode({'title': 'Hello', 'body': 'World'}),
);

print(response.statusCode);
print(response.body);

レスポンス処理(JSONの扱い)

mysql1

基本構文

import 'package:mysql1/mysql1.dart';

void main() async {
  // 接続設定
  final settings = ConnectionSettings(
    host: 'localhost',
    port: 3306,
    user: 'user',
    password: 'password',
    db: 'test_db',
  );

  // 接続
  final conn = await MySqlConnection.connect(settings);

  // クエリ実行
  var results = await conn.query('SELECT id, name FROM users WHERE id = ?', [1]);
  for (var row in results) {
    print('ID: ${row[0]}, Name: ${row[1]}');
  }

  // 接続を閉じる
  await conn.close();
}

その他

shared_preferences

基本構文

import 'package:shared_preferences/shared_preferences.dart';

サンプルコード

class LoginViewModel {
  Future<void> saveLoginState(bool isLoggedIn) async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.setBool('isLoggedIn', isLoggedIn);
  }

  Future<bool> isUserLoggedIn() async {
    final prefs = await SharedPreferences.getInstance();
    return prefs.getBool('isLoggedIn') ?? false;
  }

  Future<void> logout() async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.remove('isLoggedIn');
  }
}

注意点

ListやMapの保存

そのままでは保存できないので、JSON文字列化して保存する

import 'dart:convert';

final prefs = await SharedPreferences.getInstance();
List<String> items = ['apple', 'banana', 'cherry'];

// 保存
await prefs.setString('items', jsonEncode(items));

// 取得
String? data = prefs.getString('items');
if (data != null) {
  List<String> restored = List<String>.from(jsonDecode(data));
  print(restored); // ['apple', 'banana', 'cherry']
}

hive

url_launcher

基本構文

import 'package:url_launcher/url_launcher.dart';

final Uri _url = Uri.parse("https://flutter.dev");

Future<void> openFlutterSite() async {
  if (await canLaunchUrl(_url)) {
    await launchUrl(_url);
  } else {
    throw '開けません: $_url';
  }
}

LaunchMode

await launchUrl(
  _url,
  mode: LaunchMode.inAppWebView, // アプリ内で表示
);

url_launcher_web

dio

path_provider

基本構文

import 'package:path_provider/path_provider.dart';
import 'dart:io';

void main() async {
  // ドキュメントディレクトリの取得
  final directory = await getApplicationDocumentsDirectory();
  print('Documents directory: ${directory.path}');

  // 一時ディレクトリの取得
  final tempDir = await getTemporaryDirectory();
  print('Temporary directory: ${tempDir.path}');

  // ファイル作成例
  final file = File('${directory.path}/example.txt');
  await file.writeAsString('Hello, Path Provider!');
  print(await file.readAsString());
}