typstrx 0.1.1 copy "typstrx: ^0.1.1" to clipboard
typstrx: ^0.1.1 copied to clipboard

Typst document viewer for Flutter, backed by the native Rust Typst compiler, with high-resolution viewport rendering, text selection, and link navigation.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:typstrx/typstrx.dart';

import 'page_view_example.dart';
import 'viewer_example.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Typstrx.init();
  // An app-specific cache directory keeps `@preview` package downloads
  // working on platforms without the standard Typst cache dir (Android).
  final cacheDir = await getApplicationCacheDirectory();
  final session = await TypstSession.create(
    options: TypstSessionOptions(
      packageCacheDir: '${cacheDir.path}/typst-packages',
    ),
  );
  runApp(ExampleApp(session: session));
}

enum _Example { viewer, pageView }

class ExampleApp extends StatefulWidget {
  const ExampleApp({super.key, required this.session});

  final TypstSession session;

  @override
  State<ExampleApp> createState() => _ExampleAppState();
}

class _ExampleAppState extends State<ExampleApp> {
  ThemeMode _themeMode = ThemeMode.system;
  _Example _example = _Example.viewer;

  void _setThemeMode(ThemeMode mode) => setState(() => _themeMode = mode);

  void _switchExample() => setState(() {
    _example = switch (_example) {
      _Example.viewer => _Example.pageView,
      _Example.pageView => _Example.viewer,
    };
  });

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'typstrx example',
      theme: ThemeData(
        colorSchemeSeed: Colors.indigo,
        brightness: Brightness.light,
      ),
      darkTheme: ThemeData(
        colorSchemeSeed: Colors.indigo,
        brightness: Brightness.dark,
      ),
      themeMode: _themeMode,
      home: switch (_example) {
        _Example.viewer => ViewerExamplePage(
          session: widget.session,
          themeMode: _themeMode,
          onThemeModeChanged: _setThemeMode,
          onSwitchExample: _switchExample,
        ),
        _Example.pageView => PageViewExamplePage(
          session: widget.session,
          themeMode: _themeMode,
          onThemeModeChanged: _setThemeMode,
          onSwitchExample: _switchExample,
        ),
      },
    );
  }
}
0
likes
160
points
111
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Typst document viewer for Flutter, backed by the native Rust Typst compiler, with high-resolution viewport rendering, text selection, and link navigation.

Repository (GitHub)
View/report issues

Topics

#typst #pdf #ffi #typesetting #code

License

Apache-2.0 (license)

Dependencies

flutter, flutter_rust_bridge, freezed_annotation, meta, plugin_platform_interface

More

Packages that depend on typstrx

Packages that implement typstrx