Flutter会话管理插件session_mate的使用

Flutter会话管理插件session_mate的使用

Session Mate

Session Mate 是一款专为专业Flutter开发者设计的会话回放工具。它可以帮助你立即重现生产环境中的bug。

开发者指南

Firebase Emulator
flutter run --dart-define-from-file=assets/environments/development.emulator.json
Firebase Cloud
flutter run --dart-define-from-file=assets/environments/development.cloud.json
配置文件示例
{
  "APP_BASE_URL": "https://www.googleapis.com",
  "APP_USE_FAKE_DATA": false,
  "SESSION_MATE_API_KEY": "your-api-key",
  "SESSION_MATE_BASE_URL": "http://your.domain",
  "SESSION_MATE_INTEGRATION_TEST_BACKEND_ONLY": false,
  "SESSION_MATE_INTEGRATION_TEST_LOCAL_ONLY": false,
  "SESSION_MATE_INTEGRATION_TEST_UI_ONLY": false,
  "SESSION_MATE_INTEGRATION_TEST": false,
  "SESSION_MATE_LOG_NETWORK_EVENTS": false,
  "SESSION_MATE_LOG_RAW_NETWORK_EVENTS": false,
  "SESSION_MATE_RECORD_SESSION": true,
  "SESSION_MATE_REPLAY_SESSION": false,
  "SESSION_MATE_SANDBOX_MODE": false,
  "SESSION_MATE_VERBOSE_LOGS": false
}

示例代码

import 'dart:async';

import 'package:bookshelf/app/app.bottomsheets.dart';
import 'package:bookshelf/app/app.dialogs.dart';
import 'package:bookshelf/app/app.locator.dart';
import 'package:bookshelf/app/app.router.dart';
import 'package:flutter/material.dart';
import 'package:session_mate/session_mate.dart';
import 'package:stacked_services/stacked_services.dart';

const _apiKey = bool.hasEnvironment('SESSION_MATE_API_KEY')
    ? String.fromEnvironment('SESSION_MATE_API_KEY')
    : null;

const _logNetworkEvents =
    bool.fromEnvironment('SESSION_MATE_LOG_NETWORK_EVENTS');
const _logRawNetworkEvents =
    bool.fromEnvironment('SESSION_MATE_LOG_RAW_NETWORK_EVENTS');

Future<void> main() async {
  if (!kReplaySession) {
    WidgetsFlutterBinding.ensureInitialized();
  }

  await setupSessionMate();
  await setupLocator();
  setupDialogUi();
  setupBottomSheetUi();

  SessionMateCrashMonitor.monitor(const MainApp());
}

class MainApp extends StatelessWidget {
  const MainApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      initialRoute: Routes.startupView,
      onGenerateRoute: StackedRouter().onGenerateRoute,
      navigatorKey: StackedService.navigatorKey,
      navigatorObservers: [
        StackedService.routeObserver,
        SessionMateNavigatorObserver.instance,
      ],
      builder: (context, child) =&gt; SessionMateBuilder(
        apiKey: _apiKey,
        logNetworkEvents: _logNetworkEvents,
        logRawNetworkEvents: _logRawNetworkEvents,
        minimumStartupTime: 60000,
        verboseLogs: true,
        child: child!,
      ),
      theme: ThemeData(
        useMaterial3: true,
        brightness: Brightness.dark,
        textSelectionTheme: const TextSelectionThemeData(
          cursorColor: Colors.white,
        ),
        inputDecorationTheme: const InputDecorationTheme(
          border: InputBorder.none,
          filled: true,
          fillColor: Color(0FF232228),
        ),
        scaffoldBackgroundColor: const Color(0xFF113111B),
        textTheme: const TextTheme(
          bodyMedium: TextStyle(fontSize: 14),
          displayLarge: TextStyle(fontSize: 72, fontWeight: FontWeight.bold),
          titleLarge: TextStyle(fontSize: 26, fontWeight: FontWeight.bold),
          titleSmall: TextStyle(fontWeight: FontWeight.bold),
        ),
      ),
    );
  }
}

更多关于Flutter会话管理插件session_mate的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter会话管理插件session_mate的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用Flutter会话管理插件session_mate的代码示例。这个示例将展示如何初始化session_mate、存储会话数据、检索会话数据以及处理会话过期。

首先,确保你已经在pubspec.yaml文件中添加了session_mate依赖:

dependencies:
  flutter:
    sdk: flutter
  session_mate: ^最新版本号  # 替换为实际的最新版本号

然后运行flutter pub get来安装依赖。

初始化session_mate

在你的应用的主入口(通常是main.dart)中,初始化session_mate

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

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化SessionMate
  SessionMate.initialize(
    storage: StorageType.sharedPreferences, // 或者 StorageType.secureStorage
    keyPrefix: 'my_app_', // 可选的前缀,用于区分不同应用的会话数据
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

存储会话数据

在你的主页面(MyHomePage.dart)中,存储会话数据:

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

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  void _storeSessionData() async {
    await SessionMate.setString('user_id', '12345');
    await SessionMate.setString('user_name', 'John Doe');
    print('Session data stored.');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Session Management with session_mate'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _storeSessionData,
          child: Text('Store Session Data'),
        ),
      ),
    );
  }
}

检索会话数据

接下来,在你的页面中检索会话数据:

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

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String _userId = '';
  String _userName = '';

  void _storeSessionData() async {
    await SessionMate.setString('user_id', '12345');
    await SessionMate.setString('user_name', 'John Doe');
    print('Session data stored.');
    
    // 检索数据并更新UI
    _retrieveSessionData();
  }

  void _retrieveSessionData() async {
    String userId = await SessionMate.getString('user_id');
    String userName = await SessionMate.getString('user_name');
    
    setState(() {
      _userId = userId ?? '';
      _userName = userName ?? '';
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Session Management with session_mate'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: _storeSessionData,
              child: Text('Store Session Data'),
            ),
            SizedBox(height: 20),
            Text('User ID: $_userId'),
            SizedBox(height: 10),
            Text('User Name: $_userName'),
          ],
        ),
      ),
    );
  }
}

处理会话过期

虽然session_mate本身不直接处理会话过期逻辑,但你可以结合其他机制(如令牌过期时间检查)来实现。这里简单展示如何清除会话数据:

void _clearSessionData() async {
  await SessionMate.clear();
  setState(() {
    _userId = '';
    _userName = '';
  });
  print('Session data cleared.');
}

你可以在需要的地方调用_clearSessionData()函数来清除所有会话数据。

以上代码展示了如何在Flutter应用中使用session_mate插件进行会话管理,包括存储、检索和清除会话数据。你可以根据实际需求进一步扩展这些功能。

回到顶部