Showing preview only (2,170K chars total). Download the full file or copy to clipboard to get everything.
Repository: thlorenz/rid-examples
Branch: master
Commit: aa617bb459fa
Files: 631
Total size: 1.9 MB
Directory structure:
gitextract_k9gs7ue9/
├── .github/
│ └── FUNDING.yml
├── .gitignore
├── README.md
├── dart/
│ └── todo/
│ ├── .gitignore
│ ├── Cargo.toml
│ ├── README.md
│ ├── lib/
│ │ └── main.dart
│ ├── pubspec.yaml
│ ├── rid_build.rs
│ ├── sh/
│ │ ├── build
│ │ └── run
│ └── src/
│ └── app.rs
└── flutter/
├── reddit_ticker/
│ ├── .gitignore
│ ├── Cargo.toml
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── reddit_ticker/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ ├── reddit_ticker_android.iml
│ │ └── settings.gradle
│ ├── deps/
│ │ └── charts/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTING.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── charts_common/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── charts_common.gwsq
│ │ │ ├── lib/
│ │ │ │ ├── common.dart
│ │ │ │ └── src/
│ │ │ │ ├── chart/
│ │ │ │ │ ├── bar/
│ │ │ │ │ │ ├── bar_chart.dart
│ │ │ │ │ │ ├── bar_error_decorator.dart
│ │ │ │ │ │ ├── bar_label_decorator.dart
│ │ │ │ │ │ ├── bar_lane_renderer.dart
│ │ │ │ │ │ ├── bar_lane_renderer_config.dart
│ │ │ │ │ │ ├── bar_renderer.dart
│ │ │ │ │ │ ├── bar_renderer_config.dart
│ │ │ │ │ │ ├── bar_renderer_decorator.dart
│ │ │ │ │ │ ├── bar_target_line_renderer.dart
│ │ │ │ │ │ ├── bar_target_line_renderer_config.dart
│ │ │ │ │ │ ├── base_bar_renderer.dart
│ │ │ │ │ │ ├── base_bar_renderer_config.dart
│ │ │ │ │ │ └── base_bar_renderer_element.dart
│ │ │ │ │ ├── cartesian/
│ │ │ │ │ │ ├── axis/
│ │ │ │ │ │ │ ├── axis.dart
│ │ │ │ │ │ │ ├── axis_tick.dart
│ │ │ │ │ │ │ ├── collision_report.dart
│ │ │ │ │ │ │ ├── draw_strategy/
│ │ │ │ │ │ │ │ ├── base_tick_draw_strategy.dart
│ │ │ │ │ │ │ │ ├── gridline_draw_strategy.dart
│ │ │ │ │ │ │ │ ├── none_draw_strategy.dart
│ │ │ │ │ │ │ │ ├── range_tick_draw_strategy.dart
│ │ │ │ │ │ │ │ ├── small_tick_draw_strategy.dart
│ │ │ │ │ │ │ │ └── tick_draw_strategy.dart
│ │ │ │ │ │ │ ├── end_points_tick_provider.dart
│ │ │ │ │ │ │ ├── linear/
│ │ │ │ │ │ │ │ ├── bucketing_numeric_axis.dart
│ │ │ │ │ │ │ │ ├── bucketing_numeric_tick_provider.dart
│ │ │ │ │ │ │ │ ├── linear_scale.dart
│ │ │ │ │ │ │ │ ├── linear_scale_domain_info.dart
│ │ │ │ │ │ │ │ ├── linear_scale_function.dart
│ │ │ │ │ │ │ │ └── linear_scale_viewport.dart
│ │ │ │ │ │ │ ├── numeric_extents.dart
│ │ │ │ │ │ │ ├── numeric_scale.dart
│ │ │ │ │ │ │ ├── numeric_tick_provider.dart
│ │ │ │ │ │ │ ├── ordinal_extents.dart
│ │ │ │ │ │ │ ├── ordinal_scale.dart
│ │ │ │ │ │ │ ├── ordinal_scale_domain_info.dart
│ │ │ │ │ │ │ ├── ordinal_tick_provider.dart
│ │ │ │ │ │ │ ├── range_axis_tick.dart
│ │ │ │ │ │ │ ├── range_tick.dart
│ │ │ │ │ │ │ ├── range_tick_provider.dart
│ │ │ │ │ │ │ ├── scale.dart
│ │ │ │ │ │ │ ├── simple_ordinal_scale.dart
│ │ │ │ │ │ │ ├── spec/
│ │ │ │ │ │ │ │ ├── axis_spec.dart
│ │ │ │ │ │ │ │ ├── bucketing_axis_spec.dart
│ │ │ │ │ │ │ │ ├── date_time_axis_spec.dart
│ │ │ │ │ │ │ │ ├── end_points_time_axis_spec.dart
│ │ │ │ │ │ │ │ ├── numeric_axis_spec.dart
│ │ │ │ │ │ │ │ ├── ordinal_axis_spec.dart
│ │ │ │ │ │ │ │ ├── percent_axis_spec.dart
│ │ │ │ │ │ │ │ ├── range_tick_spec.dart
│ │ │ │ │ │ │ │ └── tick_spec.dart
│ │ │ │ │ │ │ ├── static_tick_provider.dart
│ │ │ │ │ │ │ ├── tick.dart
│ │ │ │ │ │ │ ├── tick_formatter.dart
│ │ │ │ │ │ │ ├── tick_provider.dart
│ │ │ │ │ │ │ └── time/
│ │ │ │ │ │ │ ├── auto_adjusting_date_time_tick_provider.dart
│ │ │ │ │ │ │ ├── base_time_stepper.dart
│ │ │ │ │ │ │ ├── date_time_axis.dart
│ │ │ │ │ │ │ ├── date_time_extents.dart
│ │ │ │ │ │ │ ├── date_time_scale.dart
│ │ │ │ │ │ │ ├── date_time_tick_formatter.dart
│ │ │ │ │ │ │ ├── day_time_stepper.dart
│ │ │ │ │ │ │ ├── hour_tick_formatter.dart
│ │ │ │ │ │ │ ├── hour_time_stepper.dart
│ │ │ │ │ │ │ ├── minute_time_stepper.dart
│ │ │ │ │ │ │ ├── month_time_stepper.dart
│ │ │ │ │ │ │ ├── simple_time_tick_formatter.dart
│ │ │ │ │ │ │ ├── time_range_tick_provider.dart
│ │ │ │ │ │ │ ├── time_range_tick_provider_impl.dart
│ │ │ │ │ │ │ ├── time_stepper.dart
│ │ │ │ │ │ │ ├── time_tick_formatter.dart
│ │ │ │ │ │ │ ├── time_tick_formatter_impl.dart
│ │ │ │ │ │ │ └── year_time_stepper.dart
│ │ │ │ │ │ ├── cartesian_chart.dart
│ │ │ │ │ │ └── cartesian_renderer.dart
│ │ │ │ │ ├── common/
│ │ │ │ │ │ ├── base_chart.dart
│ │ │ │ │ │ ├── behavior/
│ │ │ │ │ │ │ ├── a11y/
│ │ │ │ │ │ │ │ ├── a11y_explore_behavior.dart
│ │ │ │ │ │ │ │ ├── a11y_node.dart
│ │ │ │ │ │ │ │ ├── domain_a11y_explore_behavior.dart
│ │ │ │ │ │ │ │ └── keyboard_domain_navigator.dart
│ │ │ │ │ │ │ ├── calculation/
│ │ │ │ │ │ │ │ └── percent_injector.dart
│ │ │ │ │ │ │ ├── chart_behavior.dart
│ │ │ │ │ │ │ ├── chart_title/
│ │ │ │ │ │ │ │ └── chart_title.dart
│ │ │ │ │ │ │ ├── domain_highlighter.dart
│ │ │ │ │ │ │ ├── domain_outliner.dart
│ │ │ │ │ │ │ ├── initial_selection.dart
│ │ │ │ │ │ │ ├── legend/
│ │ │ │ │ │ │ │ ├── datum_legend.dart
│ │ │ │ │ │ │ │ ├── legend.dart
│ │ │ │ │ │ │ │ ├── legend_entry.dart
│ │ │ │ │ │ │ │ ├── legend_entry_generator.dart
│ │ │ │ │ │ │ │ ├── per_datum_legend_entry_generator.dart
│ │ │ │ │ │ │ │ ├── per_series_legend_entry_generator.dart
│ │ │ │ │ │ │ │ └── series_legend.dart
│ │ │ │ │ │ │ ├── line_point_highlighter.dart
│ │ │ │ │ │ │ ├── range_annotation.dart
│ │ │ │ │ │ │ ├── selection/
│ │ │ │ │ │ │ │ ├── lock_selection.dart
│ │ │ │ │ │ │ │ ├── select_nearest.dart
│ │ │ │ │ │ │ │ └── selection_trigger.dart
│ │ │ │ │ │ │ ├── slider/
│ │ │ │ │ │ │ │ └── slider.dart
│ │ │ │ │ │ │ ├── sliding_viewport.dart
│ │ │ │ │ │ │ ├── sunburst_ring_expander.dart
│ │ │ │ │ │ │ └── zoom/
│ │ │ │ │ │ │ ├── initial_hint_behavior.dart
│ │ │ │ │ │ │ ├── pan_and_zoom_behavior.dart
│ │ │ │ │ │ │ ├── pan_behavior.dart
│ │ │ │ │ │ │ └── panning_tick_provider.dart
│ │ │ │ │ │ ├── canvas_shapes.dart
│ │ │ │ │ │ ├── chart_canvas.dart
│ │ │ │ │ │ ├── chart_context.dart
│ │ │ │ │ │ ├── datum_details.dart
│ │ │ │ │ │ ├── processed_series.dart
│ │ │ │ │ │ ├── selection_model/
│ │ │ │ │ │ │ └── selection_model.dart
│ │ │ │ │ │ ├── series_datum.dart
│ │ │ │ │ │ ├── series_renderer.dart
│ │ │ │ │ │ ├── series_renderer_config.dart
│ │ │ │ │ │ └── unitconverter/
│ │ │ │ │ │ ├── identity_converter.dart
│ │ │ │ │ │ └── unit_converter.dart
│ │ │ │ │ ├── layout/
│ │ │ │ │ │ ├── layout_config.dart
│ │ │ │ │ │ ├── layout_manager.dart
│ │ │ │ │ │ ├── layout_manager_impl.dart
│ │ │ │ │ │ ├── layout_margin_strategy.dart
│ │ │ │ │ │ └── layout_view.dart
│ │ │ │ │ ├── line/
│ │ │ │ │ │ ├── line_chart.dart
│ │ │ │ │ │ ├── line_renderer.dart
│ │ │ │ │ │ └── line_renderer_config.dart
│ │ │ │ │ ├── pie/
│ │ │ │ │ │ ├── arc_label_decorator.dart
│ │ │ │ │ │ ├── arc_renderer.dart
│ │ │ │ │ │ ├── arc_renderer_config.dart
│ │ │ │ │ │ ├── arc_renderer_decorator.dart
│ │ │ │ │ │ ├── arc_renderer_element.dart
│ │ │ │ │ │ ├── base_arc_renderer.dart
│ │ │ │ │ │ ├── base_arc_renderer_config.dart
│ │ │ │ │ │ └── pie_chart.dart
│ │ │ │ │ ├── scatter_plot/
│ │ │ │ │ │ ├── comparison_points_decorator.dart
│ │ │ │ │ │ ├── point_renderer.dart
│ │ │ │ │ │ ├── point_renderer_config.dart
│ │ │ │ │ │ ├── point_renderer_decorator.dart
│ │ │ │ │ │ ├── scatter_plot_chart.dart
│ │ │ │ │ │ ├── symbol_annotation_renderer.dart
│ │ │ │ │ │ └── symbol_annotation_renderer_config.dart
│ │ │ │ │ ├── sunburst/
│ │ │ │ │ │ ├── sunburst_arc_label_decorator.dart
│ │ │ │ │ │ ├── sunburst_arc_renderer.dart
│ │ │ │ │ │ ├── sunburst_arc_renderer_config.dart
│ │ │ │ │ │ └── sunburst_chart.dart
│ │ │ │ │ ├── time_series/
│ │ │ │ │ │ └── time_series_chart.dart
│ │ │ │ │ └── treemap/
│ │ │ │ │ ├── base_treemap_renderer.dart
│ │ │ │ │ ├── dice_treemap_renderer.dart
│ │ │ │ │ ├── slice_dice_treemap_renderer.dart
│ │ │ │ │ ├── slice_treemap_renderer.dart
│ │ │ │ │ ├── squarified_treemap_renderer.dart
│ │ │ │ │ ├── treemap_chart.dart
│ │ │ │ │ ├── treemap_label_decorator.dart
│ │ │ │ │ ├── treemap_renderer_config.dart
│ │ │ │ │ ├── treemap_renderer_decorator.dart
│ │ │ │ │ └── treemap_renderer_element.dart
│ │ │ │ ├── common/
│ │ │ │ │ ├── color.dart
│ │ │ │ │ ├── date_time_factory.dart
│ │ │ │ │ ├── gesture_listener.dart
│ │ │ │ │ ├── graphics_factory.dart
│ │ │ │ │ ├── line_style.dart
│ │ │ │ │ ├── material_palette.dart
│ │ │ │ │ ├── math.dart
│ │ │ │ │ ├── paint_style.dart
│ │ │ │ │ ├── palette.dart
│ │ │ │ │ ├── performance.dart
│ │ │ │ │ ├── proxy_gesture_listener.dart
│ │ │ │ │ ├── rate_limit_utils.dart
│ │ │ │ │ ├── rtl_spec.dart
│ │ │ │ │ ├── style/
│ │ │ │ │ │ ├── material_style.dart
│ │ │ │ │ │ ├── style.dart
│ │ │ │ │ │ └── style_factory.dart
│ │ │ │ │ ├── symbol_renderer.dart
│ │ │ │ │ ├── text_element.dart
│ │ │ │ │ ├── text_measurement.dart
│ │ │ │ │ ├── text_style.dart
│ │ │ │ │ ├── text_utils.dart
│ │ │ │ │ └── typed_registry.dart
│ │ │ │ └── data/
│ │ │ │ ├── series.dart
│ │ │ │ └── tree.dart
│ │ │ └── pubspec.yaml
│ │ ├── charts_flutter/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── ExternalTapQueues.METADATA
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── charts_flutter.gwsq
│ │ │ ├── lib/
│ │ │ │ ├── flutter.dart
│ │ │ │ └── src/
│ │ │ │ ├── bar_chart.dart
│ │ │ │ ├── base_chart.dart
│ │ │ │ ├── base_chart_state.dart
│ │ │ │ ├── behaviors/
│ │ │ │ │ ├── a11y/
│ │ │ │ │ │ └── domain_a11y_explore_behavior.dart
│ │ │ │ │ ├── calculation/
│ │ │ │ │ │ └── percent_injector.dart
│ │ │ │ │ ├── chart_behavior.dart
│ │ │ │ │ ├── chart_title/
│ │ │ │ │ │ └── chart_title.dart
│ │ │ │ │ ├── domain_highlighter.dart
│ │ │ │ │ ├── initial_selection.dart
│ │ │ │ │ ├── legend/
│ │ │ │ │ │ ├── datum_legend.dart
│ │ │ │ │ │ ├── legend.dart
│ │ │ │ │ │ ├── legend_content_builder.dart
│ │ │ │ │ │ ├── legend_entry_layout.dart
│ │ │ │ │ │ ├── legend_layout.dart
│ │ │ │ │ │ └── series_legend.dart
│ │ │ │ │ ├── line_point_highlighter.dart
│ │ │ │ │ ├── range_annotation.dart
│ │ │ │ │ ├── select_nearest.dart
│ │ │ │ │ ├── slider/
│ │ │ │ │ │ └── slider.dart
│ │ │ │ │ ├── sliding_viewport.dart
│ │ │ │ │ └── zoom/
│ │ │ │ │ ├── initial_hint_behavior.dart
│ │ │ │ │ ├── pan_and_zoom_behavior.dart
│ │ │ │ │ └── pan_behavior.dart
│ │ │ │ ├── canvas/
│ │ │ │ │ ├── circle_sector_painter.dart
│ │ │ │ │ ├── line_painter.dart
│ │ │ │ │ ├── pie_painter.dart
│ │ │ │ │ ├── point_painter.dart
│ │ │ │ │ └── polygon_painter.dart
│ │ │ │ ├── cartesian_chart.dart
│ │ │ │ ├── chart_canvas.dart
│ │ │ │ ├── chart_container.dart
│ │ │ │ ├── chart_gesture_detector.dart
│ │ │ │ ├── chart_state.dart
│ │ │ │ ├── combo_chart/
│ │ │ │ │ └── combo_chart.dart
│ │ │ │ ├── graphics_factory.dart
│ │ │ │ ├── line_chart.dart
│ │ │ │ ├── line_style.dart
│ │ │ │ ├── pie_chart.dart
│ │ │ │ ├── scatter_plot_chart.dart
│ │ │ │ ├── selection_model_config.dart
│ │ │ │ ├── symbol_renderer.dart
│ │ │ │ ├── text_element.dart
│ │ │ │ ├── text_style.dart
│ │ │ │ ├── time_series_chart.dart
│ │ │ │ ├── user_managed_state.dart
│ │ │ │ ├── util/
│ │ │ │ │ └── color.dart
│ │ │ │ ├── util.dart
│ │ │ │ └── widget_layout_delegate.dart
│ │ │ ├── minimum_os.bzl
│ │ │ └── pubspec.yaml
│ │ └── docs/
│ │ ├── Gemfile
│ │ ├── flutter/
│ │ │ └── gallery.md
│ │ └── index.md
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ └── Runner.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
│ ├── lib/
│ │ ├── cubit/
│ │ │ ├── add_post_cubit.dart
│ │ │ ├── add_post_state.dart
│ │ │ ├── post_cubit.dart
│ │ │ ├── post_state.dart
│ │ │ ├── posts_cubit.dart
│ │ │ └── posts_state.dart
│ │ ├── main.dart
│ │ ├── rid/
│ │ │ └── messaging.dart
│ │ └── views/
│ │ ├── add_post.dart
│ │ ├── post.dart
│ │ └── posts.dart
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ └── Runner.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ ├── plugin/
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── analysis_options.yaml
│ │ ├── android/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── gradle/
│ │ │ │ └── wrapper/
│ │ │ │ └── gradle-wrapper.properties
│ │ │ ├── gradle.properties
│ │ │ ├── settings.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ └── kotlin/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── plugin/
│ │ │ └── Plugin.kt
│ │ ├── ios/
│ │ │ ├── .gitignore
│ │ │ ├── Assets/
│ │ │ │ └── .gitkeep
│ │ │ ├── Classes/
│ │ │ │ ├── Plugin.h
│ │ │ │ ├── Plugin.m
│ │ │ │ └── SwiftPlugin.swift
│ │ │ └── plugin.podspec
│ │ ├── lib/
│ │ │ └── plugin.dart
│ │ ├── macos/
│ │ │ ├── Classes/
│ │ │ │ └── Plugin.swift
│ │ │ └── plugin.podspec
│ │ └── pubspec.yaml
│ ├── pubspec.yaml
│ ├── reddit_ticker.iml
│ ├── rid_build.rs
│ ├── sh/
│ │ ├── android
│ │ ├── bindgen
│ │ ├── bindgen-dart
│ │ ├── clean
│ │ ├── ios
│ │ ├── linux
│ │ └── macos
│ ├── sql/
│ │ ├── all-posts.sql
│ │ └── all-scores.sql
│ ├── src/
│ │ ├── db.rs
│ │ ├── lib.rs
│ │ └── reddit/
│ │ ├── mod.rs
│ │ ├── reddit.rs
│ │ ├── reddit_api_response.rs
│ │ └── reddit_page_response.rs
│ └── test/
│ ├── logging.dart
│ └── wip.dart
├── todo/
│ ├── .gitignore
│ ├── Cargo.toml
│ ├── README.md
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── todo/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ ├── settings.gradle
│ │ └── todo_android.iml
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ └── Runner.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
│ ├── lib/
│ │ ├── main.dart
│ │ └── views/
│ │ ├── expiry.dart
│ │ ├── menu.dart
│ │ ├── todo.dart
│ │ └── todos.dart
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ └── Runner.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ ├── plugin/
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── android/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── gradle/
│ │ │ │ └── wrapper/
│ │ │ │ └── gradle-wrapper.properties
│ │ │ ├── gradle.properties
│ │ │ ├── settings.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ └── kotlin/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── plugin/
│ │ │ └── Plugin.kt
│ │ ├── ios/
│ │ │ ├── .gitignore
│ │ │ ├── Assets/
│ │ │ │ └── .gitkeep
│ │ │ ├── Classes/
│ │ │ │ ├── Plugin.h
│ │ │ │ ├── Plugin.m
│ │ │ │ └── SwiftPlugin.swift
│ │ │ └── plugin.podspec
│ │ ├── macos/
│ │ │ ├── Classes/
│ │ │ │ └── Plugin.swift
│ │ │ └── plugin.podspec
│ │ ├── plugin.iml
│ │ └── pubspec.yaml
│ ├── pubspec.yaml
│ ├── rid_build.rs
│ ├── sh/
│ │ ├── android
│ │ ├── bindgen
│ │ ├── clean
│ │ ├── ios
│ │ ├── linux
│ │ └── macos
│ ├── src/
│ │ └── lib.rs
│ ├── test/
│ │ └── widget_test.dart
│ └── todo.iml
├── todo_cubit/
│ ├── .gitignore
│ ├── Cargo.toml
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── todo_cubit/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ ├── settings.gradle
│ │ └── todo_cubit_android.iml
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata/
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ └── Runner.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
│ ├── lib/
│ │ ├── blocs/
│ │ │ └── cubit/
│ │ │ ├── filter_cubit.dart
│ │ │ ├── settings_cubit.dart
│ │ │ ├── todo_cubit.dart
│ │ │ ├── todo_state.dart
│ │ │ ├── todos_cubit.dart
│ │ │ └── todos_state.dart
│ │ ├── main.dart
│ │ └── views/
│ │ ├── expiry.dart
│ │ ├── menu.dart
│ │ ├── todo.dart
│ │ └── todos.dart
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── xcshareddata/
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ └── Runner.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ ├── plugin/
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── analysis_options.yaml
│ │ ├── android/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── gradle/
│ │ │ │ └── wrapper/
│ │ │ │ └── gradle-wrapper.properties
│ │ │ ├── gradle.properties
│ │ │ ├── settings.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ └── kotlin/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── plugin/
│ │ │ └── Plugin.kt
│ │ ├── ios/
│ │ │ ├── .gitignore
│ │ │ ├── Assets/
│ │ │ │ └── .gitkeep
│ │ │ ├── Classes/
│ │ │ │ ├── Plugin.h
│ │ │ │ ├── Plugin.m
│ │ │ │ └── SwiftPlugin.swift
│ │ │ └── plugin.podspec
│ │ ├── macos/
│ │ │ ├── Classes/
│ │ │ │ └── Plugin.swift
│ │ │ └── plugin.podspec
│ │ ├── plugin.iml
│ │ └── pubspec.yaml
│ ├── pubspec.yaml
│ ├── rid_build.rs
│ ├── sh/
│ │ ├── android
│ │ ├── android-emulator
│ │ ├── bindgen
│ │ ├── clean
│ │ ├── ios
│ │ ├── linux
│ │ └── macos
│ ├── src/
│ │ └── lib.rs
│ ├── test/
│ │ └── widget_test.dart
│ ├── todo_cubit.iml
│ ├── web/
│ │ ├── index.html
│ │ └── manifest.json
│ └── windows/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── run_loop.cpp
│ ├── run_loop.h
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
└── todo_cubit_wasm/
├── .gitignore
├── Cargo.toml
├── README.md
├── analysis_options.yaml
├── lib/
│ ├── blocs/
│ │ └── cubit/
│ │ ├── filter_cubit.dart
│ │ ├── settings_cubit.dart
│ │ ├── todo_cubit.dart
│ │ ├── todo_state.dart
│ │ ├── todos_cubit.dart
│ │ └── todos_state.dart
│ ├── main.dart
│ └── views/
│ ├── expiry.dart
│ ├── menu.dart
│ ├── todo.dart
│ └── todos.dart
├── plugin/
│ ├── .gitignore
│ ├── LICENSE
│ ├── analysis_options.yaml
│ ├── lib/
│ │ └── wasm/
│ │ ├── reply_channel.dart
│ │ └── utils.dart
│ ├── plugin.iml
│ └── pubspec.yaml
├── pubspec.yaml
├── rid_build.rs
├── sh/
│ ├── build-web
│ ├── clean
│ ├── debug-web
│ ├── wasm
│ ├── wasm-release
│ └── wasmgen
├── src/
│ ├── alloc.rs
│ ├── lib.rs
│ └── replies.rs
├── todo_cubit.iml
├── twitch.md
└── web/
├── index.html
└── manifest.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/FUNDING.yml
================================================
github: [thlorenz]
================================================
FILE: .gitignore
================================================
.DS_Store
.idea/
.metadata
## Flutter ###
# Flutter/Dart/Pub related
**/doc/api/
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.fvm/
.packages
.pub-cache/
.pub/
build/
coverage/
lib/generated_plugin_registrant.dart
# For library packages, don’t commit the pubspec.lock file.
# Regenerating the pubspec.lock file lets you test your package against the latest compatible versions of its dependencies.
# See https://dart.dev/guides/libraries/private-files#pubspeclock
#pubspec.lock
# Android related
**/android/**/gradle-wrapper.jar
**/android/.gradle
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/key.properties
**/android/local.properties
**/android/**/GeneratedPluginRegistrant.java
# Linux related
**/linux/**/*.so
**/linux/**/*.a
# iOS/XCode related
**/ios/**/*.mode1v3
**/ios/**/*.mode2v3
**/ios/**/*.moved-aside
**/ios/**/*.pbxuser
**/ios/**/*.perspectivev3
**/ios/**/*sync/
**/ios/**/.sconsign.dblite
**/ios/**/.tags*
**/ios/**/.vagrant/
**/ios/**/DerivedData/
**/ios/**/Icon?
**/ios/**/Pods/
**/ios/**/.symlinks/
**/ios/**/profile
**/ios/**/xcuserdata
**/ios/.generated/
**/ios/Flutter/.last_build_id
**/ios/Flutter/App.framework
**/ios/Flutter/Flutter.framework
**/ios/Flutter/Flutter.podspec
**/ios/Flutter/Generated.xcconfig
**/ios/Flutter/app.flx
**/ios/Flutter/app.zip
**/ios/Flutter/flutter_assets/
**/ios/Flutter/flutter_export_environment.sh
**/ios/ServiceDefinitions.json
**/ios/Runner/GeneratedPluginRegistrant.*
# Exceptions to above rules.
!**/ios/**/default.mode1v3
!**/ios/**/default.mode2v3
!**/ios/**/default.pbxuser
!**/ios/**/default.perspectivev3
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
### Rust ###
**/target/**
**/Cargo.lock
================================================
FILE: README.md
================================================
# rid-examples
Examples showing how to use [**Rid**](https://thlorenz.com/rid-site/) in order to build Dart/Flutter apps integrated with Rust.
## What is Rid?
_Rid_ stands for _Rust integrates Dart_ and is a tool I am working on that allows to call Rust
functions from Dart and Flutter applications by simply annotating them.
Its main goal is to **make it super easy to implement your UI in Flutter and the logic in
Rust**.
This in turn allows you to benefit from the respective strength of each platform.
Learn more by following the [Getting
Started](https://thlorenz.com/rid-site/docs/getting-started/introduction/) guide.
## How does Rid work?
_Rid_ consumes the annotations added to your Rust code to generate all the
[FFI](https://doc.rust-lang.org/nomicon/ffi.html) boilerplate to interact with them from Dart
/Flutter.
Additionally it generates extension methods on entities, such as _models_ in order to expose an
API on the Dart/Flutter end that is super fun to work with.
Learn more _rids_ [application
architecture](https://thlorenz.com/rid-site/docs/getting-started/architecture/).
## Examples
### Flutter
- [Todo App](./flutter/todo)
### Dart Only
- [Command Line Todo App](./dart/todo)
## Is Rid open sourced?
_Rid_ is _[Sponsorware](https://github.com/sponsorware/docs)_ and thus not open sourced yet.
Please [learn more here](https://thlorenz.com/rid-site/docs/contributing/sponsor/) about how
you can [sponsor rid via a monthly contribution](https://github.com/sponsors/thlorenz) and when
_rid_ will be fully open sourced.
## LICENSE
MIT
================================================
FILE: dart/todo/.gitignore
================================================
**/generated/
================================================
FILE: dart/todo/Cargo.toml
================================================
[package]
name = "rid_dart_todo"
version = "0.1.0"
authors = ["Thorsten Lorenz <thlorenz@gmx.de>"]
edition = "2018"
[lib]
name = "rid_dart_todo"
crate-type = ["cdylib"]
path = "src/app.rs"
doctest = false
test = false
[[bin]]
name = "rid_build"
path = "rid_build.rs"
# Note that until rid is open sourced and published to crates.io the examples
# assume it to reside in a relative folder
[dependencies]
rid = { path = "../../../rid" }
rid_build = { path = "../../../rid/rid-build" }
[build-dependencies]
rid_build = { path = "../../../rid/rid-build" }
================================================
FILE: dart/todo/README.md
================================================
# Rid Todo Example
An example todo app with user interaction implemented in Dart and app logic in Rust.
## Getting Started
_Please see [Caveats](#Caveats) first_.
```sh
./sh/build
./sh/run
```
Repeat the first step every time you modify Rust code.
## Rid Model
What the Model annotations communicate to _rid_:
```rust
#[rid::model] // this is a model and all its fields should be accessible from Dart
#[rid::structs(Todo)] // the referenced Todo type is a struct
#[rid::enums(Filter)] // the referenced Filter type is an enum
#[derive(Debug)] // expose a `model.debug(pretty?)` function to Dart
pub struct Model {
last_added_id: u32,
todos: Vec<Todo>,
filter: Filter,
}
```
Possible Model use in Dart code:
```dart
final filter = model.filter;
for (final todo in model.todos.iter()) {
// do something
}
```
## Rid Message
How to setup sending messages to the _Model_ via _rid_:
```rust
#[rid::message(Model)] // this is a message that will update the model
#[rid::enums(Filter)] // the referenced Filter type is an enum
pub enum Msg {
AddTodo(String), // sent via Dart: model.msgAddTodo("Learn Rid");
ToggleTodo(u32), // sent via Dart: model.msgToggleTodo(todoId);
CompleteAll, // sent via Dart: model.msgCompleteAll();
SetFilter(Filter), // sent via Dart: model.msgSetFilter(RidFilter.index);
}
impl Model {
fn update(&mut self, msg: Msg) {
// handle the message here
}
}
```
## Exporting Methods
```rust
#[rid::export] // rid will scan this impl block for exports
impl Model {
#[rid::export(initModel)] // exports this method to be called via Dart: rid_ffi.initModel();
fn new() -> Self {
Self {
last_added_id: 0,
todos: vec![],
filter: Filter::All,
}
}
}
```
## Caveats
At this point _Rid_ hasn't been published, therefore the build step cannot be performed and
this example only serves to demonstrate what is possible once it _is_ published and open
sourced.
For more information please see [_Is Rid Open Sourced?_](../../README.md#is-rid-open-sourced)
================================================
FILE: dart/todo/lib/main.dart
================================================
import 'generated/rid_api.dart';
import 'dart:io';
printStatus(Store store) {
final todos = store.todos;
final total = todos.length;
final filter = store.filter;
print("Total Todos: $total");
print("Filter: ${filter.display()}");
print("\nMatching Todos:");
// NOTE: using raw API here to access `display`.
// To do that properly we lock the store while we're iterating.
store.raw.runLocked((rawStore) {
final matchingTodos = rawStore.filtered_todos();
for (final todo in matchingTodos.iter()) {
print(" ${todo.display()}");
}
matchingTodos.dispose();
});
}
Future<bool> handleCommand(Store store, String line) async {
String cmd;
String payload;
if (line.length > 2) {
cmd = line.substring(0, 3);
payload = line.substring(3).trim();
} else {
cmd = line.substring(0, 2);
payload = "";
}
switch (cmd) {
case "add":
await store.msgAddTodo(payload);
break;
case "del":
await store.msgRemoveTodo(int.parse(payload));
break;
case "cmp":
await store.msgCompleteTodo(int.parse(payload));
break;
case "tog":
await store.msgToggleTodo(int.parse(payload));
break;
case "rst":
store.msgRestartTodo(int.parse(payload));
break;
case "fil":
final filter = payload == "cmp"
? Filter.Completed
: payload == "pen"
? Filter.Pending
: Filter.All;
await store.msgSetFilter(filter);
break;
case "ca":
await store.msgCompleteAll();
break;
case "dc":
await store.msgRemoveCompleted();
break;
case "ra":
await store.msgRestartAll();
break;
default:
print("\nUnknown command '$cmd'\n");
return false;
}
return true;
}
printCommands() {
print("\nPlease select one of the below:\n");
print(" add <todo title> -- to add a todo");
print(" del <todo id> -- to delete a todo by id");
print(" cmp <todo id> -- to complete a todo by id");
print(" rst <todo id> -- to restart a todo by id");
print(" tog <todo id> -- to toggle a todo by id");
print(" fil all|cmp|pen -- to set filter to");
print(" ca -- to completed all todos");
print(" dc -- to delete completed todos");
print(" ra -- to restart all todos");
print(" q -- to quit");
}
void main(List<String> args) async {
final store = Store.instance;
{
await store.msgAddTodo("Complete this Todo via: cmp 1");
await store.msgAddTodo("Delete this Todo via: del 2");
await store.msgAddTodo("Toggle this Todo via: tog 3");
await store.msgAddTodo("Restart the first Todo via: rst 1");
String? input;
bool ok = true;
while (true) {
if (ok) {
print("\x1B[2J\x1B[0;0H");
}
printStatus(store);
printCommands();
stdout.write("\n> ");
input = stdin.readLineSync();
if (input == "q") {
break;
}
if (input != null && input.length > 1) {
ok = await handleCommand(store, input.trim());
}
}
}
store.dispose();
}
================================================
FILE: dart/todo/pubspec.yaml
================================================
name: rid_dart_todo
version: 0.0.0
environment:
sdk: '>=2.13.0 <=3.0.0'
dependencies:
ffi: ^1.0.0
ffigen: 4.0.0-dev.2
================================================
FILE: dart/todo/rid_build.rs
================================================
use rid_build::{build, BuildConfig, BuildTarget, Project};
use std::env;
fn main() {
let crate_dir = env::var("CARGO_MANIFEST_DIR")
.expect("Missing CARGO_MANIFEST_DIR, please run this via 'cargo run'");
let crate_name = &env::var("CARGO_PKG_NAME")
.expect("Missing CARGO_PKG_NAME, please run this via 'cargo run'");
let lib_name = &format!("lib{}", &crate_name);
let build_config = BuildConfig {
target: BuildTarget::Debug,
project: Project::Dart,
lib_name,
crate_name,
project_root: &crate_dir,
workspace_root: Some(&crate_dir),
};
let build_result = build(&build_config).expect("Build failed");
eprintln!("{}", build_result);
}
================================================
FILE: dart/todo/sh/build
================================================
#!/usr/bin/env bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
(cd $DIR/.. && cargo run rid_build)
================================================
FILE: dart/todo/sh/run
================================================
#!/usr/bin/env bash
dart \
--enable-asserts \
--packages=.packages \
package:rid_dart_todo/main.dart
================================================
FILE: dart/todo/src/app.rs
================================================
#![allow(dead_code)]
use rid::RidStore;
use std::fmt::Display;
// -----------------
// Store
// -----------------
#[rid::store]
#[rid::structs(Todo)]
#[rid::enums(Filter)]
#[derive(Debug)]
pub struct Store {
last_added_id: u32,
todos: Vec<Todo>,
filter: Filter,
}
impl RidStore<Msg> for Store {
fn create() -> Self {
Self {
last_added_id: 0,
todos: vec![],
filter: Filter::All,
}
}
fn update(&mut self, req_id: u64, msg: Msg) {
use Msg::*;
match msg {
AddTodo(title) => {
self.last_added_id += 1;
let todo = Todo {
id: self.last_added_id,
title,
completed: false,
};
self.todos.push(todo);
rid::post(Reply::AddedTodo(req_id, self.last_added_id.to_string()));
}
RemoveTodo(id) => {
let mut enumerated = self.todos.iter().enumerate();
let idx = match enumerated.find(|(_, todo)| todo.id == id) {
Some((idx, _)) => idx,
None => return eprintln!("Could not find Todo with id '{}'", id),
};
self.todos.remove(idx);
rid::post(Reply::RemovedTodo(req_id, self.last_added_id.to_string()));
}
RemoveCompleted => {
self.todos.retain(|todo| !todo.completed);
rid::post(Reply::RemovedCompleted(req_id));
}
CompleteTodo(id) => {
self.update_todo(id, |todo| todo.completed = true);
rid::post(Reply::CompletedTodo(req_id, id.to_string()));
}
RestartTodo(id) => {
self.update_todo(id, |todo| todo.completed = false);
rid::post(Reply::RestartedTodo(req_id, id.to_string()));
}
ToggleTodo(id) => {
self.update_todo(id, |todo| todo.completed = !todo.completed);
rid::post(Reply::ToggledTodo(req_id, id.to_string()));
}
CompleteAll => {
self.todos.iter_mut().for_each(|x| x.completed = true);
rid::post(Reply::CompletedAll(req_id));
}
RestartAll => {
self.todos.iter_mut().for_each(|x| x.completed = false);
rid::post(Reply::RestartedAll(req_id));
}
SetFilter(filter) => {
self.filter = filter;
rid::post(Reply::SetFilter(req_id));
}
};
}
}
#[rid::export]
impl Store {
fn update_todo<F: FnOnce(&mut Todo)>(&mut self, id: u32, update: F) {
match self.todos.iter_mut().find(|x| x.id == id) {
Some(todo) => update(todo),
None => eprintln!("Could not find Todo with id '{}'", id),
};
}
#[rid::export]
#[rid::structs(Todo)]
fn filtered_todos(&self) -> Vec<&Todo> {
let mut vec: Vec<&Todo> = match self.filter {
Filter::Completed => self.todos.iter().filter(|x| x.completed).collect(),
Filter::Pending => self.todos.iter().filter(|x| !x.completed).collect(),
Filter::All => self.todos.iter().collect(),
};
vec.sort();
vec
}
}
// -----------------
// Todo Model
// -----------------
#[rid::model]
#[derive(Debug, PartialEq, Eq, PartialOrd, rid::Display)]
pub struct Todo {
id: u32,
title: String,
completed: bool,
}
impl Ord for Todo {
fn cmp(&self, other: &Self) -> std::cmp::Ordering {
self.id.cmp(&other.id)
}
}
impl Display for Todo {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let status = if self.completed { "✓" } else { " " };
write!(f, "[{}] ({}) '{}'", status, self.id, self.title)
}
}
// -----------------
// Filter
// -----------------
#[rid::model]
#[derive(Clone, Debug, rid::Display)]
pub enum Filter {
Completed,
Pending,
All,
}
impl Display for Filter {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Filter::Completed => write!(f, "Completed"),
Filter::Pending => write!(f, "Pending"),
Filter::All => write!(f, "All"),
}
}
}
// -----------------
// Msg
// -----------------
#[rid::message(Reply)]
#[rid::enums(Filter)]
#[derive(Debug)]
pub enum Msg {
AddTodo(String),
RemoveTodo(u32),
RemoveCompleted,
CompleteTodo(u32),
RestartTodo(u32),
ToggleTodo(u32),
CompleteAll,
RestartAll,
SetFilter(Filter),
}
// -----------------
// Reply
// -----------------
#[rid::reply]
pub enum Reply {
AddedTodo(u64, String),
RemovedTodo(u64, String),
RemovedCompleted(u64),
CompletedTodo(u64, String),
RestartedTodo(u64, String),
ToggledTodo(u64, String),
CompletedAll(u64),
RestartedAll(u64),
SetFilter(u64),
}
================================================
FILE: flutter/reddit_ticker/.gitignore
================================================
.DS_Store
.idea/
.metadata
## Flutter ###
# Flutter/Dart/Pub related
**/doc/api/
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.fvm/
.packages
.pub-cache/
.pub/
build/
coverage/
lib/generated_plugin_registrant.dart
# For library packages, don’t commit the pubspec.lock file.
# Regenerating the pubspec.lock file lets you test your package against the latest compatible versions of its dependencies.
# See https://dart.dev/guides/libraries/private-files#pubspeclock
#pubspec.lock
# Android related
**/android/**/gradle-wrapper.jar
**/android/.gradle
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/key.properties
**/android/local.properties
**/android/**/GeneratedPluginRegistrant.java
# iOS/XCode related
**/ios/**/*.mode1v3
**/ios/**/*.mode2v3
**/ios/**/*.moved-aside
**/ios/**/*.pbxuser
**/ios/**/*.perspectivev3
**/ios/**/*sync/
**/ios/**/.sconsign.dblite
**/ios/**/.tags*
**/ios/**/.vagrant/
**/ios/**/DerivedData/
**/ios/**/Icon?
**/ios/**/Pods/
**/ios/**/.symlinks/
**/ios/**/profile
**/ios/**/xcuserdata
**/ios/.generated/
**/ios/Flutter/.last_build_id
**/ios/Flutter/App.framework
**/ios/Flutter/Flutter.framework
**/ios/Flutter/Flutter.podspec
**/ios/Flutter/Generated.xcconfig
**/ios/Flutter/app.flx
**/ios/Flutter/app.zip
**/ios/Flutter/flutter_assets/
**/ios/Flutter/flutter_export_environment.sh
**/ios/ServiceDefinitions.json
**/ios/Runner/GeneratedPluginRegistrant.*
# Exceptions to above rules.
!**/ios/**/default.mode1v3
!**/ios/**/default.mode2v3
!**/ios/**/default.pbxuser
!**/ios/**/default.perspectivev3
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
### Rust ###
**/target/**
**/Cargo.lock
### Rid ###
**/generated/**
**/Classes/bindings.h
**/macos/*.a
**/ios/*.a
**/android/src/main/jniLibs/*
================================================
FILE: flutter/reddit_ticker/Cargo.toml
================================================
[package]
name = "reddit_ticker"
version = "0.1.0"
authors = ["Thorsten Lorenz <thlorenz@gmx.de>"]
edition = "2018"
[lib]
crate-type = ["cdylib", "staticlib" ]
[[bin]]
name = "rid_build"
path = "rid_build.rs"
[dependencies]
cbindgen = "0.20.0"
rid_build = { path = "../../../rid/rid-build" }
rid = { path = "../../../rid" }
serde = { version = "1.0.123", features = [ "derive" ] }
serde_json = "1.0.64"
ureq = { version = "2.0.2", features = [ "json" ] }
anyhow = "1.0.38"
rusqlite = { version = "0.24.2", features = [ "bundled" ] }
================================================
FILE: flutter/reddit_ticker/README.md
================================================
# reddit_ticker
Rust integrated Dart Flutter Project
## Getting Started
Use the below scripts to get the app ready to run with Flutter.
### 1. Generate Glue Code
```sh
./sh/bindgen
```
### 2. Build For Desired Target/Device
Run any of the below three to build the binary for the specific device and have it placed into
the devices specific plugin folder.
```sh
./sh/macos
```
### 3. Run with Flutter
Run on the device.
```sh
flutter run -d macos
```
### 4. Develop
Run step `1` whenever a function exposed to Flutter changes.
Run step `2` whenever any of your Rust code changes.
**Note** that to apply changes from Rust you need to restart the app to reload the compiled binary.
A hot restart/reload does not achieve this.
## Folder Structure
```
├── android
├── ios
├── macos
├── lib
├── plugin
│ ├── android
│ ├── ios
│ ├── macos
│ └── lib
└── src
```
### `./plugin`
Provides connection from Flutter to Rust.
Rust binaries are placed into the respective plugin folders `./ios, ./macos, ./android` when
they are built.
Generated Dart glue code is placed inside `./plugin/lib/generated` while
`./plugin/lib/plugin.dart` just exposes the API to the app.
### `./src`
Contains the starter Rust code inside `./src/lib.rs`. Keep developing the Rust part of your app
here.
### `./lib`
Contains the starter Flutter app inside `./lib/main.dart`.
### `./sh`
Provides scripts to run build and code generation tasks. In the future a tool will provide the
functionality currently provided by these scripts.
- `bindgen` generates the `binding.h` header file for the extern Rust functions found inside
`./src`. These are then placed inside the `./plugin` device folders were needed as well as
`./plugin/lib/generated/binding.h` where they are used to generate Dart glue code
- as part of this script `ffigen` generates Dart glue code inside
`./plugin/lib/generated/ffigen_binding.dart` using `./plugin/lib/generated/binding.h` as input
- `./android` builds the Rust binary to run on Android devices/emulators and places it inside
`./plugin/lib/android`
- `./ios` builds the Rust binary to run on IOS devices/emulators and places it inside
`./plugin/lib/ios`
- `./macos` builds the Rust binary to run on MacOs directly and places it inside
`./plugin/lib/macos`, this is the same format as running `cargo build` on your Mac
- `clean` cleans both the Flutter plugin and application, run this to reset Flutter when things
aren't working
================================================
FILE: flutter/reddit_ticker/analysis_options.yaml
================================================
# This file configures the analyzer, which statically analyzes Dart code to
# check for errors, warnings, and lints.
#
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
# invoked from the command line by running `flutter analyze`.
# The following line activates a set of recommended lints for Flutter apps,
# packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml
linter:
# The lint rules applied to this project can be customized in the
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
# included above or to enable additional rules. A list of all available lints
# and their documentation is published at
# https://dart-lang.github.io/linter/lints/index.html.
#
# Instead of disabling a lint rule for the entire project in the
# section below, it can also be suppressed for a single line of code
# or a specific dart file by using the `// ignore: name_of_lint` and
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
# producing the lint.
rules:
# avoid_print: false # Uncomment to disable the `avoid_print` rule
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options
================================================
FILE: flutter/reddit_ticker/android/.gitignore
================================================
gradle-wrapper.jar
/.gradle
/captures/
/gradlew
/gradlew.bat
/local.properties
GeneratedPluginRegistrant.java
# Remember to never publicly share your keystore.
# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
key.properties
**/*.keystore
**/*.jks
================================================
FILE: flutter/reddit_ticker/android/app/build.gradle
================================================
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
compileSdkVersion 30
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.example.reddit_ticker"
minSdkVersion 16
targetSdkVersion 30
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
}
}
}
flutter {
source '../..'
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
================================================
FILE: flutter/reddit_ticker/android/app/src/debug/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.reddit_ticker">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
================================================
FILE: flutter/reddit_ticker/android/app/src/main/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.reddit_ticker">
<application
android:label="reddit_ticker"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user
while the Flutter UI initializes. After that, this theme continues
to determine the Window background behind the Flutter UI. -->
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
</manifest>
================================================
FILE: flutter/reddit_ticker/android/app/src/main/kotlin/com/example/reddit_ticker/MainActivity.kt
================================================
package com.example.reddit_ticker
import io.flutter.embedding.android.FlutterActivity
class MainActivity: FlutterActivity() {
}
================================================
FILE: flutter/reddit_ticker/android/app/src/main/res/drawable/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white" />
<!-- You can insert your own image assets here -->
<!-- <item>
<bitmap
android:gravity="center"
android:src="@mipmap/launch_image" />
</item> -->
</layer-list>
================================================
FILE: flutter/reddit_ticker/android/app/src/main/res/drawable-v21/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="?android:colorBackground" />
<!-- You can insert your own image assets here -->
<!-- <item>
<bitmap
android:gravity="center"
android:src="@mipmap/launch_image" />
</item> -->
</layer-list>
================================================
FILE: flutter/reddit_ticker/android/app/src/main/res/values/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>
================================================
FILE: flutter/reddit_ticker/android/app/src/main/res/values-night/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>
================================================
FILE: flutter/reddit_ticker/android/app/src/profile/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.reddit_ticker">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
================================================
FILE: flutter/reddit_ticker/android/build.gradle
================================================
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
delete rootProject.buildDir
}
================================================
FILE: flutter/reddit_ticker/android/gradle/wrapper/gradle-wrapper.properties
================================================
#Fri Jun 23 08:50:38 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
================================================
FILE: flutter/reddit_ticker/android/gradle.properties
================================================
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true
================================================
FILE: flutter/reddit_ticker/android/reddit_ticker_android.iml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android" name="Android">
<configuration>
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="GEN_FOLDER_RELATIVE_PATH_APT" value="/gen" />
<option name="GEN_FOLDER_RELATIVE_PATH_AIDL" value="/gen" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/app/src/main/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/app/src/main/res" />
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/app/src/main/assets" />
<option name="LIBS_FOLDER_RELATIVE_PATH" value="/app/src/main/libs" />
<option name="PROGUARD_LOGS_FOLDER_RELATIVE_PATH" value="/app/src/main/proguard_logs" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/app/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/app/src/main/kotlin" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/gen" isTestSource="false" generated="true" />
</content>
<orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Flutter for Android" level="project" />
<orderEntry type="library" name="KotlinJavaRuntime" level="project" />
</component>
</module>
================================================
FILE: flutter/reddit_ticker/android/settings.gradle
================================================
include ':app'
def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
def properties = new Properties()
assert localPropertiesFile.exists()
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
================================================
FILE: flutter/reddit_ticker/deps/charts/.gitignore
================================================
.dart_tool/
.packages
pubspec.lock
.bundle
_site
build/
**/ios/.generated/
**/ios/Flutter/Generated.xcconfig
**/ios/Runner/GeneratedPluginRegistrant.*
**/doc/
**/example/
**/test/
================================================
FILE: flutter/reddit_ticker/deps/charts/.travis.yml
================================================
matrix:
include:
# Job 1) Run tests
- os: linux
env:
- SHARD=Tests
sudo: false
addons:
apt:
# Flutter depends on /usr/lib/x86_64-linux-gnu/libstdc++.so.6 version GLIBCXX_3.4.18
sources:
- ubuntu-toolchain-r-test # if we don't specify this, the libstdc++6 we get is the wrong version
packages:
- libstdc++6
- fonts-droid-fallback
before_script:
- git clone https://github.com/flutter/flutter.git
- export PATH=`pwd`/flutter/bin:`pwd`/flutter/bin/cache/dart-sdk/bin:$PATH
- flutter doctor
script:
- cd charts_common
# TODO Enable travis to run charts common test after fixing timezone test bug.
#- pub get
#- pub run test
- cd ../charts_flutter
- flutter test
cache:
directories:
- $HOME/.pub-cache
================================================
FILE: flutter/reddit_ticker/deps/charts/AUTHORS
================================================
# Below is a list of people and organizations that have contributed
# to the Charts project. Names should be added to the list like so:
#
# Name/Organization <email address>
Google Inc.
================================================
FILE: flutter/reddit_ticker/deps/charts/CONTRIBUTING.md
================================================
This project is developed internally at Google and published for external
consumption, external contributions unfortunately cannot be taken at this time.
================================================
FILE: flutter/reddit_ticker/deps/charts/LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: flutter/reddit_ticker/deps/charts/README.md
================================================
Charts is a general charting library, currently enabled for the
[Flutter mobile UI framework](https://flutter.io).
See the [online gallery](https://google.github.io/charts/flutter/gallery.html) for supported chart
types and examples of how to custom components of the chart.
*Note*: This is not an official Google product.
[](https://travis-ci.org/google/charts)
## charts_common
[](https://pub.dartlang.org/packages/charts_common)
A common library for charting packages.
## charts_flutter
[](https://pub.dartlang.org/packages/charts_flutter)
A charting package for [Flutter](https://flutter.io), supporting both Android
and iOS.
All charts packages are licensed under the Apache 2 license, see the
[LICENSE](LICENSE) and [AUTHORS](AUTHORS) files for details.
## Development
This project is developed internally at Google and published for external
consumption, external contributions unfortunately cannot be taken at this time.
================================================
FILE: flutter/reddit_ticker/deps/charts/charts_common/CHANGELOG.md
================================================
# 0.11.0
* Null support
* Update to latest from internal repo
# 0.10.0
* Internal bug fixes
* Bump versions of intl due to pull request
# 0.9.0
* Internal bug fixes
* Bump versions in Gemlock file due to security alerts
# 0.8.1
* Update intl version.
# 0.8.0
* Bug fixes from open source.
# 0.7.0
* Added vertical bar label
# 0.6.0
* Bars can now be rendered on line charts.
* Negative measure values will now be rendered on bar charts as a separate stack from the positive
values.
* Added a Datum Legend, which displays one entry per value in the first series on the chart. This is
useful for pie and scatter plot charts.
* The AxisPosition enum in RTLSpec was refactored to AxisDirection to better reflect its effect on
swapping the positions of all start and end components, and not just positioning the measure axes.
* Added custom colors for line renderer area skirts and confidence intervals. A new "areaColorFn"
has been added to Series, and corresponding data to the datum. We could not use the fillColorFn for
these elements, because that color is already applied to the internal section of points on line
charts (including highlighter behaviors).
# 0.5.0
* SelectionModelConfig's listener parameter has been renamed to "changeListener". This is a breaking
change. Please rename any existing uses of the "listener" parameter to "changeListener". This was
named in order to add an additional listener "updateListener" that listens to any update requests,
regardless if the selection model has changed.
* CartesianChart's method getMeasureAxis(String axisId) has been changed to
getMeasureAxis({String axisId) so that getting the primary measure axis will not need passing any id
that does not match the secondary measure axis id. This affects users implementing custom behaviors
using the existing method.
# 0.4.0
* Declare compatibility with Dart 2.
* BasicNumericTickFormatterSpec now takes in a callback instead of NumberFormat as the default constructor. Use named constructor withNumberFormat instead. This is a breaking change.
* BarRendererConfig is no longer default of type String, please change current usage to BarRendererConfig<String>. This is a breaking change.
* BarTargetLineRendererConfig is no longer default of type String, please change current usage to BarTargetLineRendererConfig<String>. This is a breaking change.
# 0.3.0
* Simplified API by removing the requirement for specifying the datum type when creating a chart.
For example, previously to construct a bar chart the syntax was 'new BarChart<MyDatumType>()'.
The syntax is now cleaned up to be 'new BarChart()'. Please refer to the
[online gallery](https://google.github.io/charts/flutter/gallery.html) for the correct syntax.
* Added scatter plot charts
* Added tap to hide for legends
* Added support for rendering area skirts to line charts
* Added support for configurable fill colors to bar charts
# 0.2.0
* Update color palette. Please use MaterialPalette instead of QuantumPalette.
* Dart2 fixes
# 0.1.0
Initial release.
================================================
FILE: flutter/reddit_ticker/deps/charts/charts_common/LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: flutter/reddit_ticker/deps/charts/charts_common/README.md
================================================
# Common Charting library
[](https://pub.dartlang.org/packages/charts_common)
Common componnets for charting libraries.
## Development
This project is developed internally at Google and published for external
consumption, external contributions unfortunately cannot be taken at this time.
================================================
FILE: flutter/reddit_ticker/deps/charts/charts_common/charts_common.gwsq
================================================
send_cls_to('dart-charts-team+reviews');
send_cls_to('dart-charts-team');
define Main {
reassign_to_list(from_owners_file('third_party/dart/charts_common/OWNERS'));
}
================================================
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/common.dart
================================================
// Copyright 2018 the Charts project authors. Please see the AUTHORS file
// for details.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
export 'src/chart/bar/bar_chart.dart' show BarChart;
export 'src/chart/bar/bar_error_decorator.dart' show BarErrorDecorator;
export 'src/chart/bar/bar_label_decorator.dart'
show BarLabelAnchor, BarLabelDecorator, BarLabelPlacement, BarLabelPosition;
export 'src/chart/bar/bar_lane_renderer_config.dart' show BarLaneRendererConfig;
export 'src/chart/bar/bar_renderer.dart'
show BarRenderer, BarRendererElement, ImmutableBarRendererElement;
export 'src/chart/bar/bar_renderer_config.dart'
show
BarRendererConfig,
CornerStrategy,
ConstCornerStrategy,
NoCornerStrategy;
export 'src/chart/bar/bar_renderer_decorator.dart' show BarRendererDecorator;
export 'src/chart/bar/bar_target_line_renderer.dart' show BarTargetLineRenderer;
export 'src/chart/bar/bar_target_line_renderer_config.dart'
show BarTargetLineRendererConfig;
export 'src/chart/bar/base_bar_renderer.dart'
show barGroupIndexKey, barGroupCountKey, barGroupWeightKey;
export 'src/chart/bar/base_bar_renderer_config.dart'
show BarGroupingType, BaseBarRendererConfig;
export 'src/chart/cartesian/axis/axis.dart'
show
domainAxisKey,
measureAxisIdKey,
measureAxisKey,
Axis,
ImmutableAxis,
AxisOrientation,
NumericAxis,
OrdinalAxis,
OrdinalViewport;
export 'src/chart/cartesian/axis/draw_strategy/base_tick_draw_strategy.dart'
show BaseRenderSpec, BaseTickDrawStrategy;
export 'src/chart/cartesian/axis/draw_strategy/gridline_draw_strategy.dart'
show GridlineRendererSpec;
export 'src/chart/cartesian/axis/draw_strategy/none_draw_strategy.dart'
show NoneRenderSpec;
export 'src/chart/cartesian/axis/draw_strategy/range_tick_draw_strategy.dart'
show RangeTickRendererSpec;
export 'src/chart/cartesian/axis/draw_strategy/small_tick_draw_strategy.dart'
show SmallTickRendererSpec;
export 'src/chart/cartesian/axis/draw_strategy/tick_draw_strategy.dart'
show TickDrawStrategy;
export 'src/chart/cartesian/axis/numeric_extents.dart' show NumericExtents;
export 'src/chart/cartesian/axis/spec/axis_spec.dart'
show
AxisSpec,
LineStyleSpec,
RenderSpec,
TextStyleSpec,
TickLabelAnchor,
TickLabelJustification,
TickFormatterSpec,
TickProviderSpec;
export 'src/chart/cartesian/axis/spec/bucketing_axis_spec.dart'
show BucketingAxisSpec, BucketingNumericTickProviderSpec;
export 'src/chart/cartesian/axis/spec/date_time_axis_spec.dart'
show
DateTimeAxisSpec,
DayTickProviderSpec,
AutoDateTimeTickFormatterSpec,
AutoDateTimeTickProviderSpec,
DateTimeEndPointsTickProviderSpec,
DateTimeTickFormatterSpec,
DateTimeTickProviderSpec,
BasicDateTimeTickFormatterSpec,
TimeFormatterSpec,
StaticDateTimeTickProviderSpec;
export 'src/chart/cartesian/axis/spec/end_points_time_axis_spec.dart'
show EndPointsTimeAxisSpec;
export 'src/chart/cartesian/axis/spec/numeric_axis_spec.dart'
show
NumericAxisSpec,
NumericEndPointsTickProviderSpec,
NumericTickProviderSpec,
NumericTickFormatterSpec,
BasicNumericTickFormatterSpec,
BasicNumericTickProviderSpec,
StaticNumericTickProviderSpec;
export 'src/chart/cartesian/axis/spec/ordinal_axis_spec.dart'
show
BasicOrdinalTickProviderSpec,
BasicOrdinalTickFormatterSpec,
FixedPixelOrdinalScaleSpec,
FixedPixelSpaceOrdinalScaleSpec,
OrdinalAxisSpec,
OrdinalTickFormatterSpec,
OrdinalTickProviderSpec,
OrdinalScaleSpec,
RangeOrdinalTickProviderSpec,
SimpleOrdinalScaleSpec,
StaticOrdinalTickProviderSpec;
export 'src/chart/cartesian/axis/spec/percent_axis_spec.dart'
show PercentAxisSpec;
export 'src/chart/cartesian/axis/spec/range_tick_spec.dart' show RangeTickSpec;
export 'src/chart/cartesian/axis/spec/tick_spec.dart' show TickSpec;
export 'src/chart/cartesian/axis/tick.dart' show Tick;
export 'src/chart/cartesian/axis/tick_formatter.dart'
show SimpleTickFormatterBase, TickFormatter;
export 'src/chart/cartesian/axis/time/auto_adjusting_date_time_tick_provider.dart'
show AutoAdjustingDateTimeTickProvider;
export 'src/chart/cartesian/axis/time/base_time_stepper.dart'
show BaseTimeStepper;
export 'src/chart/cartesian/axis/time/date_time_extents.dart'
show DateTimeExtents;
export 'src/chart/cartesian/axis/time/date_time_tick_formatter.dart'
show DateTimeTickFormatter;
export 'src/chart/cartesian/axis/time/time_range_tick_provider_impl.dart'
show TimeRangeTickProviderImpl;
export 'src/chart/cartesian/cartesian_chart.dart'
show CartesianChart, NumericCartesianChart, OrdinalCartesianChart;
export 'src/chart/cartesian/cartesian_renderer.dart' show BaseCartesianRenderer;
export 'src/chart/common/base_chart.dart' show BaseChart, LifecycleListener;
export 'src/chart/common/behavior/a11y/a11y_explore_behavior.dart'
show ExploreModeTrigger;
export 'src/chart/common/behavior/a11y/a11y_node.dart' show A11yNode;
export 'src/chart/common/behavior/a11y/domain_a11y_explore_behavior.dart'
show DomainA11yExploreBehavior, VocalizationCallback;
export 'src/chart/common/behavior/a11y/keyboard_domain_navigator.dart'
show KeyboardDomainNavigator;
export 'src/chart/common/behavior/calculation/percent_injector.dart'
show PercentInjector, PercentInjectorTotalType;
export 'src/chart/common/behavior/chart_behavior.dart'
show
BehaviorPosition,
ChartBehavior,
InsideJustification,
OutsideJustification;
export 'src/chart/common/behavior/chart_title/chart_title.dart'
show ChartTitle, ChartTitleDirection;
export 'src/chart/common/behavior/domain_highlighter.dart'
show DomainHighlighter;
export 'src/chart/common/behavior/domain_outliner.dart' show DomainOutliner;
export 'src/chart/common/behavior/initial_selection.dart' show InitialSelection;
export 'src/chart/common/behavior/legend/datum_legend.dart' show DatumLegend;
export 'src/chart/common/behavior/legend/legend.dart'
show Legend, LegendCellPadding, LegendState, LegendTapHandling;
export 'src/chart/common/behavior/legend/legend_entry.dart'
show LegendEntry, LegendCategory, LegendEntryBase;
export 'src/chart/common/behavior/legend/legend_entry_generator.dart'
show LegendEntryGenerator, LegendDefaultMeasure;
export 'src/chart/common/behavior/legend/series_legend.dart' show SeriesLegend;
export 'src/chart/common/behavior/line_point_highlighter.dart'
show LinePointHighlighter, LinePointHighlighterFollowLineType;
export 'src/chart/common/behavior/range_annotation.dart'
show
AnnotationLabelAnchor,
AnnotationLabelDirection,
AnnotationLabelPosition,
AnnotationSegment,
LineAnnotationSegment,
RangeAnnotation,
RangeAnnotationAxisType,
RangeAnnotationSegment;
export 'src/chart/common/behavior/selection/lock_selection.dart'
show LockSelection;
export 'src/chart/common/behavior/selection/select_nearest.dart'
show SelectNearest, SelectionMode;
export 'src/chart/common/behavior/selection/selection_trigger.dart'
show SelectionTrigger;
export 'src/chart/common/behavior/slider/slider.dart'
show
Slider,
SliderHandlePosition,
SliderListenerCallback,
SliderListenerDragState,
SliderStyle;
export 'src/chart/common/behavior/sliding_viewport.dart' show SlidingViewport;
export 'src/chart/common/behavior/sunburst_ring_expander.dart'
show SunburstRingExpander;
export 'src/chart/common/behavior/zoom/initial_hint_behavior.dart'
show InitialHintBehavior;
export 'src/chart/common/behavior/zoom/pan_and_zoom_behavior.dart'
show PanAndZoomBehavior;
export 'src/chart/common/behavior/zoom/pan_behavior.dart'
show PanBehavior, PanningCompletedCallback;
export 'src/chart/common/behavior/zoom/panning_tick_provider.dart'
show PanningTickProviderMode;
export 'src/chart/common/canvas_shapes.dart'
show CanvasBarStack, CanvasPie, CanvasPieSlice, CanvasRect;
export 'src/chart/common/chart_canvas.dart'
show ChartCanvas, FillPatternType, BlendMode;
export 'src/chart/common/chart_context.dart' show ChartContext;
export 'src/chart/common/datum_details.dart'
show DatumDetails, DomainFormatter, MeasureFormatter;
export 'src/chart/common/processed_series.dart'
show ImmutableSeries, MutableSeries;
export 'src/chart/common/selection_model/selection_model.dart'
show
MutableSelectionModel,
SelectionModel,
SelectionModelType,
SelectionModelListener;
export 'src/chart/common/series_datum.dart' show SeriesDatum, SeriesDatumConfig;
export 'src/chart/common/series_renderer.dart'
show rendererIdKey, rendererKey, SeriesRenderer;
export 'src/chart/common/series_renderer_config.dart'
show RendererAttributeKey, SeriesRendererConfig;
export 'src/chart/layout/layout_config.dart' show LayoutConfig, MarginSpec;
export 'src/chart/layout/layout_view.dart'
show
LayoutPosition,
LayoutView,
LayoutViewConfig,
LayoutViewPaintOrder,
LayoutViewPositionOrder,
ViewMargin,
ViewMeasuredSizes;
export 'src/chart/line/line_chart.dart' show LineChart;
export 'src/chart/line/line_renderer.dart' show LineRenderer;
export 'src/chart/line/line_renderer_config.dart' show LineRendererConfig;
export 'src/chart/pie/arc_label_decorator.dart'
show ArcLabelDecorator, ArcLabelLeaderLineStyleSpec, ArcLabelPosition;
export 'src/chart/pie/arc_renderer.dart' show ArcRenderer;
export 'src/chart/pie/arc_renderer_config.dart' show ArcRendererConfig;
export 'src/chart/pie/pie_chart.dart' show PieChart;
export 'src/chart/scatter_plot/comparison_points_decorator.dart'
show ComparisonPointsDecorator;
export 'src/chart/scatter_plot/point_renderer.dart'
show
boundsLineRadiusPxKey,
boundsLineRadiusPxFnKey,
pointSymbolRendererFnKey,
pointSymbolRendererIdKey,
PointRenderer,
PointRendererElement;
export 'src/chart/scatter_plot/point_renderer_config.dart'
show PointRendererConfig;
export 'src/chart/scatter_plot/point_renderer_decorator.dart'
show PointRendererDecorator;
export 'src/chart/scatter_plot/scatter_plot_chart.dart' show ScatterPlotChart;
export 'src/chart/scatter_plot/symbol_annotation_renderer.dart'
show SymbolAnnotationRenderer;
export 'src/chart/sunburst/sunburst_chart.dart' show SunburstChart;
export 'src/chart/sunburst/sunburst_arc_renderer.dart' show SunburstArcRenderer;
export 'src/chart/sunburst/sunburst_arc_renderer_config.dart'
show SunburstArcRendererConfig, SunburstColorStrategy;
export 'src/chart/sunburst/sunburst_arc_label_decorator.dart'
show SunburstArcLabelDecorator;
export 'src/chart/scatter_plot/symbol_annotation_renderer_config.dart'
show SymbolAnnotationRendererConfig;
export 'src/chart/time_series/time_series_chart.dart' show TimeSeriesChart;
export 'src/chart/treemap/squarified_treemap_renderer.dart'
show SquarifiedTreeMapRenderer;
export 'src/chart/treemap/treemap_chart.dart' show TreeMapChart;
export 'src/chart/treemap/treemap_label_decorator.dart'
show TreeMapLabelDecorator;
export 'src/chart/treemap/treemap_renderer_config.dart'
show TreeMapRendererConfig, TreeMapTileType;
export 'src/common/color.dart' show Color;
export 'src/common/date_time_factory.dart'
show DateTimeFactory, LocalDateTimeFactory, UTCDateTimeFactory;
export 'src/common/gesture_listener.dart' show GestureListener;
export 'src/common/graphics_factory.dart' show GraphicsFactory;
export 'src/common/line_style.dart' show LineStyle;
export 'src/common/material_palette.dart' show MaterialPalette;
export 'src/common/math.dart' show NullablePoint;
export 'src/common/performance.dart' show Performance;
export 'src/common/proxy_gesture_listener.dart' show ProxyGestureListener;
export 'src/common/rtl_spec.dart' show AxisDirection, RTLSpec;
export 'src/common/style/material_style.dart' show MaterialStyle;
export 'src/common/style/style_factory.dart' show StyleFactory;
export 'src/common/symbol_renderer.dart'
show
CircleSymbolRenderer,
CylinderSymbolRenderer,
LineSymbolRenderer,
PointSymbolRenderer,
RectSymbolRenderer,
RectangleRangeSymbolRenderer,
RoundedRectSymbolRenderer,
SymbolRenderer,
TriangleSymbolRenderer;
export 'src/common/text_element.dart'
show TextElement, TextDirection, MaxWidthStrategy;
export 'src/common/text_measurement.dart' show TextMeasurement;
export 'src/common/text_style.dart' show TextStyle;
export 'src/data/series.dart' show AttributeKey, Series, TypedAccessorFn;
export 'src/data/tree.dart' show Tree, TreeNode;
//
// DO NOT ADD ANYTHING BELOW THIS. IT WILL BREAK OPENSOURCE.
//
================================================
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_chart.dart
================================================
// Copyright 2018 the Charts project authors. Please see the AUTHORS file
// for details.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import 'dart:collection' show LinkedHashMap;
import '../bar/bar_renderer.dart' show BarRenderer;
import '../cartesian/axis/axis.dart' show NumericAxis;
import '../cartesian/cartesian_chart.dart' show OrdinalCartesianChart;
import '../common/series_renderer.dart' show SeriesRenderer;
import '../layout/layout_config.dart' show LayoutConfig;
class BarChart extends OrdinalCartesianChart {
BarChart(
{bool? vertical,
LayoutConfig? layoutConfig,
NumericAxis? primaryMeasureAxis,
NumericAxis? secondaryMeasureAxis,
LinkedHashMap<String, NumericAxis>? disjointMeasureAxes})
: super(
vertical: vertical,
layoutConfig: layoutConfig,
primaryMeasureAxis: primaryMeasureAxis,
secondaryMeasureAxis: secondaryMeasureAxis,
disjointMeasureAxes: disjointMeasureAxes);
@override
SeriesRenderer<String> makeDefaultRenderer() {
return BarRenderer<String>()..rendererId = SeriesRenderer.defaultRendererId;
}
}
================================================
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_error_decorator.dart
================================================
// Copyright 2018 the Charts project authors. Please see the AUTHORS file
// for details.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import 'dart:math';
import '../../common/color.dart' show Color;
import '../../common/graphics_factory.dart' show GraphicsFactory;
import '../common/chart_canvas.dart' show ChartCanvas;
import 'bar_renderer.dart' show ImmutableBarRendererElement;
import 'bar_renderer_decorator.dart' show BarRendererDecorator;
import '../cartesian/axis/axis.dart' show ImmutableAxis, measureAxisKey;
/// Decorates bars with error whiskers.
///
/// Used to represent confidence intervals for bar charts.
class BarErrorDecorator<D> extends BarRendererDecorator<D> {
static const Color _defaultStrokeColor = Color.black;
static const double _defaultStrokeWidthPx = 1;
static const double _defaultEndpointLengthPx = 16;
static const Color _defaultOutlineColor = Color.white;
static const double _defaultOutlineWidthPx = 0;
final double strokeWidthPx;
final double endpointLengthPx;
final double outlineWidthPx;
final Color strokeColor;
final Color outlineColor;
BarErrorDecorator(
{this.strokeColor = _defaultStrokeColor,
this.strokeWidthPx = _defaultStrokeWidthPx,
this.endpointLengthPx = _defaultEndpointLengthPx,
this.outlineWidthPx = _defaultOutlineWidthPx,
this.outlineColor = _defaultOutlineColor});
@override
void decorate(
Iterable<ImmutableBarRendererElement<D>> barElements,
ChartCanvas canvas,
GraphicsFactory graphicsFactory, {
required Rectangle<num> drawBounds,
required double animationPercent,
required bool renderingVertically,
bool rtl = false,
}) {
// Only decorate the bars when animation is at 100%.
if (animationPercent != 1.0) {
return;
}
for (var element in barElements) {
final bounds = element.bounds!;
final datumIndex = element.index;
final series = element.series!;
final measureLowerBoundFn = series.measureLowerBoundFn;
final measureUpperBoundFn = series.measureUpperBoundFn;
if (measureLowerBoundFn != null && measureUpperBoundFn != null) {
final measureOffsetFn = series.measureOffsetFn!;
final measureAxis =
series.getAttr(measureAxisKey) as ImmutableAxis<num>;
if (renderingVertically) {
final startY = measureAxis.getLocation(
(measureLowerBoundFn(datumIndex) ?? 0) +
measureOffsetFn(datumIndex)!)!;
final endY = measureAxis.getLocation(
(measureUpperBoundFn(datumIndex) ?? 0) +
measureOffsetFn(datumIndex)!)!;
if (startY != endY) {
final barWidth = bounds.right - bounds.left;
final x = (bounds.left + bounds.right) / 2;
final rectWidth =
min(strokeWidthPx + 2 * outlineWidthPx, barWidth.toDouble());
final strokeWidth = rectWidth - 2 * outlineWidthPx;
final rectEndpointLength =
min(endpointLengthPx + 2 * outlineWidthPx, barWidth.toDouble());
final endpointLength = rectEndpointLength - 2 * outlineWidthPx;
if (outlineWidthPx > 0) {
// Draw rectangle rendering the outline for the vertical line.
canvas.drawRect(
Rectangle.fromPoints(Point(x - rectWidth / 2, startY),
Point(x + rectWidth / 2, endY)),
fill: outlineColor,
strokeWidthPx: outlineWidthPx);
// Draw rectangle rendering the outline for the horizontal
// endpoint representing the lower bound.
canvas.drawRect(
Rectangle(x - rectEndpointLength / 2, startY - rectWidth / 2,
rectEndpointLength, rectWidth),
fill: outlineColor,
strokeWidthPx: outlineWidthPx);
// Draw rectangle rendering the outline for the horizontal
// endpoint representing the upper bound.
canvas.drawRect(
Rectangle(x - rectEndpointLength / 2, endY - rectWidth / 2,
rectEndpointLength, rectWidth),
fill: outlineColor,
strokeWidthPx: outlineWidthPx);
}
// Draw vertical whisker line.
canvas.drawLine(
points: [Point(x, startY), Point(x, endY)],
stroke: strokeColor,
strokeWidthPx: strokeWidth);
// Draw horizontal whisker line for the lower bound.
canvas.drawLine(points: [
Point(x - endpointLength / 2, startY),
Point(x + endpointLength / 2, startY)
], stroke: strokeColor, strokeWidthPx: strokeWidth);
// Draw horizontal whisker line for the upper bound.
canvas.drawLine(points: [
Point(x - endpointLength / 2, endY),
Point(x + endpointLength / 2, endY)
], stroke: strokeColor, strokeWidthPx: strokeWidth);
}
} else {
final startX = measureAxis.getLocation(
(measureLowerBoundFn(datumIndex) ?? 0) +
measureOffsetFn(datumIndex)!)!;
final endX = measureAxis.getLocation(
(measureUpperBoundFn(datumIndex) ?? 0) +
measureOffsetFn(datumIndex)!)!;
if (startX != endX) {
final barWidth = bounds.bottom - bounds.top;
final y = (bounds.top + bounds.bottom) / 2;
final rectWidth =
min(strokeWidthPx + 2 * outlineWidthPx, barWidth.toDouble());
final strokeWidth = rectWidth - 2 * outlineWidthPx;
final rectEndpointLength =
min(endpointLengthPx + 2 * outlineWidthPx, barWidth.toDouble());
final endpointLength = rectEndpointLength - 2 * outlineWidthPx;
if (outlineWidthPx > 0) {
// Draw rectangle rendering the outline for the horizontal line.
canvas.drawRect(
Rectangle.fromPoints(Point(startX, y - rectWidth / 2),
Point(endX, y + rectWidth / 2)),
fill: outlineColor,
strokeWidthPx: outlineWidthPx);
// Draw rectangle rendering the outline for the vertical
// endpoint representing the lower bound.
canvas.drawRect(
Rectangle(startX - rectWidth / 2, y - rectEndpointLength / 2,
rectWidth, rectEndpointLength),
fill: outlineColor,
strokeWidthPx: outlineWidthPx);
// Draw rectangle rendering the outline for the vertical
// endpoint representing the upper bound.
canvas.drawRect(
Rectangle(endX - rectWidth / 2, y - rectEndpointLength / 2,
rectWidth, rectEndpointLength),
fill: outlineColor,
strokeWidthPx: outlineWidthPx);
}
// Draw horizontal whisker line.
canvas.drawLine(
points: [Point(startX, y), Point(endX, y)],
stroke: strokeColor,
strokeWidthPx: strokeWidth);
// Draw vertical whisker line for the lower bound.
canvas.drawLine(points: [
Point(startX, y - endpointLength / 2),
Point(startX, y + endpointLength / 2)
], stroke: strokeColor, strokeWidthPx: strokeWidth);
// Draw vertical whisker line for the upper bound.
canvas.drawLine(points: [
Point(endX, y - endpointLength / 2),
Point(endX, y + endpointLength / 2)
], stroke: strokeColor, strokeWidthPx: strokeWidth);
}
}
}
}
}
}
================================================
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_label_decorator.dart
================================================
// Copyright 2018 the Charts project authors. Please see the AUTHORS file
// for details.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import 'dart:math' show Rectangle;
import '../../common/color.dart' show Color;
import '../../common/graphics_factory.dart' show GraphicsFactory;
import '../../common/text_element.dart' show TextDirection, TextElement;
import '../../common/text_style.dart' show TextStyle;
import '../../data/series.dart' show AccessorFn;
import '../cartesian/axis/spec/axis_spec.dart' show TextStyleSpec;
import '../common/chart_canvas.dart' show ChartCanvas;
import 'bar_renderer.dart' show ImmutableBarRendererElement;
import 'bar_renderer_decorator.dart' show BarRendererDecorator;
class BarLabelDecorator<D> extends BarRendererDecorator<D> {
// Default configuration
static const _defaultLabelPosition = BarLabelPosition.auto;
static const _defaultLabelPadding = 5;
static const _defaultLabelPlacement = BarLabelPlacement.followMeasureAxis;
static const _defaultHorizontalLabelAnchor = BarLabelAnchor.start;
static const _defaultVerticalLabelAnchor = BarLabelAnchor.end;
static final _defaultInsideLabelStyle =
TextStyleSpec(fontSize: 12, color: Color.white);
static final _defaultOutsideLabelStyle =
TextStyleSpec(fontSize: 12, color: Color.black);
static final _labelSplitPattern = '\n';
static final _defaultMultiLineLabelPadding = 2;
/// Configures [TextStyleSpec] for labels placed inside the bars.
final TextStyleSpec insideLabelStyleSpec;
/// Configures [TextStyleSpec] for labels placed outside the bars.
final TextStyleSpec outsideLabelStyleSpec;
/// Configures where to place the label relative to the bars.
final BarLabelPosition labelPosition;
/// Configures where to place the label relative to the axis.
final BarLabelPlacement labelPlacement;
/// For labels drawn inside the bar, configures label anchor position.
final BarLabelAnchor? labelAnchor;
/// Space before and after the label text.
final int labelPadding;
BarLabelDecorator(
{TextStyleSpec? insideLabelStyleSpec,
TextStyleSpec? outsideLabelStyleSpec,
this.labelAnchor,
this.labelPosition = _defaultLabelPosition,
this.labelPlacement = _defaultLabelPlacement,
this.labelPadding = _defaultLabelPadding})
: insideLabelStyleSpec = insideLabelStyleSpec ?? _defaultInsideLabelStyle,
outsideLabelStyleSpec =
outsideLabelStyleSpec ?? _defaultOutsideLabelStyle;
@override
void decorate(Iterable<ImmutableBarRendererElement<D>> barElements,
ChartCanvas canvas, GraphicsFactory graphicsFactory,
{required Rectangle<int> drawBounds,
required double animationPercent,
required bool renderingVertically,
bool rtl = false}) {
// Only decorate the bars when animation is at 100%.
if (animationPercent != 1.0) {
return;
}
if (renderingVertically) {
_decorateVerticalBars(
barElements, canvas, graphicsFactory, drawBounds, rtl);
} else {
_decorateHorizontalBars(
barElements, canvas, graphicsFactory, drawBounds, rtl);
}
}
void _decorateVerticalBars(
Iterable<ImmutableBarRendererElement<D>> barElements,
ChartCanvas canvas,
GraphicsFactory graphicsFactory,
Rectangle<int> drawBounds,
bool rtl) {
// Create [TextStyle] from [TextStyleSpec] to be used by all the elements.
// The [GraphicsFactory] is needed so it can't be created earlier.
final insideLabelStyle =
_getTextStyle(graphicsFactory, insideLabelStyleSpec);
final outsideLabelStyle =
_getTextStyle(graphicsFactory, outsideLabelStyleSpec);
for (var element in barElements) {
final labelFn = element.series!.labelAccessorFn;
final measureFn = element.series!.measureFn;
final datumIndex = element.index;
final label = labelFn?.call(datumIndex);
final measure = measureFn(datumIndex) ?? 0.0;
// If there are custom styles, use that instead of the default or the
// style defined for the entire decorator.
final datumInsideLabelStyle = _getDatumStyle(
element.series!.insideLabelStyleAccessorFn,
datumIndex,
graphicsFactory,
defaultStyle: insideLabelStyle);
final datumOutsideLabelStyle = _getDatumStyle(
element.series!.outsideLabelStyleAccessorFn,
datumIndex,
graphicsFactory,
defaultStyle: outsideLabelStyle);
// Skip calculation and drawing for this element if no label.
if (label == null || label.isEmpty) {
continue;
}
var labelElements = label
.split(_labelSplitPattern)
.map((labelPart) => graphicsFactory.createTextElement(labelPart));
final bounds = element.bounds!;
// Get space available inside and outside the bar.
final totalPadding = labelPadding * 2;
final insideBarHeight = bounds.height - totalPadding;
var calculatedLabelPosition = labelPosition;
if (calculatedLabelPosition == BarLabelPosition.auto) {
// For auto, first try to fit the text inside the bar.
labelElements = labelElements.map(
(labelElement) => labelElement..textStyle = datumInsideLabelStyle);
final labelMaxWidth = labelElements
.map(
(labelElement) => labelElement.measurement.horizontalSliceWidth)
.fold<double>(0, (max, current) => max > current ? max : current);
// Total label height depends on the label element's text style.
final totalLabelHeight = _getTotalLabelHeight(labelElements);
// A label fits if the length and width of the text fits.
calculatedLabelPosition =
totalLabelHeight < insideBarHeight && labelMaxWidth < bounds.width
? BarLabelPosition.inside
: BarLabelPosition.outside;
}
// Set the max width, text style, and text direction.
labelElements = labelElements.map((labelElement) => labelElement
..textStyle = calculatedLabelPosition == BarLabelPosition.inside
? datumInsideLabelStyle
: datumOutsideLabelStyle
..maxWidth = bounds.width
..textDirection = rtl ? TextDirection.rtl : TextDirection.ltr);
// Total label height depends on the label element's text style.
final totalLabelHeight = _getTotalLabelHeight(labelElements);
var labelsDrawn = 0;
for (var labelElement in labelElements) {
// Calculate the start position of label based on [labelAnchor].
final int labelY;
final labelHeight = labelElement.measurement.verticalSliceWidth.round();
final offsetHeight =
(labelHeight + _defaultMultiLineLabelPadding) * labelsDrawn;
if (calculatedLabelPosition == BarLabelPosition.inside) {
final anchor = _resolveLabelAnchor(
measure, labelAnchor ?? _defaultVerticalLabelAnchor);
switch (anchor) {
case BarLabelAnchor.end:
labelY = bounds.top + labelPadding + offsetHeight;
break;
case BarLabelAnchor.middle:
labelY = (bounds.bottom -
bounds.height / 2 -
totalLabelHeight / 2 +
offsetHeight)
.round();
break;
case BarLabelAnchor.start:
labelY = bounds.bottom -
labelPadding -
totalLabelHeight +
offsetHeight;
break;
}
} else {
// calculatedLabelPosition == LabelPosition.outside
if (measure < 0 &&
labelPlacement == BarLabelPlacement.opposeAxisBaseline) {
labelY = bounds.bottom + labelPadding + offsetHeight;
} else {
labelY =
bounds.top - labelPadding - totalLabelHeight + offsetHeight;
}
}
// Center the label inside the bar.
final labelX = (bounds.left +
bounds.width / 2 -
labelElement.measurement.horizontalSliceWidth / 2)
.round();
canvas.drawText(labelElement, labelX, labelY);
labelsDrawn += 1;
}
}
}
void _decorateHorizontalBars(
Iterable<ImmutableBarRendererElement<D>> barElements,
ChartCanvas canvas,
GraphicsFactory graphicsFactory,
Rectangle<int> drawBounds,
bool rtl) {
// Create [TextStyle] from [TextStyleSpec] to be used by all the elements.
// The [GraphicsFactory] is needed so it can't be created earlier.
final insideLabelStyle =
_getTextStyle(graphicsFactory, insideLabelStyleSpec);
final outsideLabelStyle =
_getTextStyle(graphicsFactory, outsideLabelStyleSpec);
for (var element in barElements) {
final labelFn = element.series!.labelAccessorFn;
final measureFn = element.series!.measureFn;
final datumIndex = element.index;
final label = labelFn?.call(datumIndex);
final measure = measureFn(datumIndex) ?? 0.0;
// If there are custom styles, use that instead of the default or the
// style defined for the entire decorator.
final datumInsideLabelStyle = _getDatumStyle(
element.series!.insideLabelStyleAccessorFn,
datumIndex,
graphicsFactory,
defaultStyle: insideLabelStyle);
final datumOutsideLabelStyle = _getDatumStyle(
element.series!.outsideLabelStyleAccessorFn,
datumIndex,
graphicsFactory,
defaultStyle: outsideLabelStyle);
// Skip calculation and drawing for this element if no label.
if (label == null || label.isEmpty) {
continue;
}
final bounds = element.bounds!;
// Get space available inside and outside the bar.
final totalPadding = labelPadding * 2;
final insideBarWidth = bounds.width - totalPadding;
final outsideBarWidth = drawBounds.width - bounds.width - totalPadding;
final labelElement = graphicsFactory.createTextElement(label);
var calculatedLabelPosition = labelPosition;
if (calculatedLabelPosition == BarLabelPosition.auto) {
// For auto, first try to fit the text inside the bar.
labelElement.textStyle = datumInsideLabelStyle;
// A label fits if the space inside the bar is >= outside bar or if the
// length of the text fits and the space. This is because if the bar has
// more space than the outside, it makes more sense to place the label
// inside the bar, even if the entire label does not fit.
calculatedLabelPosition = (insideBarWidth >= outsideBarWidth ||
labelElement.measurement.horizontalSliceWidth < insideBarWidth)
? BarLabelPosition.inside
: BarLabelPosition.outside;
}
// Set the max width and text style.
if (calculatedLabelPosition == BarLabelPosition.inside) {
labelElement.textStyle = datumInsideLabelStyle;
labelElement.maxWidth = insideBarWidth;
} else {
// calculatedLabelPosition == LabelPosition.outside
labelElement.textStyle = datumOutsideLabelStyle;
labelElement.maxWidth = outsideBarWidth;
}
// Only calculate and draw label if there's actually space for the label.
if (labelElement.maxWidth! < 0 ||
(labelElement.maxWidthStrategy == null &&
labelElement.measurement.horizontalSliceWidth >
labelElement.maxWidth!)) {
return;
}
// Calculate the start position of label based on [labelAnchor].
final int labelX;
if (calculatedLabelPosition == BarLabelPosition.inside) {
final anchor = _resolveLabelAnchor(
measure, labelAnchor ?? _defaultHorizontalLabelAnchor);
switch (anchor) {
case BarLabelAnchor.middle:
labelX = (bounds.left +
bounds.width / 2 -
labelElement.measurement.horizontalSliceWidth / 2)
.round();
labelElement.textDirection =
rtl ? TextDirection.rtl : TextDirection.ltr;
break;
case BarLabelAnchor.end:
case BarLabelAnchor.start:
final alignLeft = rtl
? (anchor == BarLabelAnchor.end)
: (anchor == BarLabelAnchor.start);
if (alignLeft) {
labelX = bounds.left + labelPadding;
labelElement.textDirection = TextDirection.ltr;
} else {
labelX = bounds.right - labelPadding;
labelElement.textDirection = TextDirection.rtl;
}
break;
}
} else {
// calculatedLabelPosition == LabelPosition.outside
if (measure < 0 &&
labelPlacement == BarLabelPlacement.opposeAxisBaseline) {
labelX = bounds.left - labelPadding;
labelElement.textDirection = TextDirection.rtl;
} else {
labelX = bounds.right + labelPadding;
labelElement.textDirection = TextDirection.ltr;
}
}
// Center the label inside the bar.
final labelY = (bounds.top +
(bounds.bottom - bounds.top) / 2 -
labelElement.measurement.verticalSliceWidth / 2)
.round();
canvas.drawText(labelElement, labelX, labelY);
}
}
/// Helper function to get the total height for a group of labels.
/// This includes the padding in between the labels.
int _getTotalLabelHeight(Iterable<TextElement> labelElements) =>
(labelElements.first.measurement.verticalSliceWidth *
labelElements.length)
.round() +
_defaultMultiLineLabelPadding * (labelElements.length - 1);
// Helper function that converts [TextStyleSpec] to [TextStyle].
TextStyle _getTextStyle(
GraphicsFactory graphicsFactory, TextStyleSpec? labelSpec) {
return graphicsFactory.createTextPaint()
..color = labelSpec?.color ?? Color.black
..fontFamily = labelSpec?.fontFamily
..fontSize = labelSpec?.fontSize ?? 12
..lineHeight = labelSpec?.lineHeight;
}
/// Helper function to get datum specific style
TextStyle _getDatumStyle(
AccessorFn<TextStyleSpec>? labelFn,
int? datumIndex,
GraphicsFactory graphicsFactory, {
required TextStyle defaultStyle,
}) {
final styleSpec = labelFn?.call(datumIndex);
return (styleSpec != null)
? _getTextStyle(graphicsFactory, styleSpec)
: defaultStyle;
}
/// Helper function to get the bar label anchor when [BarLabelPostion] is
/// inside.
BarLabelAnchor _resolveLabelAnchor(num measure, BarLabelAnchor anchor) {
if (labelPlacement == BarLabelPlacement.opposeAxisBaseline) {
if (measure >= 0) return anchor;
if (anchor == BarLabelAnchor.start) return BarLabelAnchor.end;
if (anchor == BarLabelAnchor.end) return BarLabelAnchor.start;
return anchor;
}
return anchor;
}
}
/// Configures where to place the label relative to the bars.
enum BarLabelPosition {
/// Automatically try to place the label inside the bar first and place it on
/// the outside of the space available outside the bar is greater than space
/// available inside the bar.
auto,
/// Always place label on the outside.
outside,
/// Always place label on the inside.
inside,
}
/// Configures where to place the label relative to the axis.
enum BarLabelPlacement {
/// Places the label with respect to the increase in measure axis units. The
/// bar end is the most positive position along the axis.
///
/// This is the default placement.
followMeasureAxis,
/// Places the label with respect to the zero baseline. The bar end is the
/// absolute value aways from the zero baseline.
opposeAxisBaseline,
}
/// Configures where to anchor the label for labels drawn inside the bars.
enum BarLabelAnchor {
/// Anchor to the measure start.
start,
/// Anchor to the middle of the measure range.
middle,
/// Anchor to the measure end.
end,
}
================================================
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_lane_renderer.dart
================================================
// Copyright 2018 the Charts project authors. Please see the AUTHORS file
// for details.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import 'dart:collection' show LinkedHashMap;
import 'package:collection/collection.dart' show IterableExtension;
import '../../data/series.dart' show AttributeKey;
import '../cartesian/axis/axis.dart'
show ImmutableAxis, domainAxisKey, measureAxisKey;
import '../common/chart_canvas.dart' show ChartCanvas;
import '../common/processed_series.dart' show ImmutableSeries, MutableSeries;
import 'bar_lane_renderer_config.dart' show BarLaneRendererConfig;
import 'bar_renderer.dart' show AnimatedBar, BarRenderer, BarRendererElement;
import 'base_bar_renderer.dart'
show
allBarGroupWeightsKey,
barGroupCountKey,
barGroupIndexKey,
barGroupWeightKey,
previousBarGroupWeightKey,
stackKeyKey;
/// Key for storing a list of all domain values that exist in the series data.
///
/// In grouped stacked mode, this list will contain a combination of domain
/// value and series category.
const domainValuesKey =
AttributeKey<Set<Object>>('BarLaneRenderer.domainValues');
/// Renders series data as a series of bars with lanes.
///
/// Every stack of bars will have a swim lane rendered underneath the series
/// data, in a gray color by default. The swim lane occupies the same width as
/// the bar elements, and will be completely covered up if the bar stack happens
/// to take up the entire measure domain range.
///
/// If every bar that shares a domain value has a null measure value, then the
/// swim lanes may optionally be merged together into one wide lane that covers
/// the full domain range band width.
class BarLaneRenderer<D> extends BarRenderer<D> {
/// Store a map of domain+barGroupIndex+category index to bar lanes in a
/// stack.
///
/// This map is used to render all the bars in a stack together, to account
/// for rendering effects that need to take the full stack into account (e.g.
/// corner rounding).
///
/// [LinkedHashMap] is used to render the bars on the canvas in the same order
/// as the data was given to the chart. For the case where both grouping and
/// stacking are disabled, this means that bars for data later in the series
/// will be drawn "on top of" bars earlier in the series.
// ignore: prefer_collection_literals, https://github.com/dart-lang/linter/issues/1649
final _barLaneStackMap = LinkedHashMap<String, List<AnimatedBar<D>>>();
/// Store a map of flags to track whether all measure values for a given
/// domain value are null, for every series on the chart.
// ignore: prefer_collection_literals, https://github.com/dart-lang/linter/issues/1649
final _allMeasuresForDomainNullMap = LinkedHashMap<D, bool>();
factory BarLaneRenderer({
BarLaneRendererConfig? config,
String? rendererId,
}) {
rendererId ??= 'bar';
config ??= BarLaneRendererConfig();
return BarLaneRenderer._internal(config: config, rendererId: rendererId);
}
BarLaneRenderer._internal({
required BarLaneRendererConfig config,
required String rendererId,
}) : super.internal(config: config, rendererId: rendererId);
@override
void preprocessSeries(List<MutableSeries<D>> seriesList) {
super.preprocessSeries(seriesList);
_allMeasuresForDomainNullMap.clear();
seriesList.forEach((MutableSeries<D> series) {
final domainFn = series.domainFn;
final measureFn = series.rawMeasureFn;
final domainValues = <D>{};
for (var barIndex = 0; barIndex < series.data.length; barIndex++) {
final domain = domainFn(barIndex);
final measure = measureFn(barIndex);
domainValues.add(domain);
// Update the "all measure null" tracking for bars that have the
// current domain value.
if ((config as BarLaneRendererConfig).mergeEmptyLanes) {
final allNull = _allMeasuresForDomainNullMap[domain];
final isNull = measure == null;
_allMeasuresForDomainNullMap[domain] =
allNull != null ? allNull && isNull : isNull;
}
}
series.setAttr(domainValuesKey, domainValues);
});
}
@override
void update(List<ImmutableSeries<D>> seriesList, bool isAnimatingThisDraw) {
super.update(seriesList, isAnimatingThisDraw);
// Add gray bars to render under every bar stack.
seriesList.forEach((ImmutableSeries<D> series) {
var domainValues = series.getAttr(domainValuesKey) as Set<D>;
final domainAxis = series.getAttr(domainAxisKey) as ImmutableAxis<D>;
final measureAxis = series.getAttr(measureAxisKey) as ImmutableAxis<num>;
final seriesStackKey = series.getAttr(stackKeyKey);
final barGroupCount = series.getAttr(barGroupCountKey)!;
final barGroupIndex = series.getAttr(barGroupIndexKey)!;
final previousBarGroupWeight = series.getAttr(previousBarGroupWeightKey);
final barGroupWeight = series.getAttr(barGroupWeightKey);
final allBarGroupWeights = series.getAttr(allBarGroupWeightsKey);
final measureAxisPosition = measureAxis.getLocation(0.0);
final maxMeasureValue = _getMaxMeasureValue(measureAxis);
// Create a fake series for [BarLabelDecorator] to use when looking up the
// index of each datum.
final laneSeries =
MutableSeries<D>.clone(seriesList[0] as MutableSeries<D>);
laneSeries.data = <Object>[];
// Don't render any labels on the swim lanes.
laneSeries.labelAccessorFn = (int? index) => '';
var laneSeriesIndex = 0;
domainValues.forEach((D domainValue) {
// Skip adding any background bars if they will be covered up by the
// domain-spanning null bar.
if (_allMeasuresForDomainNullMap[domainValue] == true) {
return;
}
// Add a fake datum to the series for [BarLabelDecorator].
final datum = {'index': laneSeriesIndex};
laneSeries.data.add(datum);
// Each bar should be stored in barStackMap in a structure that mirrors
// the visual rendering of the bars. Thus, they should be grouped by
// domain value, series category (by way of the stack keys that were
// generated for each series in the preprocess step), and bar group
// index to account for all combinations of grouping and stacking.
final barStackMapKey =
'${domainValue}__${seriesStackKey}__${barGroupIndex}';
final barKey = barStackMapKey + '0';
final barStackList = _barLaneStackMap.putIfAbsent(
barStackMapKey, () => <AnimatedBar<D>>[]);
// If we already have an AnimatingBar for that index, use it.
var animatingBar =
barStackList.firstWhereOrNull((bar) => bar.key == barKey);
// If we don't have any existing bar element, create a new bar and have
// it animate in from the domain axis.
if (animatingBar == null) {
animatingBar = makeAnimatedBar(
key: barKey,
series: laneSeries,
datum: datum,
barGroupIndex: barGroupIndex,
previousBarGroupWeight: previousBarGroupWeight,
barGroupWeight: barGroupWeight,
allBarGroupWeights: allBarGroupWeights,
color: (config as BarLaneRendererConfig).backgroundBarColor,
details: BarRendererElement<D>(),
domainValue: domainValue,
domainAxis: domainAxis,
domainWidth: domainAxis.rangeBand.round(),
fillColor: (config as BarLaneRendererConfig).backgroundBarColor,
measureValue: maxMeasureValue,
measureOffsetValue: 0.0,
measureAxisPosition: measureAxisPosition,
measureAxis: measureAxis,
numBarGroups: barGroupCount,
strokeWidthPx: config.strokeWidthPx,
measureIsNull: false,
measureIsNegative: false);
barStackList.add(animatingBar);
} else {
animatingBar
..datum = datum
..series = laneSeries
..domainValue = domainValue;
}
// Get the barElement we are going to setup.
// Optimization to prevent allocation in non-animating case.
final barElement = makeBarRendererElement(
barGroupIndex: barGroupIndex,
previousBarGroupWeight: previousBarGroupWeight,
barGroupWeight: barGroupWeight,
allBarGroupWeights: allBarGroupWeights,
color: (config as BarLaneRendererConfig).backgroundBarColor,
details: BarRendererElement<D>(),
domainValue: domainValue,
domainAxis: domainAxis,
domainWidth: domainAxis.rangeBand.round(),
fillColor: (config as BarLaneRendererConfig).backgroundBarColor,
measureValue: maxMeasureValue,
measureOffsetValue: 0.0,
measureAxisPosition: measureAxisPosition,
measureAxis: measureAxis,
numBarGroups: barGroupCount,
strokeWidthPx: config.strokeWidthPx,
measureIsNull: false,
measureIsNegative: false);
animatingBar.setNewTarget(barElement);
laneSeriesIndex++;
});
});
// Add domain-spanning bars to render when every measure value for every
// datum of a given domain is null.
if ((config as BarLaneRendererConfig).mergeEmptyLanes) {
// Use the axes from the first series.
final domainAxis =
seriesList[0].getAttr(domainAxisKey) as ImmutableAxis<D>;
final measureAxis =
seriesList[0].getAttr(measureAxisKey) as ImmutableAxis<num>;
final measureAxisPosition = measureAxis.getLocation(0.0);
final maxMeasureValue = _getMaxMeasureValue(measureAxis);
final barGroupIndex = 0;
final previousBarGroupWeight = 0.0;
final barGroupWeight = 1.0;
final barGroupCount = 1;
// Create a fake series for [BarLabelDecorator] to use when looking up the
// index of each datum. We don't care about any other series values for
// the merged lanes, so just clone the first series.
final mergedSeries =
MutableSeries<D>.clone(seriesList[0] as MutableSeries<D>);
mergedSeries.data = <Object>[];
// Add a label accessor that returns the empty lane label.
mergedSeries.labelAccessorFn =
(int? index) => (config as BarLaneRendererConfig).emptyLaneLabel;
var mergedSeriesIndex = 0;
_allMeasuresForDomainNullMap.forEach((D domainValue, bool allNull) {
if (allNull) {
// Add a fake datum to the series for [BarLabelDecorator].
final datum = {'index': mergedSeriesIndex};
mergedSeries.data.add(datum);
final barStackMapKey = '${domainValue}__allNull__';
final barKey = barStackMapKey + '0';
final barStackList = _barLaneStackMap.putIfAbsent(
barStackMapKey, () => <AnimatedBar<D>>[]);
// If we already have an AnimatingBar for that index, use it.
var animatingBar =
barStackList.firstWhereOrNull((bar) => bar.key == barKey);
// If we don't have any existing bar element, create a new bar and have
// it animate in from the domain axis.
if (animatingBar == null) {
animatingBar = makeAnimatedBar(
key: barKey,
series: mergedSeries,
datum: datum,
barGroupIndex: barGroupIndex,
previousBarGroupWeight: previousBarGroupWeight,
barGroupWeight: barGroupWeight,
color: (config as BarLaneRendererConfig).backgroundBarColor,
details: BarRendererElement<D>(),
domainValue: domainValue,
domainAxis: domainAxis,
domainWidth: domainAxis.rangeBand.round(),
fillColor: (config as BarLaneRendererConfig).backgroundBarColor,
measureValue: maxMeasureValue,
measureOffsetValue: 0.0,
measureAxisPosition: measureAxisPosition,
measureAxis: measureAxis,
numBarGroups: barGroupCount,
strokeWidthPx: config.strokeWidthPx,
measureIsNull: false,
measureIsNegative: false);
barStackList.add(animatingBar);
} else {
animatingBar
..datum = datum
..series = mergedSeries
..domainValue = domainValue;
}
// Get the barElement we are going to setup.
// Optimization to prevent allocation in non-animating case.
final barElement = makeBarRendererElement(
barGroupIndex: barGroupIndex,
previousBarGroupWeight: previousBarGroupWeight,
barGroupWeight: barGroupWeight,
color: (config as BarLaneRendererConfig).backgroundBarColor,
details: BarRendererElement<D>(),
domainValue: domainValue,
domainAxis: domainAxis,
domainWidth: domainAxis.rangeBand.round(),
fillColor: (config as BarLaneRendererConfig).backgroundBarColor,
measureValue: maxMeasureValue,
measureOffsetValue: 0.0,
measureAxisPosition: measureAxisPosition,
measureAxis: measureAxis,
numBarGroups: barGroupCount,
strokeWidthPx: config.strokeWidthPx,
measureIsNull: false,
measureIsNegative: false);
animatingBar.setNewTarget(barElement);
mergedSeriesIndex++;
}
});
}
}
/// Gets the maximum measure value that will fit in the draw area.
num _getMaxMeasureValue(ImmutableAxis<num> measureAxis) {
final pos = chart.vertical
? chart.drawAreaBounds.top
: isRtl
? chart.drawAreaBounds.left
: chart.drawAreaBounds.right;
return measureAxis.getDomain(pos.toDouble());
}
/// Paints the current bar data on the canvas.
@override
void paint(ChartCanvas canvas, double animationPercent) {
_barLaneStackMap.forEach((String stackKey, List<AnimatedBar<D>> barStack) {
// Turn this into a list so that the getCurrentBar isn't called more than
// once for each animationPercent if the barElements are iterated more
// than once.
final barElements = barStack
.map((animatingBar) => animatingBar.getCurrentBar(animationPercent))
.toList();
paintBar(canvas, animationPercent, barElements);
});
super.paint(canvas, animationPercent);
}
}
================================================
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_lane_renderer_config.dart
================================================
// Copyright 2018 the Charts project authors. Please see the AUTHORS file
// for details.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import '../../common/color.dart' show Color;
import '../../common/style/style_factory.dart' show StyleFactory;
import '../../common/symbol_renderer.dart';
import '../common/chart_canvas.dart' show FillPatternType;
import '../layout/layout_view.dart' show LayoutViewPaintOrder;
import 'bar_label_decorator.dart' show BarLabelDecorator;
import 'bar_lane_renderer.dart' show BarLaneRenderer;
import 'bar_renderer_config.dart' show BarRendererConfig, CornerStrategy;
import 'bar_renderer_decorator.dart' show BarRendererDecorator;
import 'base_bar_renderer_config.dart' show BarGroupingType;
/// Configuration for a bar lane renderer.
class BarLaneRendererConfig extends BarRendererConfig<String> {
/// The color of background bars.
final Color backgroundBarColor;
/// Label text to draw on a merged empty lane.
///
/// This will only be drawn if all of the measures for a domain are null, and
/// [mergeEmptyLanes] is enabled.
///
/// The renderer must be configured with a [BarLabelDecorator] for this label
/// to be drawn.
final String emptyLaneLabel;
/// Whether or not all lanes for a given domain value should be merged into
/// one wide lane if all measure values for said domain are null.
final bool mergeEmptyLanes;
BarLaneRendererConfig({
String? customRendererId,
CornerStrategy? cornerStrategy,
this.emptyLaneLabel = 'No data',
FillPatternType? fillPattern,
BarGroupingType? groupingType,
int layoutPaintOrder = LayoutViewPaintOrder.bar,
this.mergeEmptyLanes = false,
int minBarLengthPx = 0,
int stackedBarPaddingPx = 1,
double strokeWidthPx = 0.0,
BarRendererDecorator<String>? barRendererDecorator,
SymbolRenderer? symbolRenderer,
Color? backgroundBarColor,
List<int>? weightPattern,
}) : backgroundBarColor =
backgroundBarColor ?? StyleFactory.style.noDataColor,
super(
barRendererDecorator: barRendererDecorator,
cornerStrategy: cornerStrategy,
customRendererId: customRendererId,
groupingType: groupingType ?? BarGroupingType.grouped,
layoutPaintOrder: layoutPaintOrder,
minBarLengthPx: minBarLengthPx,
fillPattern: fillPattern,
stackedBarPaddingPx: stackedBarPaddingPx,
strokeWidthPx: strokeWidthPx,
symbolRenderer: symbolRenderer,
weightPattern: weightPattern,
);
@override
BarLaneRenderer<String> build() {
return BarLaneRenderer<String>(config: this, rendererId: customRendererId);
}
@override
bool operator ==(Object other) {
if (identical(this, other)) {
return true;
}
return other is BarLaneRendererConfig &&
other.backgroundBarColor == backgroundBarColor &&
other.emptyLaneLabel == emptyLaneLabel &&
other.mergeEmptyLanes == mergeEmptyLanes &&
super == other;
}
@override
int get hashCode {
var hash = super.hashCode;
hash = hash * 31 + backgroundBarColor.hashCode;
hash = hash * 31 + emptyLaneLabel.hashCode;
hash = hash * 31 + mergeEmptyLanes.hashCode;
return hash;
}
}
================================================
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_renderer.dart
================================================
// Copyright 2018 the Charts project authors. Please see the AUTHORS file
// for details.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import 'dart:math' show max, min, Rectangle;
import 'package:meta/meta.dart' show protected;
import '../../common/color.dart' show Color;
import '../../common/math.dart' show NullablePoint;
import '../cartesian/axis/axis.dart'
show ImmutableAxis, domainAxisKey, measureAxisKey;
import '../common/canvas_shapes.dart' show CanvasBarStack, CanvasRect;
import '../common/chart_canvas.dart' show ChartCanvas, FillPatternType;
import '../common/datum_details.dart' show DatumDetails;
import '../common/processed_series.dart' show ImmutableSeries, MutableSeries;
import '../common/series_datum.dart' show SeriesDatum;
import 'bar_renderer_config.dart' show BarRendererConfig, CornerStrategy;
import 'bar_renderer_decorator.dart' show BarRendererDecorator;
import 'base_bar_renderer.dart'
show
BaseBarRenderer,
allBarGroupWeightsKey,
barGroupCountKey,
barGroupIndexKey,
barGroupWeightKey,
previousBarGroupWeightKey;
import 'base_bar_renderer_element.dart'
show BaseAnimatedBar, BaseBarRendererElement;
/// Renders series data as a series of bars.
class BarRenderer<D>
extends BaseBarRenderer<D, BarRendererElement<D>, AnimatedBar<D>> {
/// If we are grouped, use this spacing between the bars in a group.
final _barGroupInnerPadding = 2;
/// The padding between bar stacks.
///
/// The padding comes out of the bottom of the bar.
final int _stackedBarPaddingPx;
final BarRendererDecorator<Object?>? barRendererDecorator;
factory BarRenderer({BarRendererConfig<D>? config, String? rendererId}) {
rendererId ??= 'bar';
config ??= BarRendererConfig();
return BarRenderer.internal(config: config, rendererId: rendererId);
}
/// This constructor is protected because it is used by child classes, which
/// cannot call the factory in their own constructors.
@protected
BarRenderer.internal({
required BarRendererConfig<Object?> config,
required String rendererId,
}) : barRendererDecorator = config.barRendererDecorator,
_stackedBarPaddingPx = config.stackedBarPaddingPx,
super(
config: config,
rendererId: rendererId,
layoutPaintOrder: config.layoutPaintOrder ?? 0);
@override
void configureSeries(List<MutableSeries<D>> seriesList) {
assignMissingColors(getOrderedSeriesList(seriesList),
emptyCategoryUsesSinglePalette: true);
}
@override
DatumDetails<D> addPositionToDetailsForSeriesDatum(
DatumDetails<D> details, SeriesDatum<D> seriesDatum) {
final series = details.series!;
final domainAxis = series.getAttr(domainAxisKey) as ImmutableAxis<D>;
final measureAxis = series.getAttr(measureAxisKey) as ImmutableAxis<num>;
final barGroupIndex = series.getAttr(barGroupIndexKey)!;
final previousBarGroupWeight = series.getAttr(previousBarGroupWeightKey);
final barGroupWeight = series.getAttr(barGroupWeightKey);
final allBarGroupWeights = series.getAttr(allBarGroupWeightsKey);
final numBarGroups = series.getAttr(barGroupCountKey)!;
final bounds = _getBarBounds(
details.domain,
domainAxis,
domainAxis.rangeBand.round(),
config.maxBarWidthPx,
details.measure,
details.measureOffset!,
measureAxis,
barGroupIndex,
previousBarGroupWeight,
barGroupWeight,
allBarGroupWeights,
numBarGroups);
NullablePoint chartPosition;
if (renderingVertically) {
chartPosition = NullablePoint(
(bounds.left + (bounds.width / 2)).toDouble(), bounds.top.toDouble());
} else {
chartPosition = NullablePoint(
isRtl ? bounds.left.toDouble() : bounds.right.toDouble(),
(bounds.top + (bounds.height / 2)).toDouble());
}
return DatumDetails.from(details,
chartPosition: chartPosition, bounds: bounds);
}
@override
BarRendererElement<D> getBaseDetails(dynamic datum, int index) {
return BarRendererElement<D>();
}
CornerStrategy get cornerStrategy {
return (config as BarRendererConfig).cornerStrategy;
}
/// Generates an [AnimatedBar] to represent the previous and current state
/// of one bar on the chart.
@override
AnimatedBar<D> makeAnimatedBar(
{required String key,
required ImmutableSeries<D> series,
List<int>? dashPattern,
dynamic datum,
Color? color,
required BarRendererElement<D> details,
D? domainValue,
required ImmutableAxis<D> domainAxis,
required int domainWidth,
num? measureValue,
required num measureOffsetValue,
required ImmutableAxis<num> measureAxis,
double? measureAxisPosition,
Color? fillColor,
FillPatternType? fillPattern,
double? strokeWidthPx,
required int barGroupIndex,
double? previousBarGroupWeight,
double? barGroupWeight,
List<double>? allBarGroupWeights,
required int numBarGroups,
bool? measureIsNull,
bool? measureIsNegative}) {
return AnimatedBar<D>(
key: key, datum: datum, series: series, domainValue: domainValue)
..setNewTarget(makeBarRendererElement(
color: color,
dashPattern: dashPattern,
details: details,
domainValue: domainValue,
domainAxis: domainAxis,
domainWidth: domainWidth,
measureValue: measureValue,
measureOffsetValue: measureOffsetValue,
measureAxisPosition: measureAxisPosition,
measureAxis: measureAxis,
fillColor: fillColor,
fillPattern: fillPattern,
strokeWidthPx: strokeWidthPx,
barGroupIndex: barGroupIndex,
previousBarGroupWeight: previousBarGroupWeight,
barGroupWeight: barGroupWeight,
allBarGroupWeights: allBarGroupWeights,
numBarGroups: numBarGroups,
measureIsNull: measureIsNull,
measureIsNegative: measureIsNegative));
}
/// Generates a [BarRendererElement] to represent the rendering data for one
/// bar on the chart.
@override
BarRendererElement<D> makeBarRendererElement(
{Color? color,
List<int>? dashPattern,
required BarRendererElement<D> details,
D? domainValue,
required ImmutableAxis<D> domainAxis,
required int domainWidth,
num? measureValue,
required num measureOffsetValue,
required ImmutableAxis<num> measureAxis,
double? measureAxisPosition,
Color? fillColor,
FillPatternType? fillPattern,
double? strokeWidthPx,
required int barGroupIndex,
double? previousBarGroupWeight,
double? barGroupWeight,
List<double>? allBarGroupWeights,
required int numBarGroups,
bool? measureIsNull,
bool? measureIsNegative}) {
return BarRendererElement<D>()
..color = color
..dashPattern = dashPattern
..fillColor = fillColor
..fillPattern = fillPattern
..measureAxisPosition = measureAxisPosition
..roundPx = details.roundPx
..strokeWidthPx = strokeWidthPx
..measureIsNull = measureIsNull
..measureIsNegative = measureIsNegative
..bounds = _getBarBounds(
domainValue,
domainAxis,
domainWidth,
config.maxBarWidthPx,
measureValue,
measureOffsetValue,
measureAxis,
barGroupIndex,
previousBarGroupWeight,
barGroupWeight,
allBarGroupWeights,
numBarGroups);
}
@override
void paintBar(ChartCanvas canvas, double animationPercent,
Iterable<BarRendererElement<D>> barElements) {
final bars = <CanvasRect>[];
// When adjusting bars for stacked bar padding, do not modify the first bar
// if rendering vertically and do not modify the last bar if rendering
// horizontally.
final unmodifiedBar =
renderingVertically ? barElements.first : barElements.last;
// Find the max bar width from each segment to calculate corner radius.
var maxBarWidth = 0;
var measureIsNegative = false;
for (var bar in barElements) {
var bounds = bar.bounds;
measureIsNegative = measureIsNegative || bar.measureIsNegative!;
if (bar != unmodifiedBar) {
bounds = renderingVertically
? Rectangle<int>(
bar.bounds!.left,
max(
0,
bar.bounds!.top +
(measureIsNegative ? _stackedBarPaddingPx : 0)),
bar.bounds!.width,
max(0, bar.bounds!.height - _stackedBarPaddingPx),
)
: Rectangle<int>(
max(
0,
bar.bounds!.left +
(measureIsNegative ? _stackedBarPaddingPx : 0)),
bar.bounds!.top,
max(0, bar.bounds!.width - _stackedBarPaddingPx),
bar.bounds!.height,
);
}
bars.add(CanvasRect(bounds!,
dashPattern: bar.dashPattern,
fill: bar.fillColor,
pattern: bar.fillPattern,
stroke: bar.color,
strokeWidthPx: bar.strokeWidthPx));
maxBarWidth =
max(maxBarWidth, renderingVertically ? bounds.width : bounds.height);
}
bool roundTopLeft;
bool roundTopRight;
bool roundBottomLeft;
bool roundBottomRight;
if (measureIsNegative) {
// Negative bars should be rounded towards the negative axis direction.
// In vertical mode, this is the bottom. In horizontal mode, this is the
// left side of the chart for LTR, or the right side for RTL.
roundTopLeft = !renderingVertically && !isRtl;
roundTopRight = !renderingVertically && isRtl;
roundBottomLeft = renderingVertically || !isRtl;
roundBottomRight = renderingVertically || isRtl;
} else {
// Positive bars should be rounded towards the positive axis direction.
// In vertical mode, this is the top. In horizontal mode, this is the
// right side of the chart for LTR, or the left side for RTL.
roundTopLeft = renderingVertically || isRtl;
roundTopRight = !isRtl;
roundBottomLeft = isRtl;
roundBottomRight = !(renderingVertically || isRtl);
}
final barStack = CanvasBarStack(
bars,
radius: cornerStrategy.getRadius(maxBarWidth),
stackedBarPadding: _stackedBarPaddingPx,
roundTopLeft: roundTopLeft,
roundTopRight: roundTopRight,
roundBottomLeft: roundBottomLeft,
roundBottomRight: roundBottomRight,
);
// If bar stack's range width is:
// * Within the component bounds, then draw the bar stack.
// * Partially out of component bounds, then clip the stack where it is out
// of bounds.
// * Fully out of component bounds, do not draw.
final componentBounds = this.componentBounds!;
final barOutsideBounds = renderingVertically
? barStack.fullStackRect.left < componentBounds.left ||
barStack.fullStackRect.right > componentBounds.right
: barStack.fullStackRect.top < componentBounds.top ||
barStack.fullStackRect.bottom > componentBounds.bottom;
// TODO: When we have initial viewport, add image test for
// clipping.
if (barOutsideBounds) {
final clipBounds = _getBarStackBounds(barStack.fullStackRect);
// Do not draw the bar stack if it is completely outside of the component
// bounds.
if (clipBounds.width <= 0 || clipBounds.height <= 0) {
return;
}
canvas.setClipBounds(clipBounds);
}
canvas.drawBarStack(barStack, drawAreaBounds: componentBounds);
if (barOutsideBounds) {
canvas.resetClipBounds();
}
// Decorate the bar segments if there is a decorator.
barRendererDecorator?.decorate(barElements, canvas, graphicsFactory!,
drawBounds: drawBounds!,
animationPercent: animationPercent,
renderingVertically: renderingVertically,
rtl: isRtl);
}
/// Calculate the clipping region for a rectangle that represents the full bar
/// stack.
Rectangle<int> _getBarStackBounds(Rectangle<int> barStackRect) {
int left;
int right;
int top;
int bottom;
final componentBounds = this.componentBounds!;
if (renderingVertically) {
// Only clip at the start and end so that the bar's width stays within
// the viewport, but any bar decorations above the bar can still show.
left = max(componentBounds.left, barStackRect.left);
right = min(componentBounds.right, barStackRect.right);
top = barStackRect.top;
bottom = barStackRect.bottom;
} else {
// Only clip at the top and bottom so that the bar's height stays within
// the viewport, but any bar decorations to the right of the bar can still
// show.
left = barStackRect.left;
right = barStackRect.right;
top = max(componentBounds.top, barStackRect.top);
bottom = min(componentBounds.bottom, barStackRect.bottom);
}
final width = right - left;
final height = bottom - top;
return Rectangle(left, top, width, height);
}
/// Generates a set of bounds that describe a bar.
Rectangle<int> _getBarBounds(
D? domainValue,
ImmutableAxis<D> domainAxis,
int domainWidth,
int? maxBarWidthPx,
num? measureValue,
num measureOffsetValue,
ImmutableAxis<num> measureAxis,
int barGroupIndex,
double? previousBarGroupWeight,
double? barGroupWeight,
List<double>? allBarGroupWeights,
int numBarGroups) {
// TODO: Investigate why this is negative for a DateTime domain
// in RTL mode.
domainWidth = domainWidth.abs();
// If no weights were passed in, default to equal weight per bar.
if (barGroupWeight == null) {
barGroupWeight = 1 / numBarGroups;
previousBarGroupWeight = barGroupIndex * barGroupWeight;
}
// Calculate how wide each bar should be within the group of bars. If we
// only have one series, or are stacked, then barWidth should equal
// domainWidth.
final spacingLoss = _barGroupInnerPadding * (numBarGroups - 1);
var desiredWidth = ((domainWidth - spacingLoss) / numBarGroups).round();
if (maxBarWidthPx != null) {
desiredWidth = min(desiredWidth, maxBarWidthPx);
domainWidth = desiredWidth * numBarGroups + spacingLoss;
}
// If the series was configured with a weight pattern, treat the "max" bar
// width as the average max width. The overall total width will still equal
// max times number of bars, but this results in a nicer final picture.
var barWidth = desiredWidth;
if (allBarGroupWeights != null) {
barWidth =
(desiredWidth * numBarGroups * allBarGroupWeights[barGroupIndex])
.round();
}
// Make sure that bars are at least one pixel wide, so that they will always
// be visible on the chart. Ideally we should do something clever with the
// size of the chart, and the density and periodicity of the data, but this
// at least ensures that dense charts still have visible data.
barWidth = max(1, barWidth);
// Flip bar group index for calculating location on the domain axis if RTL.
final adjustedBarGroupIndex =
isRtl ? numBarGroups - barGroupIndex - 1 : barGroupIndex;
// Calculate the start and end of the bar, taking into account accumulated
// padding for grouped bars.
final previousAverageWidth = adjustedBarGroupIndex > 0
? ((domainWidth - spacingLoss) *
(previousBarGroupWeight! / adjustedBarGroupIndex))
.round()
: 0;
final domainStart = (domainAxis.getLocation(domainValue)! -
(domainWidth / 2) +
(previousAverageWidth + _barGroupInnerPadding) *
adjustedBarGroupIndex)
.round();
final domainEnd = domainStart + barWidth;
measureValue ??= 0;
// Calculate measure locations. Stacked bars should have their
// offset calculated previously.
int measureStart;
int measureEnd;
if (measureValue < 0) {
measureEnd = measureAxis.getLocation(measureOffsetValue)!.round();
measureStart =
measureAxis.getLocation(measureValue + measureOffsetValue)!.round();
} else {
measureStart = measureAxis.getLocation(measureOffsetValue)!.round();
measureEnd =
measureAxis.getLocation(measureValue + measureOffsetValue)!.round();
}
Rectangle<int> bounds;
if (renderingVertically) {
// Rectangle clamps to zero width/height
bounds = Rectangle<int>(domainStart, measureEnd, domainEnd - domainStart,
measureStart - measureEnd);
} else {
// Rectangle clamps to zero width/height
bounds = Rectangle<int>(min(measureStart, measureEnd), domainStart,
(measureEnd - measureStart).abs(), domainEnd - domainStart);
}
return bounds;
}
@override
Rectangle<int>? getBoundsForBar(BarRendererElement<D> bar) => bar.bounds;
}
abstract class ImmutableBarRendererElement<D> {
ImmutableSeries<D>? get series;
dynamic get datum;
int? get index;
Rectangle<int>? get bounds;
}
class BarRendererElement<D> extends BaseBarRendererElement
implements ImmutableBarRendererElement<D> {
@override
ImmutableSeries<D>? series;
@override
Rectangle<int>? bounds;
int? roundPx;
@override
int? index;
dynamic _datum;
@override
dynamic get datum => _datum;
set datum(dynamic datum) {
_datum = datum;
index = series?.data.indexOf(datum);
}
BarRendererElement();
BarRendererElement.clone(BarRendererElement<D> other) : super.clone(other) {
series = other.series;
bounds = other.bounds;
roundPx = other.roundPx;
index = other.index;
_datum = other._datum;
}
@override
void updateAnimationPercent(BaseBarRendererElement previous,
BaseBarRendererElement target, double animationPercent) {
final localPrevious = previous as BarRendererElement<D>;
final localTarget = target as BarRendererElement<D>;
final previousBounds = localPrevious.bounds!;
final targetBounds = localTarget.bounds!;
var top = ((targetBounds.top - previousBounds.top) * animationPercent) +
previousBounds.top;
var right =
((targetBounds.right - previousBounds.right) * animationPercent) +
previousBounds.right;
var bottom =
((targetBounds.bottom - previousBounds.bottom) * animationPercent) +
previousBounds.bottom;
var left = ((targetBounds.left - previousBounds.left) * animationPercent) +
previousBounds.left;
bounds = Rectangle<int>(left.round(), top.round(), (right - left).round(),
(bottom - top).round());
roundPx = localTarget.roundPx;
super.updateAnimationPercent(previous, target, animationPercent);
}
}
class AnimatedBar<D> extends BaseAnimatedBar<D, BarRendererElement<D>> {
AnimatedBar(
{required String key,
required dynamic datum,
required ImmutableSeries<D> series,
required D? domainValue})
: super(key: key, datum: datum, series: series, domainValue: domainValue);
@override
void animateElementToMeasureAxisPosition(BaseBarRendererElement target) {
final localTarget = target as BarRendererElement<D>;
// TODO: Animate out bars in the middle of a stack.
localTarget.bounds = Rectangle<int>(
localTarget.bounds!.left + (localTarget.bounds!.width / 2).round(),
localTarget.measureAxisPosition!.round(),
0,
0);
}
@override
BarRendererElement<D> getCurrentBar(double animationPercent) {
final bar = super.getCurrentBar(animationPercent);
// Update with series and datum information to pass to bar decorator.
bar.series = series;
bar.datum = datum;
return bar;
}
@override
BarRendererElement<D> clone(BarRendererElement<D> bar) =>
BarRendererElement<D>.clone(bar);
}
================================================
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_renderer_config.dart
================================================
// Copyright 2018 the Charts project authors. Please see the AUTHORS file
// for details.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import '../../common/symbol_renderer.dart';
import '../common/chart_canvas.dart' show FillPatternType;
import '../layout/layout_view.dart' show LayoutViewPaintOrder;
import 'bar_renderer.dart' show BarRenderer;
import 'bar_renderer_decorator.dart' show BarRendererDecorator;
import 'base_bar_renderer_config.dart'
show BarGroupingType, BaseBarRendererConfig;
/// Configuration for a bar renderer.
class BarRendererConfig<D> extends BaseBarRendererConfig<D> {
/// Strategy for determining the corner radius of a bar.
final CornerStrategy cornerStrategy;
/// Decorator for optionally decorating painted bars.
final BarRendererDecorator<D>? barRendererDecorator;
BarRendererConfig({
String? customRendererId,
CornerStrategy? cornerStrategy,
FillPatternType? fillPattern,
BarGroupingType? groupingType,
int layoutPaintOrder = LayoutViewPaintOrder.bar,
int minBarLengthPx = 0,
int? maxBarWidthPx,
int stackedBarPaddingPx = 1,
double strokeWidthPx = 0.0,
this.barRendererDecorator,
SymbolRenderer? symbolRenderer,
List<int>? weightPattern,
}) : cornerStrategy = cornerStrategy ?? const ConstCornerStrategy(2),
super(
customRendererId: customRendererId,
groupingType: groupingType ?? BarGroupingType.grouped,
layoutPaintOrder: layoutPaintOrder,
minBarLengthPx: minBarLengthPx,
maxBarWidthPx: maxBarWidthPx,
fillPattern: fillPattern,
stackedBarPaddingPx: stackedBarPaddingPx,
strokeWidthPx: strokeWidthPx,
symbolRenderer: symbolRenderer,
weightPattern: weightPattern,
);
@override
BarRenderer<D> build() {
return BarRenderer<D>(config: this, rendererId: customRendererId);
}
@override
bool operator ==(Object other) {
if (identical(this, other)) {
return true;
}
return other is BarRendererConfig &&
other.cornerStrategy == cornerStrategy &&
super == other;
}
@override
int get hashCode {
var hash = super.hashCode;
hash = hash * 31 + cornerStrategy.hashCode;
return hash;
}
}
abstract class CornerStrategy {
/// Returns the radius of the rounded corners in pixels.
int getRadius(int barWidth);
}
/// Strategy for constant corner radius.
class ConstCornerStrategy implements CornerStrategy {
final int radius;
const ConstCornerStrategy(this.radius);
@override
int getRadius(_) => radius;
@override
bool operator ==(Object other) {
if (identical(this, other)) {
return true;
}
return other is ConstCornerStrategy && other.radius == radius;
}
@override
int get hashCode => radius.hashCode;
}
/// Strategy for no corner radius.
class NoCornerStrategy extends ConstCornerStrategy {
const NoCornerStrategy() : super(0);
@override
bool operator ==(other) => other is NoCornerStrategy;
@override
int get hashCode => 31;
}
================================================
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_renderer_decorator.dart
================================================
// Copyright 2018 the Charts project authors. Please see the AUTHORS file
// for details.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import 'dart:math' show Rectangle;
import '../../common/graphics_factory.dart' show GraphicsFactory;
import '../common/chart_canvas.dart' show ChartCanvas;
import 'bar_renderer.dart' show ImmutableBarRendererElement;
/// Decorates bars after the bars have already been painted.
abstract class BarRendererDecorator<D> {
const BarRendererDecorator();
void decorate(Iterable<ImmutableBarRendererElement<D>> barElements,
ChartCanvas canvas, GraphicsFactory graphicsFactory,
{required Rectangle<int> drawBounds,
required double animationPercent,
required bool renderingVertically,
bool rtl = false});
}
================================================
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_target_line_renderer.dart
================================================
// Copyright 2018 the Charts project authors. Please see the AUTHORS file
// for details.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import 'dart:math' show Point, Rectangle, max, min;
import '../../common/color.dart' show Color;
import '../../common/math.dart' show NullablePoint;
import '../cartesian/axis/axis.dart'
show ImmutableAxis, domainAxisKey, measureAxisKey;
import '../common/chart_canvas.dart' show ChartCanvas, FillPatternType;
import '../common/datum_details.dart' show DatumDetails;
import '../common/processed_series.dart' show ImmutableSeries, MutableSeries;
import '../common/series_datum.dart' show SeriesDatum;
import '../layout/layout_view.dart' show LayoutViewPaintOrder;
import 'bar_target_line_renderer_config.dart' show BarTargetLineRendererConfig;
import 'base_bar_renderer.dart'
show
BaseBarRenderer,
allBarGroupWeightsKey,
barGroupWeightKey,
barGroupCountKey,
barGroupIndexKey,
previousBarGroupWeightKey;
import 'base_bar_renderer_element.dart'
show BaseAnimatedBar, BaseBarRendererElement;
/// Renders series data as a series of bar target lines.
///
/// Usually paired with a BarRenderer to display target metrics alongside actual
/// metrics.
class BarTargetLineRenderer<D> extends BaseBarRenderer<D,
_BarTargetLineRendererElement, _AnimatedBarTargetLine<D>> {
/// If we are grouped, use this spacing between the bars in a group.
final _barGroupInnerPadding = 2;
/// Standard color for all bar target lines.
final _color = Color(r: 0, g: 0, b: 0, a: 153);
factory BarTargetLineRenderer({
BarTargetLineRendererConfig<D>? config,
String? rendererId,
}) {
config ??= BarTargetLineRendererConfig<D>();
rendererId ??= 'barTargetLine';
return BarTargetLineRenderer._internal(
config: config, rendererId: rendererId);
}
BarTargetLineRenderer._internal({
required BarTargetLineRendererConfig<D> config,
required String rendererId,
}) : super(
config: config,
rendererId: rendererId,
layoutPaintOrder:
config.layoutPaintOrder ?? LayoutViewPaintOrder.barTargetLine);
@override
void configureSeries(List<MutableSeries<D>> seriesList) {
seriesList.forEach((MutableSeries<D> series) {
series.colorFn ??= (_) => _color;
series.fillColorFn ??= (_) => _color;
// Fill in missing seriesColor values with the color of the first datum in
// the series. Note that [Series.colorFn] should always return a color.
if (series.seriesColor == null) {
try {
series.seriesColor = series.colorFn!(0);
} catch (exception) {
series.seriesColor = _color;
}
}
});
}
@override
DatumDetails<D> addPositionToDetailsForSeriesDatum(
DatumDetails<D> details, SeriesDatum<D> seriesDatum) {
final series = details.series!;
final domainAxis = series.getAttr(domainAxisKey) as ImmutableAxis<D>;
final measureAxis = series.getAttr(measureAxisKey) as ImmutableAxis<num>;
final barGroupIndex = series.getAttr(barGroupIndexKey)!;
final previousBarGroupWeight = series.getAttr(previousBarGroupWeightKey);
final barGroupWeight = series.getAttr(barGroupWeightKey);
final allBarGroupWeights = series.getAttr(allBarGroupWeightsKey);
final numBarGroups = series.getAttr(barGroupCountKey)!;
final points = _getTargetLinePoints(
details.domain,
domainAxis,
domainAxis.rangeBand.round(),
config.maxBarWidthPx,
details.measure,
details.measureOffset!,
measureAxis,
barGroupIndex,
previousBarGroupWeight,
barGroupWeight,
allBarGroupWeights,
numBarGroups);
NullablePoint chartPosition;
if (renderingVertically) {
chartPosition = NullablePoint(
(points[0].x + (points[1].x - points[0].x) / 2).toDouble(),
points[0].y.toDouble());
} else {
chartPosition = NullablePoint(points[0].x.toDouble(),
(points[0].y + (points[1].y - points[0].y) / 2).toDouble());
}
return DatumDetails.from(details, chartPosition: chartPosition);
}
@override
_BarTargetLineRendererElement getBaseDetails(dynamic datum, int index) {
final localConfig = config as BarTargetLineRendererConfig<D>;
return _BarTargetLineRendererElement(
roundEndCaps: localConfig.roundEndCaps);
}
/// Generates an [_AnimatedBarTargetLine] to represent the previous and
/// current state of one bar target line on the chart.
@override
_AnimatedBarTargetLine<D> makeAnimatedBar(
{required String key,
required ImmutableSeries<D> series,
dynamic datum,
Color? color,
List<int>? dashPattern,
required _BarTargetLineRendererElement details,
D? domainValue,
required ImmutableAxis<D> domainAxis,
required int domainWidth,
num? measureValue,
required num measureOffsetValue,
required ImmutableAxis<num> measureAxis,
double? measureAxisPosition,
Color? fillColor,
FillPatternType? fillPattern,
required int barGroupIndex,
double? previousBarGroupWeight,
double? barGroupWeight,
List<double>? allBarGroupWeights,
required int numBarGroups,
double? strokeWidthPx,
bool? measureIsNull,
bool? measureIsNegative}) {
return _AnimatedBarTargetLine(
key: key, datum: datum, series: series, domainValue: domainValue)
..setNewTarget(makeBarRendererElement(
color: color,
details: details,
dashPattern: dashPattern,
domainValue: domainValue,
domainAxis: domainAxis,
domainWidth: domainWidth,
measureValue: measureValue,
measureOffsetValue: measureOffsetValue,
measureAxisPosition: measureAxisPosition,
measureAxis: measureAxis,
fillColor: fillColor,
fillPattern: fillPattern,
strokeWidthPx: strokeWidthPx,
barGroupIndex: barGroupIndex,
previousBarGroupWeight: previousBarGroupWeight,
barGroupWeight: barGroupWeight,
allBarGroupWeights: allBarGroupWeights,
numBarGroups: numBarGroups,
measureIsNull: measureIsNull,
measureIsNegative: measureIsNegative));
}
/// Generates a [_BarTargetLineRendererElement] to represent the rendering
/// data for one bar target line on the chart.
@override
_BarTargetLineRendererElement makeBarRendererElement(
{Color? color,
List<int>? dashPattern,
required _BarTargetLineRendererElement details,
D? domainValue,
required ImmutableAxis<D> domainAxis,
required int domainWidth,
num? measureValue,
required num measureOffsetValue,
required ImmutableAxis<num> measureAxis,
double? measureAxisPosition,
Color? fillColor,
FillPatternType? fillPattern,
double? strokeWidthPx,
required int barGroupIndex,
double? previousBarGroupWeight,
double? barGroupWeight,
List<double>? allBarGroupWeights,
required int numBarGroups,
bool? measureIsNull,
bool? measureIsNegative}) {
return _BarTargetLineRendererElement(roundEndCaps: details.roundEndCaps)
..color = color
..dashPattern = dashPattern
..fillColor = fillColor
..fillPattern = fillPattern
..measureAxisPosition = measureAxisPosition
..strokeWidthPx = strokeWidthPx
..measureIsNull = measureIsNull
..measureIsNegative = measureIsNegative
..points = _getTargetLinePoints(
domainValue,
domainAxis,
domainWidth,
config.maxBarWidthPx,
measureValue,
measureOffsetValue,
measureAxis,
barGroupIndex,
previousBarGroupWeight,
barGroupWeight,
allBarGroupWeights,
numBarGroups);
}
@override
void paintBar(
ChartCanvas canvas,
double animationPercent,
Iterable<_BarTargetLineRendererElement> barElements,
) {
barElements.forEach((_BarTargetLineRendererElement bar) {
// TODO: Combine common line attributes into
// GraphicsFactory.lineStyle or similar.
canvas.drawLine(
clipBounds: drawBounds,
points: bar.points,
stroke: bar.color,
roundEndCaps: bar.roundEndCaps,
strokeWidthPx: bar.strokeWidthPx,
dashPattern: bar.dashPattern);
});
}
/// Generates a set of points that describe a bar target line.
List<Point<int>> _getTargetLinePoints(
D? domainValue,
ImmutableAxis<D> domainAxis,
int domainWidth,
int? maxBarWidthPx,
num? measureValue,
num measureOffsetValue,
ImmutableAxis<num> measureAxis,
int barGroupIndex,
double? previousBarGroupWeight,
double? barGroupWeight,
List<double>? allBarGroupWeights,
int numBarGroups) {
// If no weights were passed in, default to equal weight per bar.
if (barGroupWeight == null) {
barGroupWeight = 1 / numBarGroups;
previousBarGroupWeight = barGroupIndex * barGroupWeight;
}
final localConfig = config as BarTargetLineRendererConfig<D>;
// Calculate how wide each bar target line should be within the group of
// bar target lines. If we only have one series, or are stacked, then
// barWidth should equal domainWidth.
var spacingLoss = _barGroupInnerPadding * (numBarGroups - 1);
var desiredWidth = ((domainWidth - spacingLoss) / numBarGroups).round();
if (maxBarWidthPx != null) {
desiredWidth = min(desiredWidth, maxBarWidthPx);
domainWidth = desiredWidth * numBarGroups + spacingLoss;
}
// If the series was configured with a weight pattern, treat the "max" bar
// width as the average max width. The overall total width will still equal
// max times number of bars, but this results in a nicer final picture.
var barWidth = desiredWidth;
if (allBarGroupWeights != null) {
barWidth =
(desiredWidth * numBarGroups * allBarGroupWeights[barGroupIndex])
.floor();
}
// Get the overdraw boundaries.
var overDrawOuterPx = localConfig.overDrawOuterPx;
var overDrawPx = localConfig.overDrawPx;
var overDrawStartPx = (barGroupIndex == 0) && overDrawOuterPx != null
? overDrawOuterPx
: overDrawPx;
var overDrawEndPx =
(barGroupIndex == numBarGroups - 1) && overDrawOuterPx != null
? overDrawOuterPx
: overDrawPx;
// Flip bar group index for calculating location on the domain axis if RTL.
final adjustedBarGroupIndex =
isRtl ? numBarGroups - barGroupIndex - 1 : barGroupIndex;
// Calculate the start and end of the bar target line, taking into account
// accumulated padding for grouped bars.
num previousAverageWidth = adjustedBarGroupIndex > 0
? ((domainWidth - spacingLoss) *
(previousBarGroupWeight! / adjustedBarGroupIndex))
.round()
: 0;
var domainStart = (domainAxis.getLocation(domainValue)! -
(domainWidth / 2) +
(previousAverageWidth + _barGroupInnerPadding) *
adjustedBarGroupIndex -
overDrawStartPx)
.round();
var domainEnd = domainStart + barWidth + overDrawStartPx + overDrawEndPx;
measureValue = measureValue ?? 0;
// Calculate measure locations. Stacked bars should have their
// offset calculated previously.
var measureStart =
measureAxis.getLocation(measureValue + measureOffsetValue)!.round();
List<Point<int>> points;
if (renderingVertically) {
points = [
Point<int>(domainStart, measureStart),
Point<int>(domainEnd, measureStart)
];
} else {
points = [
Point<int>(measureStart, domainStart),
Point<int>(measureStart, domainEnd)
];
}
return points;
}
@override
Rectangle<int> getBoundsForBar(_BarTargetLineRendererElement bar) {
final points = bar.points;
assert(points.isNotEmpty);
var top = points.first.y;
var bottom = points.first.y;
var left = points.first.x;
var right = points.first.x;
for (final point in points.skip(1)) {
top = min(top, point.y);
left = min(left, point.x);
bottom = max(bottom, point.y);
right = max(right, point.x);
}
return Rectangle<int>(left, top, right - left, bottom - top);
}
}
class _BarTargetLineRendererElement extends BaseBarRendererElement {
late List<Point<int>> points;
bool roundEndCaps;
_BarTargetLineRendererElement({required this.roundEndCaps});
_BarTargetLineRendererElement.clone(_BarTargetLineRendererElement other)
: points = List.of(other.points),
roundEndCaps = other.roundEndCaps,
super.clone(other);
@override
void updateAnimationPercent(BaseBarRendererElement previous,
BaseBarRendererElement target, double animationPercent) {
final localPrevious = previous as _BarTargetLineRendererElement;
final localTarget = target as _BarTargetLineRendererElement;
final previousPoints = localPrevious.points;
final targetPoints = localTarget.points;
late Point<int> lastPoint;
int pointIndex;
for (pointIndex = 0; pointIndex < targetPoints.length; pointIndex++) {
var targetPoint = targetPoints[pointIndex];
// If we have more points than the previous line, animate in the new point
// by starting its measure position at the last known official point.
Point<int> previousPoint;
if (previousPoints.length - 1 >= pointIndex) {
previousPoint = previousPoints[pointIndex];
lastPoint = previousPoint;
} else {
previousPoint = Point<int>(targetPoint.x, lastPoint.y);
}
var x = ((targetPoint.x - previousPoint.x) * animationPercent) +
previousPoint.x;
var y = ((targetPoint.y - previousPoint.y) * animationPercent) +
previousPoint.y;
if (points.length - 1 >= pointIndex) {
points[pointIndex] = Point<int>(x.round(), y.round());
} else {
points.add(Point<int>(x.round(), y.round()));
}
}
// Removing extra points that don't exist anymore.
if (pointIndex < points.length) {
points.removeRange(pointIndex, points.length);
}
strokeWidthPx =
((localTarget.strokeWidthPx! - localPrevious.strokeWidthPx!) *
animationPercent) +
localPrevious.strokeWidthPx!;
roundEndCaps = localTarget.roundEndCaps;
super.updateAnimationPercent(previous, target, animationPercent);
}
}
class _AnimatedBarTargetLine<D>
extends BaseAnimatedBar<D, _BarTargetLineRendererElement> {
_AnimatedBarTargetLine(
{required String key,
required dynamic datum,
required ImmutableSeries<D> series,
required D? domainValue})
: super(key: key, datum: datum, series: series, domainValue: domainValue);
@override
void animateElementToMeasureAxisPosition(BaseBarRendererElement target) {
final localTarget = target as _BarTargetLineRendererElement;
final newPoints = <Point<int>>[];
for (var index = 0; index < localTarget.points.length; index++) {
final targetPoint = localTarget.points[index];
newPoints.add(
Point<int>(targetPoint.x, localTarget.measureAxisPosition!.round()));
}
localTarget.points = newPoints;
}
@override
_BarTargetLineRendererElement clone(_BarTargetLineRendererElement bar) =>
_BarTargetLineRendererElement.clone(bar);
}
================================================
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_target_line_renderer_config.dart
================================================
// Copyright 2018 the Charts project authors. Please see the AUTHORS file
// for details.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import '../../common/symbol_renderer.dart'
show SymbolRenderer, LineSymbolRenderer;
import '../layout/layout_view.dart' show LayoutViewPaintOrder;
import 'bar_target_line_renderer.dart' show BarTargetLineRenderer;
import 'base_bar_renderer_config.dart'
show BarGroupingType, BaseBarRendererConfig;
/// Configuration for a bar target line renderer.
class BarTargetLineRendererConfig<D> extends BaseBarRendererConfig<D> {
/// The number of pixels that the line will extend beyond the bandwidth at the
/// edges of the bar group.
///
/// If set, this overrides overDrawPx for the beginning side of the first bar
/// target line in the group, and the ending side of the last bar target line.
/// overDrawPx will be used for overdrawing the target lines for interior
/// sides of the bars.
final int? overDrawOuterPx;
/// The number of pixels that the line will extend beyond the bandwidth for
/// every bar in a group.
final int overDrawPx;
/// Whether target lines should have round end caps, or square if false.
final bool roundEndCaps;
BarTargetLineRendererConfig(
{String? customRendererId,
List<int>? dashPattern,
BarGroupingType groupingType = BarGroupingType.grouped,
int layoutPaintOrder = LayoutViewPaintOrder.barTargetLine,
int minBarLengthPx = 0,
this.overDrawOuterPx,
this.overDrawPx = 0,
this.roundEndCaps = true,
double strokeWidthPx = 3.0,
SymbolRenderer? symbolRenderer,
List<int>? weightPattern})
: super(
customRendererId: customRendererId,
dashPattern: dashPattern,
groupingType: groupingType,
layoutPaintOrder: layoutPaintOrder,
minBarLengthPx: minBarLengthPx,
strokeWidthPx: strokeWidthPx,
symbolRenderer: symbolRenderer ?? LineSymbolRenderer(),
weightPattern: weightPattern,
);
@override
BarTargetLineRenderer<D> build() {
return BarTargetLineRenderer<D>(config: this, rendererId: customRendererId);
}
@override
bool operator ==(Object other) {
if (identical(this, other)) {
return true;
}
return other is BarTargetLineRendererConfig &&
other.overDrawOuterPx == overDrawOuterPx &&
other.overDrawPx == overDrawPx &&
other.roundEndCaps == roundEndCaps &&
super == other;
}
@override
int get hashCode {
var hash = 1;
hash = hash * 31 + overDrawOuterPx.hashCode;
hash = hash * 31 + overDrawPx.hashCode;
hash = hash * 31 + roundEndCaps.hashCode;
return hash;
}
}
================================================
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/base_bar_renderer.dart
================================================
// Copyright 2018 the Charts project authors. Please see the AUTHORS file
// for details.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import 'dart:collection' show LinkedHashMap, HashSet;
import 'dart:math' show Point, Rectangle, max;
import 'package:collection/collection.dart' show IterableExtension;
import 'package:meta/meta.dart' show protected;
import '../../common/color.dart' show Color;
import '../../common/math.dart' show clamp;
import '../../data/series.dart' show AttributeKey;
import '../cartesian/axis/axis.dart'
show ImmutableAxis, OrdinalAxis, domainAxisKey, measureAxisKey;
import '../cartesian/axis/scale.dart' show RangeBandConfig;
import '../cartesian/cartesian_renderer.dart' show BaseCartesianRenderer;
import '../common/chart_canvas.dart' show ChartCanvas, FillPatternType;
import '../common/datum_details.dart' show DatumDetails;
import '../common/processed_series.dart' show ImmutableSeries, MutableSeries;
import 'base_bar_renderer_config.dart' show BaseBarRendererConfig;
import 'base_bar_renderer_element.dart'
show BaseAnimatedBar, BaseBarRendererElement;
const barGroupIndexKey = AttributeKey<int>('BarRenderer.barGroupIndex');
const barGroupCountKey = AttributeKey<int>('BarRenderer.barGroupCount');
const barGroupWeightKey = AttributeKey<double>('BarRenderer.barGroupWeight');
const previousBarGroupWeightKey =
AttributeKey<double>('BarRenderer.previousBarGroupWeight');
const allBarGroupWeightsKey =
AttributeKey<List<double>>('BarRenderer.allBarGroupWeights');
const stackKeyKey = AttributeKey<String>('BarRenderer.stackKey');
const barElementsKey =
AttributeKey<List<BaseBarRendererElement>>('BarRenderer.elements');
/// Base class for bar renderers that implements common stacking and grouping
/// logic.
///
/// Bar renderers support 4 different modes of rendering multiple series on the
/// chart, configured by the grouped and stacked flags.
/// * grouped - Render bars for each series that shares a domain value
/// side-by-side.
/// * stacked - Render bars for each series that shares a domain value in a
/// stack, ordered in the same order as the series list.
/// * grouped-stacked: Render bars for each series that shares a domain value in
/// a group of bar stacks. Each stack will contain all the series that share a
/// series category.
/// * floating style - When grouped and stacked are both false, all bars that
/// share a domain value will be rendered in the same domain space. Each datum
/// should be configured with a measure offset to position its bar along the
/// measure axis. Bars will freely overlap if their measure values and measure
/// offsets overlap. Note that bars for each series will be rendered in order,
/// such that bars from the last series will be "on top" of bars from previous
/// series.
abstract class BaseBarRenderer<D, R extends BaseBarRendererElement,
B extends BaseAnimatedBar<D, R>> extends BaseCartesianRenderer<D> {
// `config` can't be a `BaseBarRendererConfig<D>` because `BarLaneRenderer<D>`
// passes a `BarLaneRendererConfig`, but `BarLaneRendererConfig` is a
// `BarRendererConfig<String>`.
final BaseBarRendererConfig<Object?> config;
// Save the chart.vertical value at the start of every draw cycle. If it
// changes, delete all of the cached rendering element information so that we
// start with a fresh state.
var _lastVertical = true;
/// Store a map of domain+barGroupIndex+category index to bars in a stack.
///
/// This map is used to render all the bars in a stack together, to account
/// for rendering effects that need to take the full stack into account (e.g.
/// corner rounding).
///
/// [LinkedHashMap] is used to render the bars on the canvas in the same order
/// as the data was given to the chart. For the case where both grouping and
/// stacking are disabled, this means that bars for data later in the series
/// will be drawn "on top of" bars earlier in the series.
// ignore: prefer_collection_literals, https://github.com/dart-lang/linter/issues/1649
final _barStackMap = LinkedHashMap<String, List<B>>();
// Store a list of bar stacks that exist in the series data.
//
// This list will be used to remove any AnimatingBars that were rendered in
// previous draw cycles, but no longer have a corresponding datum in the new
// data.
final _currentKeys = <String>[];
/// Stores a list of stack keys for each group key.
// ignore: prefer_collection_literals, https://github.com/dart-lang/linter/issues/1649
final _currentGroupsStackKeys = LinkedHashMap<D, Set<String>>();
/// Optimization for getNearest to avoid scanning all data if possible.
ImmutableAxis<D>? _prevDomainAxis;
BaseBarRenderer(
{required this.config,
required String rendererId,
required int layoutPaintOrder})
: super(
rendererId: rendererId,
layoutPaintOrder: layoutPaintOrder,
symbolRenderer: config.symbolRenderer,
);
@override
void preprocessSeries(List<MutableSeries<D>> seriesList) {
// If the orientation of the chart changed, delete all data from the last
// draw cycle. This allows us to start in a fresh state, so that we do not
// get bad animations from the previously drawn data.
//
// Ideally we should animate the old bars out smoothly in some ways, but
// this was the cheapest option.
if (_lastVertical != chart.vertical) {
_barStackMap.clear();
_currentKeys.clear();
_currentGroupsStackKeys.clear();
}
_lastVertical = chart.vertical;
var barGroupIndex = 0;
// Maps used to store the final measure offset of the previous series, for
// each domain value.
final posDomainToStackKeyToDetailsMap =
<D, Map<String, BaseBarRendererElement>>{};
final negDomainToStackKeyToDetailsMap =
<D, Map<String, BaseBarRendererElement>>{};
final categoryToIndexMap = <String, int>{};
// Keep track of the largest bar stack size. This should be 1 for grouped
// bars, and it should be the size of the tallest stack for stacked or
// grouped stacked bars.
var maxBarStackSize = 0;
final orderedSeriesList = getOrderedSeriesList(seriesList);
orderedSeriesList.forEach((MutableSeries<D> series) {
var elements = <BaseBarRendererElement>[];
var domainFn = series.domainFn;
var measureFn = series.measureFn;
var measureOffsetFn = series.measureOffsetFn;
var fillPatternFn = series.fillPatternFn;
var strokeWidthPxFn = series.strokeWidthPxFn;
series.dashPatternFn ??= (_) => config.dashPattern;
// Identifies which stack the series will go in, by default a single
// stack.
var stackKey = '__defaultKey__';
// Override the stackKey with seriesCategory if we are GROUPED_STACKED
// so we have a way to choose which series go into which stacks.
if (config.grouped && config.stacked) {
if (series.seriesCategory != null) {
stackKey = series.seriesCategory!;
}
if (categoryToIndexMap.containsKey(stackKey)) {
barGroupIndex = categoryToIndexMap[stackKey]!;
} else {
barGroupIndex = categoryToIndexMap.length;
categoryToIndexMap[stackKey] = barGroupIndex;
}
}
var needsMeasureOffset = false;
for (var barIndex = 0; barIndex < series.data.length; barIndex++) {
dynamic datum = series.data[barIndex];
final details = getBaseDetails(datum, barIndex);
details.barStackIndex = 0;
details.measureOffset = measureOffsetFn!(barIndex);
if (fillPatternFn != null) {
details.fillPattern = fillPatternFn(barIndex);
} else {
details.fillPattern = config.fillPattern;
}
if (strokeWidthPxFn != null) {
details.strokeWidthPx = strokeWidthPxFn(barIndex)?.toDouble();
} else {
details.strokeWidthPx = config.strokeWidthPx;
}
// When stacking is enabled, adjust the measure offset for each domain
// value in each series by adding up the measures and offsets of lower
// series.
if (config.stacked) {
needsMeasureOffset = true;
var domain = domainFn(barIndex);
var measure = measureFn(barIndex);
// We will render positive bars in one stack, and negative bars in a
// separate stack. Keep track of the measure offsets for these stacks
// independently.
var domainToCategoryToDetailsMap = measure == null || measure >= 0
? posDomainToStackKeyToDetailsMap
: negDomainToStackKeyToDetailsMap;
var categoryToDetailsMap = domainToCategoryToDetailsMap.putIfAbsent(
domain, () => <String, BaseBarRendererElement>{});
var prevDetail = categoryToDetailsMap[stackKey];
if (prevDetail != null) {
details.barStackIndex = prevDetail.barStackIndex! + 1;
}
details.cumulativeTotal = measure ?? 0;
// Get the previous series' measure offset.
var measureOffset = measureOffsetFn(barIndex)!;
if (prevDetail != null) {
measureOffset += prevDetail.measureOffsetPlusMeasure!;
details.cumulativeTotal =
details.cumulativeTotal! + prevDetail.cumulativeTotal!;
}
// And overwrite the details measure offset.
details.measureOffset = measureOffset;
var measureValue = measure ?? 0;
details.measureOffsetPlusMeasure = measureOffset + measureValue;
categoryToDetailsMap[stackKey] = details;
}
maxBarStackSize = max(maxBarStackSize, details.barStackIndex! + 1);
elements.add(details);
}
if (needsMeasureOffset) {
// Override the measure offset function to return the measure offset we
// calculated for each datum. This already includes any measure offset
// that was configured in the series data.
series.measureOffsetFn = (index) => elements[index!].measureOffset!;
}
series.setAttr(barGroupIndexKey, barGroupIndex);
series.setAttr(stackKeyKey, stackKey);
series.setAttr(barElementsKey, elements);
if (config.grouped) {
barGroupIndex++;
}
});
// Compute number of bar groups. This must be done after we have processed
// all of the series once, so that we know how many categories we have.
var numBarGroups = 0;
if (config.grouped && config.stacked) {
// For grouped stacked bars, categoryToIndexMap effectively one list per
// group of stacked bars.
numBarGroups = categoryToIndexMap.length;
} else if (config.stacked) {
numBarGroups = 1;
} else {
numBarGroups = seriesList.length;
}
// Compute bar group weights.
final barWeights = _calculateBarWeights(numBarGroups);
seriesList.forEach((MutableSeries<D> series) {
series.setAttr(barGroupCountKey, numBarGroups);
if (barWeights.isNotEmpty) {
final barGroupIndex = series.getAttr(barGroupIndexKey)!;
final barWeight = barWeights[barGroupIndex];
// In RTL mode, we need to grab the weights for the bars that follow
// this datum in the series (instead of precede it). The first datum is
// physically positioned on the canvas to the right of all the rest of
// the bar group data that follows it.
final previousBarWeights = isRtl
? barWeights.getRange(barGroupIndex + 1, numBarGroups)
: barWeights.getRange(0, barGroupIndex);
final previousBarWeight = previousBarWeights.isNotEmpty
? previousBarWeights.reduce((a, b) => a + b)
: 0.0;
series.setAttr(barGroupWeightKey, barWeight);
series.setAttr(previousBarGroupWeightKey, previousBarWeight);
series.setAttr(allBarGroupWeightsKey, barWeights);
}
});
}
/// Calculates bar weights for a list of series from [config.weightPattern].
///
/// If [config.weightPattern] is not set, then this will assign a weight
/// proportional to the number of bar groups for every series.
List<double> _calculateBarWeights(int numBarGroups) {
// Set up bar weights for each series as a ratio of the total weight.
final weights = <double>[];
if (config.weightPattern != null) {
if (numBarGroups > config.weightPattern!.length) {
throw ArgumentError('Number of series exceeds length of weight '
'pattern ${config.weightPattern}');
}
var totalBarWeight = 0;
for (var i = 0; i < numBarGroups; i++) {
totalBarWeight += config.weightPattern![i];
}
for (var i = 0; i < numBarGroups; i++) {
weights.add(config.weightPattern![i] / totalBarWeight);
}
} else {
for (var i = 0; i < numBarGroups; i++) {
weights.add(1 / numBarGroups);
}
}
return weights;
}
/// Construct a base details element for a given datum.
///
/// This is intended to be overridden by child classes that need to add
/// customized rendering properties.
@protected
R getBaseDetails(dynamic datum, int index);
@override
void configureDomainAxes(List<MutableSeries<D>> seriesList) {
super.configureDomainAxes(seriesList);
// Configure the domain axis to use a range band configuration.
if (seriesList.isNotEmpty) {
// Given that charts can only have one domain axis, just grab it from the
// first series.
final domainAxis = seriesList.first.getAttr(domainAxisKey)!;
// rangeBandConfig is set when current config is not valid to render
// bars (this is necessary with combo charts that have NumericAxis)
if (!domainAxis.hasValidBarChartRangeBandConfig) {
domainAxis.setRangeBandConfig(RangeBandConfig.styleAssignedPercent());
}
}
}
@override
void update(List<ImmutableSeries<D>> seriesList, bool isAnimatingThisDraw) {
_currentKeys.clear();
_currentGroupsStackKeys.clear();
final orderedSeriesList = getOrderedSeriesList(seriesList);
orderedSeriesList.forEach((final ImmutableSeries<D> series) {
final domainAxis = series.getAttr(domainAxisKey) as ImmutableAxis<D>;
final domainFn = series.domainFn;
final measureAxis = series.getAttr(measureAxisKey) as ImmutableAxis<num>;
final measureFn = series.measureFn;
final colorFn = series.colorFn;
final dashPatternFn = series.dashPatternFn;
final fillColorFn = series.fillColorFn;
final seriesStackKey = series.getAttr(stackKeyKey);
final barGroupCount = series.getAttr(barGroupCountKey);
final barGroupIndex = series.getAttr(barGroupIndexKey);
final previousBarGroupWeight = series.getAttr(previousBarGroupWeightKey);
final barGroupWeight = series.getAttr(barGroupWeightKey);
final allBarGroupWeights = series.getAttr(allBarGroupWeightsKey);
final measureAxisPosition = measureAxis.getLocation(0.0);
var elementsList = series.getAttr(barElementsKey);
// Save off domainAxis for getNearest.
_prevDomainAxis = domainAxis;
for (var barIndex = 0; barIndex < series.data.length; barIndex++) {
final Object? datum = series.data[barIndex];
final details = elementsList![barIndex];
final domainValue = domainFn(barIndex);
final measureValue = measureFn(barIndex);
final measureIsNull = measureValue == null;
final measureIsNegative = !measureIsNull && measureValue! < 0;
// Each bar should be stored in barStackMap in a structure that mirrors
// the visual rendering of the bars. Thus, they should be grouped by
// domain value, series category (by way of the stack keys that were
// generated for each series in the preprocess step), and bar group
// index to account for all combinations of grouping and stacking.
var barStackMapKey = '$domainValue'
'__'
'$seriesStackKey'
'__'
'${measureIsNegative ? 'pos' : 'neg'}'
'__'
'$barGroupIndex';
var barKey = '${barStackMapKey}${details.barStackIndex}';
var barStackList = _barStackMap.putIfAbsent(barStackMapKey, () => []);
// If we already have an AnimatingBarfor that index, use it.
var animatingBar =
barStackList.firstWhereOrNull((B bar) => bar.key == barKey);
// If we don't have any existing bar element, create a new bar and have
// it animate in from the domain axis.
// TODO: Animate bars in the middle of a stack from their
// nearest neighbors, instead of the measure axis.
if (animatingBar == null) {
// If the measure is null and there was no existing animating bar, it
// means we don't need to draw this bar at all.
if (!measureIsNull) {
animatingBar = makeAnimatedBar(
key: barKey,
series: series,
datum: datum,
barGroupIndex: barGroupIndex!,
previousBarGroupWeight: previousBarGroupWeight,
barGroupWeight: barGroupWeight,
allBarGroupWeights: allBarGroupWeights,
color: colorFn!(barIndex),
dashPattern: dashPatternFn!(barIndex),
details: details as R,
domainValue: domainFn(barIndex),
domainAxis: domainAxis,
domainWidth: domainAxis.rangeBand.round(),
fillColor: fillColorFn!(barIndex),
fillPattern: details.fillPattern,
measureValue: 0.0,
measureOffsetValue: 0.0,
measureAxisPosition: measureAxisPosition,
measureAxis: measureAxis,
numBarGroups: barGroupCount!,
strokeWidthPx: details.strokeWidthPx,
measureIsNull: measureIsNull,
measureIsNegative: measureIsNegative);
barStackList.add(animatingBar);
}
} else {
animatingBar
..datum = datum
..series = series
..domainValue = domainValue;
}
if (animatingBar == null) {
continue;
}
// Update the set of bars that still exist in the series data.
_currentKeys.add(barKey);
// Store off stack keys for each bar group to help getNearest identify
// groups of stacks.
_currentGroupsStackKeys
.putIfAbsent(domainValue, () => <String>{})
.add(barStackMapKey);
// Get the barElement we are going to setup.
// Optimization to prevent allocation in non-animating case.
BaseBarRendererElement barElement = makeBarRendererElement(
barGroupIndex: barGroupIndex!,
previousBarGroupWeight: previousBarGroupWeight,
barGroupWeight: barGroupWeight,
allBarGroupWeights: allBarGroupWeights,
color: colorFn!(barIndex),
dashPattern: dashPatternFn!(barIndex),
details: details as R,
domainValue: domainFn(barIndex),
domainAxis: domainAxis,
domainWidth: domainAxis.rangeBand.round(),
fillColor: fillColorFn!(barIndex),
fillPattern: details.fillPattern,
measureValue: measureValue,
measureOffsetValue: details.measureOffset!,
measureAxisPosition: measureAxisPosition,
measureAxis: measureAxis,
numBarGroups: barGroupCount!,
strokeWidthPx: details.strokeWidthPx,
measureIsNull: measureIsNull,
measureIsNegative: measureIsNegative);
animatingBar.setNewTarget(barElement as R);
}
});
// Animate out bars that don't exist anymore.
_barStackMap.forEach((String key, List<B> barStackList) {
for (var barIndex = 0; barIndex < barStackList.length; barIndex++) {
final bar = barStackList[barIndex];
if (_currentKeys.contains(bar.key) != true) {
bar.animateOut();
}
}
});
}
/// Generates a [BaseAnimatedBar] to represent the previous and current state
/// of one bar on the chart.
@protected
B makeAnimatedBar(
{required String key,
required ImmutableSeries<D> series,
dynamic datum,
required int barGroupIndex,
double? previousBarGroupWeight,
double? barGroupWeight,
List<double>? allBarGroupWeights,
Color? color,
List<int>? dashPattern,
required R details,
D? domainValue,
required ImmutableAxis<D> domainAxis,
required int domainWidth,
num? measureValue,
required num measureOffsetValue,
required ImmutableAxis<num> measureAxis,
double? measureAxisPosition,
required int numBarGroups,
Color? fillColor,
FillPatternType? fillPattern,
double? strokeWidthPx,
bool? measureIsNull,
bool? measureIsNegative});
/// Generates a [BaseBarRendererElement] to represent the rendering data for
/// one bar on the chart.
@protected
R makeBarRendererElement(
{required int barGroupIndex,
double? previousBarGroupWeight,
double? barGroupWeight,
List<double>? allBarGroupWeights,
Color? color,
List<int>? dashPattern,
required R details,
D? domainValue,
required ImmutableAxis<D> domainAxis,
required int domainWidth,
num? measureValue,
required num measureOffsetValue,
required ImmutableAxis<num> measureAxis,
double? measureAxisPosition,
required int numBarGroups,
Color? fillColor,
FillPatternType? fillPattern,
double? strokeWidthPx,
bool? measureIsNull,
bool? measureIsNegative});
/// Paints the current bar data on the canvas.
@override
void paint(ChartCanvas canvas, double animationPercent) {
// Clean up the bars that no longer exist.
if (animationPercent == 1.0) {
final keysToRemove = HashSet<String>();
_barStackMap.forEach((String key, List<B> barStackList) {
barStackList.retainWhere(
(B bar) => !bar.animatingOut && !bar.targetBar!.measureIsNull!);
if (barStackList.isEmpty) {
keysToRemove.add(key);
}
});
// When cleaning up the animation, also clean up the keys used to lookup
// if a bar is selected.
for (final key in keysToRemove) {
_barStackMap.remove(key);
_currentKeys.remove(key);
}
_currentGroupsStackKeys.forEach((domain, keys) {
keys.removeWhere(keysToRemove.contains);
});
}
_barStackMap.forEach((String stackKey, List<B> barStack) {
// Turn this into a list so that the getCurrentBar isn't called more than
// once for each animationPercent if the barElements are iterated more
// than once.
final barElements = barStack
.map((B animatingBar) => animatingBar.getCurrentBar(animationPercent))
.toList();
if (barElements.isNotEmpty) {
paintBar(canvas, animationPercent, barElements);
}
});
}
/// Paints a stack of bar elements on the canvas.
@protected
void paintBar(
ChartCanvas canvas, double animationPercent, Iterable<R> barElements);
@override
List<DatumDetails<D>> getNearestDatumDetailPerSeries(
Point<double> chartPoint,
bool byDomain,
Rectangle<int>? boundsOverride, {
bool selectOverlappingPoints = false,
bool selectExactEventLocation = false,
}) {
var nearest = <DatumDetails<D>>[];
// Was it even in the component bounds?
if (!isPointWithinBounds(chartPoint, boundsOverride)) {
return nearest;
}
if (_prevDomainAxis is OrdinalAxis) {
final domainValue = _prevDomainAxis!
.getDomain(renderingVertically ? chartPoint.x : chartPoint.y);
// If we have a domainValue for the event point, then find all segments
// that match it.
if (domainValue != null) {
if (renderingVertically) {
nearest = _getVerticalDetailsForDomainValue(domainValue, chartPoint);
} else {
nearest =
_getHorizontalDetailsForDomainValue(domainValue, chartPoint);
}
}
} else {
if (renderingVertically) {
nearest = _getVerticalDetailsForDomainValue(null, chartPoint);
} else {
nearest = _getHorizontalDetailsForDomainValue(null, chartPoint);
}
// Find the closest domain and only keep values that match the domain.
var minRelativeDistance = double.maxFinite;
var minDomainDistance = double.maxFinite;
var minMeasureDistance = double.maxFinite;
D? nearestDomain;
// TODO: Optimize this with a binary search based on chartX.
for (final detail in nearest) {
if (byDomain) {
if (detail.domainDistance! < minDomainDistance ||
(detail.domainDistance! == minDomainDistance &&
detail.measureDistance! < minMeasureDistance)) {
minDomainDistance = detail.domainDistance!;
minMeasureDistance = detail.measureDistance!;
nearestDomain = detail.domain;
}
} else {
if (detail.relativeDistance! < minRelativeDistance) {
minRelativeDistance = detail.relativeDistance!;
nearestDomain = detail.domain;
}
}
}
nearest.retainWhere((d) => d.domain == nearestDomain);
}
// Note: the details are already sorted by domain & measure distance in
// base chart.
return nearest;
}
@protected
Rectangle<int>? getBoundsForBar(R bar);
@protected
List<BaseAnimatedBar<D, R>> _getSegmentsForDomainValue(D? domainValue,
{bool Function(BaseAnimatedBar<D, R> bar)? where}) {
final matchingSegments = <BaseAnimatedBar<D, R>>[];
// [domainValue] is null only when the bar renderer is being used with in
//
gitextract_k9gs7ue9/
├── .github/
│ └── FUNDING.yml
├── .gitignore
├── README.md
├── dart/
│ └── todo/
│ ├── .gitignore
│ ├── Cargo.toml
│ ├── README.md
│ ├── lib/
│ │ └── main.dart
│ ├── pubspec.yaml
│ ├── rid_build.rs
│ ├── sh/
│ │ ├── build
│ │ └── run
│ └── src/
│ └── app.rs
└── flutter/
├── reddit_ticker/
│ ├── .gitignore
│ ├── Cargo.toml
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── reddit_ticker/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ ├── reddit_ticker_android.iml
│ │ └── settings.gradle
│ ├── deps/
│ │ └── charts/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTING.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── charts_common/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── charts_common.gwsq
│ │ │ ├── lib/
│ │ │ │ ├── common.dart
│ │ │ │ └── src/
│ │ │ │ ├── chart/
│ │ │ │ │ ├── bar/
│ │ │ │ │ │ ├── bar_chart.dart
│ │ │ │ │ │ ├── bar_error_decorator.dart
│ │ │ │ │ │ ├── bar_label_decorator.dart
│ │ │ │ │ │ ├── bar_lane_renderer.dart
│ │ │ │ │ │ ├── bar_lane_renderer_config.dart
│ │ │ │ │ │ ├── bar_renderer.dart
│ │ │ │ │ │ ├── bar_renderer_config.dart
│ │ │ │ │ │ ├── bar_renderer_decorator.dart
│ │ │ │ │ │ ├── bar_target_line_renderer.dart
│ │ │ │ │ │ ├── bar_target_line_renderer_config.dart
│ │ │ │ │ │ ├── base_bar_renderer.dart
│ │ │ │ │ │ ├── base_bar_renderer_config.dart
│ │ │ │ │ │ └── base_bar_renderer_element.dart
│ │ │ │ │ ├── cartesian/
│ │ │ │ │ │ ├── axis/
│ │ │ │ │ │ │ ├── axis.dart
│ │ │ │ │ │ │ ├── axis_tick.dart
│ │ │ │ │ │ │ ├── collision_report.dart
│ │ │ │ │ │ │ ├── draw_strategy/
│ │ │ │ │ │ │ │ ├── base_tick_draw_strategy.dart
│ │ │ │ │ │ │ │ ├── gridline_draw_strategy.dart
│ │ │ │ │ │ │ │ ├── none_draw_strategy.dart
│ │ │ │ │ │ │ │ ├── range_tick_draw_strategy.dart
│ │ │ │ │ │ │ │ ├── small_tick_draw_strategy.dart
│ │ │ │ │ │ │ │ └── tick_draw_strategy.dart
│ │ │ │ │ │ │ ├── end_points_tick_provider.dart
│ │ │ │ │ │ │ ├── linear/
│ │ │ │ │ │ │ │ ├── bucketing_numeric_axis.dart
│ │ │ │ │ │ │ │ ├── bucketing_numeric_tick_provider.dart
│ │ │ │ │ │ │ │ ├── linear_scale.dart
│ │ │ │ │ │ │ │ ├── linear_scale_domain_info.dart
│ │ │ │ │ │ │ │ ├── linear_scale_function.dart
│ │ │ │ │ │ │ │ └── linear_scale_viewport.dart
│ │ │ │ │ │ │ ├── numeric_extents.dart
│ │ │ │ │ │ │ ├── numeric_scale.dart
│ │ │ │ │ │ │ ├── numeric_tick_provider.dart
│ │ │ │ │ │ │ ├── ordinal_extents.dart
│ │ │ │ │ │ │ ├── ordinal_scale.dart
│ │ │ │ │ │ │ ├── ordinal_scale_domain_info.dart
│ │ │ │ │ │ │ ├── ordinal_tick_provider.dart
│ │ │ │ │ │ │ ├── range_axis_tick.dart
│ │ │ │ │ │ │ ├── range_tick.dart
│ │ │ │ │ │ │ ├── range_tick_provider.dart
│ │ │ │ │ │ │ ├── scale.dart
│ │ │ │ │ │ │ ├── simple_ordinal_scale.dart
│ │ │ │ │ │ │ ├── spec/
│ │ │ │ │ │ │ │ ├── axis_spec.dart
│ │ │ │ │ │ │ │ ├── bucketing_axis_spec.dart
│ │ │ │ │ │ │ │ ├── date_time_axis_spec.dart
│ │ │ │ │ │ │ │ ├── end_points_time_axis_spec.dart
│ │ │ │ │ │ │ │ ├── numeric_axis_spec.dart
│ │ │ │ │ │ │ │ ├── ordinal_axis_spec.dart
│ │ │ │ │ │ │ │ ├── percent_axis_spec.dart
│ │ │ │ │ │ │ │ ├── range_tick_spec.dart
│ │ │ │ │ │ │ │ └── tick_spec.dart
│ │ │ │ │ │ │ ├── static_tick_provider.dart
│ │ │ │ │ │ │ ├── tick.dart
│ │ │ │ │ │ │ ├── tick_formatter.dart
│ │ │ │ │ │ │ ├── tick_provider.dart
│ │ │ │ │ │ │ └── time/
│ │ │ │ │ │ │ ├── auto_adjusting_date_time_tick_provider.dart
│ │ │ │ │ │ │ ├── base_time_stepper.dart
│ │ │ │ │ │ │ ├── date_time_axis.dart
│ │ │ │ │ │ │ ├── date_time_extents.dart
│ │ │ │ │ │ │ ├── date_time_scale.dart
│ │ │ │ │ │ │ ├── date_time_tick_formatter.dart
│ │ │ │ │ │ │ ├── day_time_stepper.dart
│ │ │ │ │ │ │ ├── hour_tick_formatter.dart
│ │ │ │ │ │ │ ├── hour_time_stepper.dart
│ │ │ │ │ │ │ ├── minute_time_stepper.dart
│ │ │ │ │ │ │ ├── month_time_stepper.dart
│ │ │ │ │ │ │ ├── simple_time_tick_formatter.dart
│ │ │ │ │ │ │ ├── time_range_tick_provider.dart
│ │ │ │ │ │ │ ├── time_range_tick_provider_impl.dart
│ │ │ │ │ │ │ ├── time_stepper.dart
│ │ │ │ │ │ │ ├── time_tick_formatter.dart
│ │ │ │ │ │ │ ├── time_tick_formatter_impl.dart
│ │ │ │ │ │ │ └── year_time_stepper.dart
│ │ │ │ │ │ ├── cartesian_chart.dart
│ │ │ │ │ │ └── cartesian_renderer.dart
│ │ │ │ │ ├── common/
│ │ │ │ │ │ ├── base_chart.dart
│ │ │ │ │ │ ├── behavior/
│ │ │ │ │ │ │ ├── a11y/
│ │ │ │ │ │ │ │ ├── a11y_explore_behavior.dart
│ │ │ │ │ │ │ │ ├── a11y_node.dart
│ │ │ │ │ │ │ │ ├── domain_a11y_explore_behavior.dart
│ │ │ │ │ │ │ │ └── keyboard_domain_navigator.dart
│ │ │ │ │ │ │ ├── calculation/
│ │ │ │ │ │ │ │ └── percent_injector.dart
│ │ │ │ │ │ │ ├── chart_behavior.dart
│ │ │ │ │ │ │ ├── chart_title/
│ │ │ │ │ │ │ │ └── chart_title.dart
│ │ │ │ │ │ │ ├── domain_highlighter.dart
│ │ │ │ │ │ │ ├── domain_outliner.dart
│ │ │ │ │ │ │ ├── initial_selection.dart
│ │ │ │ │ │ │ ├── legend/
│ │ │ │ │ │ │ │ ├── datum_legend.dart
│ │ │ │ │ │ │ │ ├── legend.dart
│ │ │ │ │ │ │ │ ├── legend_entry.dart
│ │ │ │ │ │ │ │ ├── legend_entry_generator.dart
│ │ │ │ │ │ │ │ ├── per_datum_legend_entry_generator.dart
│ │ │ │ │ │ │ │ ├── per_series_legend_entry_generator.dart
│ │ │ │ │ │ │ │ └── series_legend.dart
│ │ │ │ │ │ │ ├── line_point_highlighter.dart
│ │ │ │ │ │ │ ├── range_annotation.dart
│ │ │ │ │ │ │ ├── selection/
│ │ │ │ │ │ │ │ ├── lock_selection.dart
│ │ │ │ │ │ │ │ ├── select_nearest.dart
│ │ │ │ │ │ │ │ └── selection_trigger.dart
│ │ │ │ │ │ │ ├── slider/
│ │ │ │ │ │ │ │ └── slider.dart
│ │ │ │ │ │ │ ├── sliding_viewport.dart
│ │ │ │ │ │ │ ├── sunburst_ring_expander.dart
│ │ │ │ │ │ │ └── zoom/
│ │ │ │ │ │ │ ├── initial_hint_behavior.dart
│ │ │ │ │ │ │ ├── pan_and_zoom_behavior.dart
│ │ │ │ │ │ │ ├── pan_behavior.dart
│ │ │ │ │ │ │ └── panning_tick_provider.dart
│ │ │ │ │ │ ├── canvas_shapes.dart
│ │ │ │ │ │ ├── chart_canvas.dart
│ │ │ │ │ │ ├── chart_context.dart
│ │ │ │ │ │ ├── datum_details.dart
│ │ │ │ │ │ ├── processed_series.dart
│ │ │ │ │ │ ├── selection_model/
│ │ │ │ │ │ │ └── selection_model.dart
│ │ │ │ │ │ ├── series_datum.dart
│ │ │ │ │ │ ├── series_renderer.dart
│ │ │ │ │ │ ├── series_renderer_config.dart
│ │ │ │ │ │ └── unitconverter/
│ │ │ │ │ │ ├── identity_converter.dart
│ │ │ │ │ │ └── unit_converter.dart
│ │ │ │ │ ├── layout/
│ │ │ │ │ │ ├── layout_config.dart
│ │ │ │ │ │ ├── layout_manager.dart
│ │ │ │ │ │ ├── layout_manager_impl.dart
│ │ │ │ │ │ ├── layout_margin_strategy.dart
│ │ │ │ │ │ └── layout_view.dart
│ │ │ │ │ ├── line/
│ │ │ │ │ │ ├── line_chart.dart
│ │ │ │ │ │ ├── line_renderer.dart
│ │ │ │ │ │ └── line_renderer_config.dart
│ │ │ │ │ ├── pie/
│ │ │ │ │ │ ├── arc_label_decorator.dart
│ │ │ │ │ │ ├── arc_renderer.dart
│ │ │ │ │ │ ├── arc_renderer_config.dart
│ │ │ │ │ │ ├── arc_renderer_decorator.dart
│ │ │ │ │ │ ├── arc_renderer_element.dart
│ │ │ │ │ │ ├── base_arc_renderer.dart
│ │ │ │ │ │ ├── base_arc_renderer_config.dart
│ │ │ │ │ │ └── pie_chart.dart
│ │ │ │ │ ├── scatter_plot/
│ │ │ │ │ │ ├── comparison_points_decorator.dart
│ │ │ │ │ │ ├── point_renderer.dart
│ │ │ │ │ │ ├── point_renderer_config.dart
│ │ │ │ │ │ ├── point_renderer_decorator.dart
│ │ │ │ │ │ ├── scatter_plot_chart.dart
│ │ │ │ │ │ ├── symbol_annotation_renderer.dart
│ │ │ │ │ │ └── symbol_annotation_renderer_config.dart
│ │ │ │ │ ├── sunburst/
│ │ │ │ │ │ ├── sunburst_arc_label_decorator.dart
│ │ │ │ │ │ ├── sunburst_arc_renderer.dart
│ │ │ │ │ │ ├── sunburst_arc_renderer_config.dart
│ │ │ │ │ │ └── sunburst_chart.dart
│ │ │ │ │ ├── time_series/
│ │ │ │ │ │ └── time_series_chart.dart
│ │ │ │ │ └── treemap/
│ │ │ │ │ ├── base_treemap_renderer.dart
│ │ │ │ │ ├── dice_treemap_renderer.dart
│ │ │ │ │ ├── slice_dice_treemap_renderer.dart
│ │ │ │ │ ├── slice_treemap_renderer.dart
│ │ │ │ │ ├── squarified_treemap_renderer.dart
│ │ │ │ │ ├── treemap_chart.dart
│ │ │ │ │ ├── treemap_label_decorator.dart
│ │ │ │ │ ├── treemap_renderer_config.dart
│ │ │ │ │ ├── treemap_renderer_decorator.dart
│ │ │ │ │ └── treemap_renderer_element.dart
│ │ │ │ ├── common/
│ │ │ │ │ ├── color.dart
│ │ │ │ │ ├── date_time_factory.dart
│ │ │ │ │ ├── gesture_listener.dart
│ │ │ │ │ ├── graphics_factory.dart
│ │ │ │ │ ├── line_style.dart
│ │ │ │ │ ├── material_palette.dart
│ │ │ │ │ ├── math.dart
│ │ │ │ │ ├── paint_style.dart
│ │ │ │ │ ├── palette.dart
│ │ │ │ │ ├── performance.dart
│ │ │ │ │ ├── proxy_gesture_listener.dart
│ │ │ │ │ ├── rate_limit_utils.dart
│ │ │ │ │ ├── rtl_spec.dart
│ │ │ │ │ ├── style/
│ │ │ │ │ │ ├── material_style.dart
│ │ │ │ │ │ ├── style.dart
│ │ │ │ │ │ └── style_factory.dart
│ │ │ │ │ ├── symbol_renderer.dart
│ │ │ │ │ ├── text_element.dart
│ │ │ │ │ ├── text_measurement.dart
│ │ │ │ │ ├── text_style.dart
│ │ │ │ │ ├── text_utils.dart
│ │ │ │ │ └── typed_registry.dart
│ │ │ │ └── data/
│ │ │ │ ├── series.dart
│ │ │ │ └── tree.dart
│ │ │ └── pubspec.yaml
│ │ ├── charts_flutter/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── ExternalTapQueues.METADATA
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── charts_flutter.gwsq
│ │ │ ├── lib/
│ │ │ │ ├── flutter.dart
│ │ │ │ └── src/
│ │ │ │ ├── bar_chart.dart
│ │ │ │ ├── base_chart.dart
│ │ │ │ ├── base_chart_state.dart
│ │ │ │ ├── behaviors/
│ │ │ │ │ ├── a11y/
│ │ │ │ │ │ └── domain_a11y_explore_behavior.dart
│ │ │ │ │ ├── calculation/
│ │ │ │ │ │ └── percent_injector.dart
│ │ │ │ │ ├── chart_behavior.dart
│ │ │ │ │ ├── chart_title/
│ │ │ │ │ │ └── chart_title.dart
│ │ │ │ │ ├── domain_highlighter.dart
│ │ │ │ │ ├── initial_selection.dart
│ │ │ │ │ ├── legend/
│ │ │ │ │ │ ├── datum_legend.dart
│ │ │ │ │ │ ├── legend.dart
│ │ │ │ │ │ ├── legend_content_builder.dart
│ │ │ │ │ │ ├── legend_entry_layout.dart
│ │ │ │ │ │ ├── legend_layout.dart
│ │ │ │ │ │ └── series_legend.dart
│ │ │ │ │ ├── line_point_highlighter.dart
│ │ │ │ │ ├── range_annotation.dart
│ │ │ │ │ ├── select_nearest.dart
│ │ │ │ │ ├── slider/
│ │ │ │ │ │ └── slider.dart
│ │ │ │ │ ├── sliding_viewport.dart
│ │ │ │ │ └── zoom/
│ │ │ │ │ ├── initial_hint_behavior.dart
│ │ │ │ │ ├── pan_and_zoom_behavior.dart
│ │ │ │ │ └── pan_behavior.dart
│ │ │ │ ├── canvas/
│ │ │ │ │ ├── circle_sector_painter.dart
│ │ │ │ │ ├── line_painter.dart
│ │ │ │ │ ├── pie_painter.dart
│ │ │ │ │ ├── point_painter.dart
│ │ │ │ │ └── polygon_painter.dart
│ │ │ │ ├── cartesian_chart.dart
│ │ │ │ ├── chart_canvas.dart
│ │ │ │ ├── chart_container.dart
│ │ │ │ ├── chart_gesture_detector.dart
│ │ │ │ ├── chart_state.dart
│ │ │ │ ├── combo_chart/
│ │ │ │ │ └── combo_chart.dart
│ │ │ │ ├── graphics_factory.dart
│ │ │ │ ├── line_chart.dart
│ │ │ │ ├── line_style.dart
│ │ │ │ ├── pie_chart.dart
│ │ │ │ ├── scatter_plot_chart.dart
│ │ │ │ ├── selection_model_config.dart
│ │ │ │ ├── symbol_renderer.dart
│ │ │ │ ├── text_element.dart
│ │ │ │ ├── text_style.dart
│ │ │ │ ├── time_series_chart.dart
│ │ │ │ ├── user_managed_state.dart
│ │ │ │ ├── util/
│ │ │ │ │ └── color.dart
│ │ │ │ ├── util.dart
│ │ │ │ └── widget_layout_delegate.dart
│ │ │ ├── minimum_os.bzl
│ │ │ └── pubspec.yaml
│ │ └── docs/
│ │ ├── Gemfile
│ │ ├── flutter/
│ │ │ └── gallery.md
│ │ └── index.md
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ └── Runner.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
│ ├── lib/
│ │ ├── cubit/
│ │ │ ├── add_post_cubit.dart
│ │ │ ├── add_post_state.dart
│ │ │ ├── post_cubit.dart
│ │ │ ├── post_state.dart
│ │ │ ├── posts_cubit.dart
│ │ │ └── posts_state.dart
│ │ ├── main.dart
│ │ ├── rid/
│ │ │ └── messaging.dart
│ │ └── views/
│ │ ├── add_post.dart
│ │ ├── post.dart
│ │ └── posts.dart
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ └── Runner.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ ├── plugin/
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── analysis_options.yaml
│ │ ├── android/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── gradle/
│ │ │ │ └── wrapper/
│ │ │ │ └── gradle-wrapper.properties
│ │ │ ├── gradle.properties
│ │ │ ├── settings.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ └── kotlin/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── plugin/
│ │ │ └── Plugin.kt
│ │ ├── ios/
│ │ │ ├── .gitignore
│ │ │ ├── Assets/
│ │ │ │ └── .gitkeep
│ │ │ ├── Classes/
│ │ │ │ ├── Plugin.h
│ │ │ │ ├── Plugin.m
│ │ │ │ └── SwiftPlugin.swift
│ │ │ └── plugin.podspec
│ │ ├── lib/
│ │ │ └── plugin.dart
│ │ ├── macos/
│ │ │ ├── Classes/
│ │ │ │ └── Plugin.swift
│ │ │ └── plugin.podspec
│ │ └── pubspec.yaml
│ ├── pubspec.yaml
│ ├── reddit_ticker.iml
│ ├── rid_build.rs
│ ├── sh/
│ │ ├── android
│ │ ├── bindgen
│ │ ├── bindgen-dart
│ │ ├── clean
│ │ ├── ios
│ │ ├── linux
│ │ └── macos
│ ├── sql/
│ │ ├── all-posts.sql
│ │ └── all-scores.sql
│ ├── src/
│ │ ├── db.rs
│ │ ├── lib.rs
│ │ └── reddit/
│ │ ├── mod.rs
│ │ ├── reddit.rs
│ │ ├── reddit_api_response.rs
│ │ └── reddit_page_response.rs
│ └── test/
│ ├── logging.dart
│ └── wip.dart
├── todo/
│ ├── .gitignore
│ ├── Cargo.toml
│ ├── README.md
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── todo/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ ├── settings.gradle
│ │ └── todo_android.iml
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ └── Runner.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
│ ├── lib/
│ │ ├── main.dart
│ │ └── views/
│ │ ├── expiry.dart
│ │ ├── menu.dart
│ │ ├── todo.dart
│ │ └── todos.dart
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ └── Runner.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ ├── plugin/
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── android/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── gradle/
│ │ │ │ └── wrapper/
│ │ │ │ └── gradle-wrapper.properties
│ │ │ ├── gradle.properties
│ │ │ ├── settings.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ └── kotlin/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── plugin/
│ │ │ └── Plugin.kt
│ │ ├── ios/
│ │ │ ├── .gitignore
│ │ │ ├── Assets/
│ │ │ │ └── .gitkeep
│ │ │ ├── Classes/
│ │ │ │ ├── Plugin.h
│ │ │ │ ├── Plugin.m
│ │ │ │ └── SwiftPlugin.swift
│ │ │ └── plugin.podspec
│ │ ├── macos/
│ │ │ ├── Classes/
│ │ │ │ └── Plugin.swift
│ │ │ └── plugin.podspec
│ │ ├── plugin.iml
│ │ └── pubspec.yaml
│ ├── pubspec.yaml
│ ├── rid_build.rs
│ ├── sh/
│ │ ├── android
│ │ ├── bindgen
│ │ ├── clean
│ │ ├── ios
│ │ ├── linux
│ │ └── macos
│ ├── src/
│ │ └── lib.rs
│ ├── test/
│ │ └── widget_test.dart
│ └── todo.iml
├── todo_cubit/
│ ├── .gitignore
│ ├── Cargo.toml
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── todo_cubit/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ ├── settings.gradle
│ │ └── todo_cubit_android.iml
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata/
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ └── Runner.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
│ ├── lib/
│ │ ├── blocs/
│ │ │ └── cubit/
│ │ │ ├── filter_cubit.dart
│ │ │ ├── settings_cubit.dart
│ │ │ ├── todo_cubit.dart
│ │ │ ├── todo_state.dart
│ │ │ ├── todos_cubit.dart
│ │ │ └── todos_state.dart
│ │ ├── main.dart
│ │ └── views/
│ │ ├── expiry.dart
│ │ ├── menu.dart
│ │ ├── todo.dart
│ │ └── todos.dart
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── xcshareddata/
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ └── Runner.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ ├── plugin/
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── analysis_options.yaml
│ │ ├── android/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── gradle/
│ │ │ │ └── wrapper/
│ │ │ │ └── gradle-wrapper.properties
│ │ │ ├── gradle.properties
│ │ │ ├── settings.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ └── kotlin/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── plugin/
│ │ │ └── Plugin.kt
│ │ ├── ios/
│ │ │ ├── .gitignore
│ │ │ ├── Assets/
│ │ │ │ └── .gitkeep
│ │ │ ├── Classes/
│ │ │ │ ├── Plugin.h
│ │ │ │ ├── Plugin.m
│ │ │ │ └── SwiftPlugin.swift
│ │ │ └── plugin.podspec
│ │ ├── macos/
│ │ │ ├── Classes/
│ │ │ │ └── Plugin.swift
│ │ │ └── plugin.podspec
│ │ ├── plugin.iml
│ │ └── pubspec.yaml
│ ├── pubspec.yaml
│ ├── rid_build.rs
│ ├── sh/
│ │ ├── android
│ │ ├── android-emulator
│ │ ├── bindgen
│ │ ├── clean
│ │ ├── ios
│ │ ├── linux
│ │ └── macos
│ ├── src/
│ │ └── lib.rs
│ ├── test/
│ │ └── widget_test.dart
│ ├── todo_cubit.iml
│ ├── web/
│ │ ├── index.html
│ │ └── manifest.json
│ └── windows/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── run_loop.cpp
│ ├── run_loop.h
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
└── todo_cubit_wasm/
├── .gitignore
├── Cargo.toml
├── README.md
├── analysis_options.yaml
├── lib/
│ ├── blocs/
│ │ └── cubit/
│ │ ├── filter_cubit.dart
│ │ ├── settings_cubit.dart
│ │ ├── todo_cubit.dart
│ │ ├── todo_state.dart
│ │ ├── todos_cubit.dart
│ │ └── todos_state.dart
│ ├── main.dart
│ └── views/
│ ├── expiry.dart
│ ├── menu.dart
│ ├── todo.dart
│ └── todos.dart
├── plugin/
│ ├── .gitignore
│ ├── LICENSE
│ ├── analysis_options.yaml
│ ├── lib/
│ │ └── wasm/
│ │ ├── reply_channel.dart
│ │ └── utils.dart
│ ├── plugin.iml
│ └── pubspec.yaml
├── pubspec.yaml
├── rid_build.rs
├── sh/
│ ├── build-web
│ ├── clean
│ ├── debug-web
│ ├── wasm
│ ├── wasm-release
│ └── wasmgen
├── src/
│ ├── alloc.rs
│ ├── lib.rs
│ └── replies.rs
├── todo_cubit.iml
├── twitch.md
└── web/
├── index.html
└── manifest.json
SYMBOL INDEX (1938 symbols across 302 files)
FILE: dart/todo/lib/main.dart
function printStatus (line 4) | printStatus(Store store)
function handleCommand (line 25) | Future<bool> handleCommand(Store store, String line)
function printCommands (line 78) | printCommands()
function main (line 92) | void main(List<String> args)
FILE: dart/todo/rid_build.rs
function main (line 4) | fn main() {
FILE: dart/todo/src/app.rs
type Store (line 13) | pub struct Store {
method create (line 20) | fn create() -> Self {
method update (line 28) | fn update(&mut self, req_id: u64, msg: Msg) {
method update_todo (line 88) | fn update_todo<F: FnOnce(&mut Todo)>(&mut self, id: u32, update: F) {
method filtered_todos (line 97) | fn filtered_todos(&self) -> Vec<&Todo> {
type Todo (line 113) | pub struct Todo {
method cmp (line 120) | fn cmp(&self, other: &Self) -> std::cmp::Ordering {
method fmt (line 126) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
type Filter (line 137) | pub enum Filter {
method fmt (line 144) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
type Msg (line 159) | pub enum Msg {
type Reply (line 177) | pub enum Reply {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_chart.dart
class BarChart (line 24) | class BarChart extends OrdinalCartesianChart {
method makeDefaultRenderer (line 39) | SeriesRenderer<String> makeDefaultRenderer()
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_error_decorator.dart
class BarErrorDecorator (line 28) | class BarErrorDecorator<D> extends BarRendererDecorator<D> {
method decorate (line 51) | void decorate(
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_label_decorator.dart
class BarLabelDecorator (line 28) | class BarLabelDecorator<D> extends BarRendererDecorator<D> {
method decorate (line 72) | void decorate(Iterable<ImmutableBarRendererElement<D>> barElements,
method _decorateVerticalBars (line 92) | void _decorateVerticalBars(
method _decorateHorizontalBars (line 224) | void _decorateHorizontalBars(
method _getTotalLabelHeight (line 358) | int _getTotalLabelHeight(Iterable<TextElement> labelElements)
method _getTextStyle (line 365) | TextStyle _getTextStyle(
method _getDatumStyle (line 375) | TextStyle _getDatumStyle(
method _resolveLabelAnchor (line 389) | BarLabelAnchor _resolveLabelAnchor(num measure, BarLabelAnchor anchor)
type BarLabelPosition (line 401) | enum BarLabelPosition {
type BarLabelPlacement (line 415) | enum BarLabelPlacement {
type BarLabelAnchor (line 428) | enum BarLabelAnchor {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_lane_renderer.dart
class BarLaneRenderer (line 52) | class BarLaneRenderer<D> extends BarRenderer<D> {
method preprocessSeries (line 87) | void preprocessSeries(List<MutableSeries<D>> seriesList)
method update (line 120) | void update(List<ImmutableSeries<D>> seriesList, bool isAnimatingThisD...
method _getMaxMeasureValue (line 347) | num _getMaxMeasureValue(ImmutableAxis<num> measureAxis)
method paint (line 359) | void paint(ChartCanvas canvas, double animationPercent)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_lane_renderer_config.dart
class BarLaneRendererConfig (line 28) | class BarLaneRendererConfig extends BarRendererConfig<String> {
method build (line 77) | BarLaneRenderer<String> build()
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_renderer.dart
class BarRenderer (line 43) | class BarRenderer<D>
method configureSeries (line 75) | void configureSeries(List<MutableSeries<D>> seriesList)
method addPositionToDetailsForSeriesDatum (line 81) | DatumDetails<D> addPositionToDetailsForSeriesDatum(
method getBaseDetails (line 124) | BarRendererElement<D> getBaseDetails(dynamic datum, int index)
method makeAnimatedBar (line 135) | AnimatedBar<D> makeAnimatedBar(
method makeBarRendererElement (line 187) | BarRendererElement<D> makeBarRendererElement(
method paintBar (line 234) | void paintBar(ChartCanvas canvas, double animationPercent,
method _getBarStackBounds (line 363) | Rectangle<int> _getBarStackBounds(Rectangle<int> barStackRect)
method _getBarBounds (line 395) | Rectangle<int> _getBarBounds(
method getBoundsForBar (line 495) | Rectangle<int>? getBoundsForBar(BarRendererElement<D> bar)
class ImmutableBarRendererElement (line 498) | abstract class ImmutableBarRendererElement<D> {
class BarRendererElement (line 508) | class BarRendererElement<D> extends BaseBarRendererElement
method updateAnimationPercent (line 542) | void updateAnimationPercent(BaseBarRendererElement previous,
class AnimatedBar (line 570) | class AnimatedBar<D> extends BaseAnimatedBar<D, BarRendererElement<D>> {
method animateElementToMeasureAxisPosition (line 579) | void animateElementToMeasureAxisPosition(BaseBarRendererElement target)
method getCurrentBar (line 591) | BarRendererElement<D> getCurrentBar(double animationPercent)
method clone (line 602) | BarRendererElement<D> clone(BarRendererElement<D> bar)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_renderer_config.dart
class BarRendererConfig (line 25) | class BarRendererConfig<D> extends BaseBarRendererConfig<D> {
method build (line 60) | BarRenderer<D> build()
class CornerStrategy (line 82) | abstract class CornerStrategy {
method getRadius (line 84) | int getRadius(int barWidth)
class ConstCornerStrategy (line 88) | class ConstCornerStrategy implements CornerStrategy {
method getRadius (line 94) | int getRadius(_)
class NoCornerStrategy (line 109) | class NoCornerStrategy extends ConstCornerStrategy {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_renderer_decorator.dart
class BarRendererDecorator (line 23) | abstract class BarRendererDecorator<D> {
method decorate (line 26) | void decorate(Iterable<ImmutableBarRendererElement<D>> barElements,
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_target_line_renderer.dart
class BarTargetLineRenderer (line 43) | class BarTargetLineRenderer<D> extends BaseBarRenderer<D,
method configureSeries (line 71) | void configureSeries(List<MutableSeries<D>> seriesList)
method addPositionToDetailsForSeriesDatum (line 89) | DatumDetails<D> addPositionToDetailsForSeriesDatum(
method getBaseDetails (line 131) | _BarTargetLineRendererElement getBaseDetails(dynamic datum, int index)
method makeAnimatedBar (line 140) | _AnimatedBarTargetLine<D> makeAnimatedBar(
method makeBarRendererElement (line 192) | _BarTargetLineRendererElement makeBarRendererElement(
method paintBar (line 238) | void paintBar(
method _getTargetLinePoints (line 257) | List<Point<int>> _getTargetLinePoints(
method getBoundsForBar (line 355) | Rectangle<int> getBoundsForBar(_BarTargetLineRendererElement bar)
class _BarTargetLineRendererElement (line 372) | class _BarTargetLineRendererElement extends BaseBarRendererElement {
method updateAnimationPercent (line 385) | void updateAnimationPercent(BaseBarRendererElement previous,
class _AnimatedBarTargetLine (line 438) | class _AnimatedBarTargetLine<D>
method animateElementToMeasureAxisPosition (line 448) | void animateElementToMeasureAxisPosition(BaseBarRendererElement target)
method clone (line 462) | _BarTargetLineRendererElement clone(_BarTargetLineRendererElement bar)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_target_line_renderer_config.dart
class BarTargetLineRendererConfig (line 24) | class BarTargetLineRendererConfig<D> extends BaseBarRendererConfig<D> {
method build (line 65) | BarTargetLineRenderer<D> build()
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/base_bar_renderer.dart
class BaseBarRenderer (line 72) | abstract class BaseBarRenderer<D, R extends BaseBarRendererElement,
method preprocessSeries (line 122) | void preprocessSeries(List<MutableSeries<D>> seriesList)
method _calculateBarWeights (line 315) | List<double> _calculateBarWeights(int numBarGroups)
method getBaseDetails (line 348) | R getBaseDetails(dynamic datum, int index)
method configureDomainAxes (line 351) | void configureDomainAxes(List<MutableSeries<D>> seriesList)
method update (line 368) | void update(List<ImmutableSeries<D>> seriesList, bool isAnimatingThisD...
method makeAnimatedBar (line 522) | B makeAnimatedBar(
method makeBarRendererElement (line 550) | R makeBarRendererElement(
method paint (line 574) | void paint(ChartCanvas canvas, double animationPercent)
method paintBar (line 615) | void paintBar(
method getNearestDatumDetailPerSeries (line 619) | List<DatumDetails<D>> getNearestDatumDetailPerSeries(
method getBoundsForBar (line 687) | Rectangle<int>? getBoundsForBar(R bar)
method _getSegmentsForDomainValue (line 690) | List<BaseAnimatedBar<D, R>> _getSegmentsForDomainValue(D? domainValue,
method _getVerticalDetailsForDomainValue (line 716) | List<DatumDetails<D>> _getVerticalDetailsForDomainValue(
method _getHorizontalDetailsForDomainValue (line 744) | List<DatumDetails<D>> _getHorizontalDetailsForDomainValue(
method _getDistance (line 765) | double _getDistance(int point, int min, int max)
method getOrderedSeriesList (line 782) | Iterable<S> getOrderedSeriesList<S extends ImmutableSeries<D>>(
class _ReversedSeriesIterable (line 795) | class _ReversedSeriesIterable<S extends ImmutableSeries<Object?>>
class _ReversedSeriesIterator (line 810) | class _ReversedSeriesIterator<S extends ImmutableSeries<Object?>>
method moveNext (line 832) | bool moveNext()
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/base_bar_renderer_config.dart
class BaseBarRendererConfig (line 43) | abstract class BaseBarRendererConfig<D> extends LayoutViewConfig
type BarGroupingType (line 163) | enum BarGroupingType { grouped, groupedStacked, stacked }
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/base_bar_renderer_element.dart
class BaseBarRendererElement (line 20) | abstract class BaseBarRendererElement {
method updateAnimationPercent (line 53) | void updateAnimationPercent(BaseBarRendererElement previous,
class BaseAnimatedBar (line 63) | abstract class BaseAnimatedBar<D, R extends BaseBarRendererElement> {
method animateOut (line 91) | void animateOut()
method animateElementToMeasureAxisPosition (line 101) | void animateElementToMeasureAxisPosition(R target)
method setNewTarget (line 104) | void setNewTarget(R newTarget)
method getCurrentBar (line 119) | R getCurrentBar(double animationPercent)
method clone (line 134) | R clone(R bar)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/axis.dart
type AxisOrientation (line 59) | enum AxisOrientation { top, right, bottom, left }
class ImmutableAxis (line 61) | abstract class ImmutableAxis<D> {
method compareDomainValueToViewport (line 67) | int compareDomainValueToViewport(D domain)
method getLocation (line 70) | double? getLocation(D? domain)
method getDomain (line 72) | D getDomain(double location)
class Axis (line 84) | abstract class Axis<D> extends ImmutableAxis<D> implements LayoutView {
method setRangeBandConfig (line 182) | void setRangeBandConfig(RangeBandConfig rangeBandConfig)
method addDomainValue (line 192) | void addDomainValue(D domain)
method resetDefaultConfiguration (line 200) | void resetDefaultConfiguration()
method resetDomains (line 208) | void resetDomains()
method getLocation (line 246) | double? getLocation(D? domain)
method getDomain (line 269) | D getDomain(double location)
method compareDomainValueToViewport (line 272) | int compareDomainValueToViewport(D domain)
method setOutputRange (line 276) | void setOutputRange(int start, int end)
method updateTicks (line 281) | void updateTicks()
method _updateProvidedTicks (line 291) | void _updateProvidedTicks()
method _updateProvidedTickWidth (line 319) | void _updateProvidedTickWidth(int maxWidth, int maxHeight)
method _updateAxisTicks (line 332) | void _updateAxisTicks()
method setViewportSettings (line 406) | void setViewportSettings(double viewportScale, double viewportTranslat...
method _clampTranslatePx (line 432) | double _clampTranslatePx(
method measure (line 501) | ViewMeasuredSizes measure(int maxWidth, int maxHeight)
method _measureVerticalAxis (line 507) | ViewMeasuredSizes _measureVerticalAxis(int maxWidth, int maxHeight)
method _measureHorizontalAxis (line 516) | ViewMeasuredSizes _measureHorizontalAxis(int maxWidth, int maxHeight)
method layout (line 527) | void layout(Rectangle<int> componentBounds, Rectangle<int> drawAreaBou...
method paint (line 571) | void paint(ChartCanvas canvas, double animationPercent)
class NumericAxis (line 595) | class NumericAxis extends Axis<num> {
method setScaleViewport (line 603) | void setScaleViewport(NumericExtents viewport)
class OrdinalAxis (line 609) | class OrdinalAxis extends Axis<String> {
method setScaleViewport (line 622) | void setScaleViewport(OrdinalViewport viewport)
method layout (line 629) | void layout(Rectangle<int> componentBounds, Rectangle<int> drawAreaBou...
class OrdinalViewport (line 649) | class OrdinalViewport {
class AxisTester (line 670) | @visibleForTesting
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/axis_tick.dart
class AxisTicks (line 18) | class AxisTicks<D> extends Tick<D> implements Comparable<AxisTicks<D>> {
method animateInFrom (line 53) | void animateInFrom(double previousLocation)
method animateOut (line 61) | void animateOut(double? newLocation)
method setNewTarget (line 70) | void setNewTarget(double? newLocation)
method setCurrentTick (line 79) | void setCurrentTick(double animationPercent)
method _lerpDouble (line 101) | double? _lerpDouble(double? a, double? b, double t)
method compareTo (line 109) | int compareTo(AxisTicks<D> other)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/collision_report.dart
class CollisionReport (line 19) | class CollisionReport<D> {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/draw_strategy/base_tick_draw_strategy.dart
class BaseRenderSpec (line 41) | @immutable
class BaseTickDrawStrategy (line 125) | abstract class BaseTickDrawStrategy<D> implements TickDrawStrategy<D> {
method _degToRad (line 129) | double _degToRad(double deg)
method labelRotation (line 148) | int labelRotation({required bool collision})
method labelOffsetFromAxisPx (line 153) | int labelOffsetFromAxisPx({required bool collision})
method labelOffsetFromTickPx (line 158) | int labelOffsetFromTickPx({required bool collision})
method tickLabelAnchor (line 163) | TickLabelAnchor tickLabelAnchor({required bool collision})
method decorateTicks (line 208) | void decorateTicks(List<Tick<D>> ticks)
method updateTickWidth (line 230) | void updateTickWidth(List<Tick<D>> ticks, int maxWidth, int maxHeight,
method collides (line 258) | CollisionReport<D> collides(
method measureVerticallyDrawnTicks (line 354) | ViewMeasuredSizes measureVerticallyDrawnTicks(
method measureHorizontallyDrawnTicks (line 378) | ViewMeasuredSizes measureHorizontallyDrawnTicks(
method drawAxisLine (line 402) | void drawAxisLine(ChartCanvas canvas, AxisOrientation orientation,
method drawLabel (line 437) | void drawLabel(
method _normalizeHorizontalAnchor (line 537) | TextDirection _normalizeHorizontalAnchor(
method normalizeVerticalAnchor (line 559) | _PixelVerticalDirection normalizeVerticalAnchor(
method calculateWidthForRotatedLabel (line 581) | double calculateWidthForRotatedLabel(
method calculateHeightForRotatedLabel (line 607) | double calculateHeightForRotatedLabel(
method splitLabel (line 634) | List<TextElement> splitLabel(TextElement wholeLabel)
method getLabelWidth (line 644) | double getLabelWidth(Iterable<TextElement> labelElements)
method getLabelHeight (line 649) | double getLabelHeight(Iterable<TextElement> labelElements)
type _PixelVerticalDirection (line 657) | enum _PixelVerticalDirection {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/draw_strategy/gridline_draw_strategy.dart
class GridlineRendererSpec (line 33) | @immutable
method createDrawStrategy (line 65) | TickDrawStrategy<D> createDrawStrategy(
class GridlineTickDrawStrategy (line 93) | class GridlineTickDrawStrategy<D> extends BaseTickDrawStrategy<D> {
method draw (line 130) | void draw(
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/draw_strategy/none_draw_strategy.dart
class NoneRenderSpec (line 36) | @immutable
method createDrawStrategy (line 43) | TickDrawStrategy<D> createDrawStrategy(
class NoneDrawStrategy (line 56) | class NoneDrawStrategy<D> implements TickDrawStrategy<D> {
method updateTickWidth (line 71) | void updateTickWidth(List<Tick<D>> ticks, int maxWidth, int maxHeight,
method collides (line 76) | CollisionReport<D> collides(
method decorateTicks (line 81) | void decorateTicks(List<Tick<D>> ticks)
method drawAxisLine (line 90) | void drawAxisLine(ChartCanvas canvas, AxisOrientation orientation,
method draw (line 125) | void draw(ChartCanvas canvas, Tick<D> tick,
method measureHorizontallyDrawnTicks (line 134) | ViewMeasuredSizes measureHorizontallyDrawnTicks(
method measureVerticallyDrawnTicks (line 141) | ViewMeasuredSizes measureVerticallyDrawnTicks(
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/draw_strategy/range_tick_draw_strategy.dart
class RangeTickRendererSpec (line 44) | @immutable
method createDrawStrategy (line 104) | TickDrawStrategy<D> createDrawStrategy(
class RangeTickDrawStrategy (line 136) | class RangeTickDrawStrategy<D> extends SmallTickDrawStrategy<D> {
method draw (line 205) | void draw(ChartCanvas canvas, Tick<D> tick,
method measureVerticallyDrawnTicks (line 227) | ViewMeasuredSizes measureVerticallyDrawnTicks(
method measureHorizontallyDrawnTicks (line 266) | ViewMeasuredSizes measureHorizontallyDrawnTicks(
method drawRangeShadeAndRangeLabel (line 302) | void drawRangeShadeAndRangeLabel(
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/draw_strategy/small_tick_draw_strategy.dart
class SmallTickRendererSpec (line 32) | @immutable
method createDrawStrategy (line 65) | TickDrawStrategy<D> createDrawStrategy(
class SmallTickDrawStrategy (line 104) | class SmallTickDrawStrategy<D> extends BaseTickDrawStrategy<D> {
method draw (line 143) | void draw(ChartCanvas canvas, Tick<D> tick,
method calculateTickPositions (line 177) | List<Point<num>> calculateTickPositions(
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/draw_strategy/tick_draw_strategy.dart
class TickDrawStrategy (line 25) | abstract class TickDrawStrategy<D> {
method decorateTicks (line 30) | void decorateTicks(List<Tick<D>> ticks)
method collides (line 33) | CollisionReport<D> collides(
method measureVerticallyDrawnTicks (line 37) | ViewMeasuredSizes measureVerticallyDrawnTicks(
method measureHorizontallyDrawnTicks (line 42) | ViewMeasuredSizes measureHorizontallyDrawnTicks(
method updateTickWidth (line 47) | void updateTickWidth(List<Tick<D>> ticks, int maxWidth, int maxHeight,
method draw (line 58) | void draw(ChartCanvas canvas, Tick<D> tick,
method drawAxisLine (line 66) | void drawAxisLine(ChartCanvas canvas, AxisOrientation orientation,
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/end_points_tick_provider.dart
class EndPointsTickProvider (line 29) | class EndPointsTickProvider<D> extends BaseTickProvider<D> {
method getTicks (line 31) | List<Tick<D>> getTicks({
method _getStartValue (line 77) | D _getStartValue(TickHint<D>? tickHint, MutableScale<D> scale)
method _getEndValue (line 101) | D _getEndValue(TickHint<D>? tickHint, MutableScale<D> scale)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/linear/bucketing_numeric_axis.dart
class BucketingNumericAxis (line 39) | class BucketingNumericAxis extends NumericAxis {
method getLocation (line 66) | double? getLocation(num? domain)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/linear/bucketing_numeric_tick_provider.dart
class BucketingNumericTickProvider (line 47) | class BucketingNumericTickProvider extends NumericTickProvider {
method getTicks (line 65) | List<Tick<num>> getTicks({
class _BucketingFormatter (line 126) | class _BucketingFormatter extends SimpleTickFormatterBase<num> {
method formatValue (line 138) | String formatValue(num value)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/linear/linear_scale.dart
class LinearScale (line 49) | class LinearScale implements NumericScale {
method copy (line 74) | LinearScale copy()
method addDomain (line 81) | void addDomain(num domainValue)
method resetDomain (line 86) | void resetDomain()
method resetViewportSettings (line 92) | void resetViewportSettings()
method canTranslate (line 104) | bool canTranslate(_)
method compareDomainValueToViewport (line 115) | int compareDomainValueToViewport(num domainValue)
method setViewportSettings (line 125) | void setViewportSettings(double viewportScale, double viewportTranslat...
method computeViewportScaleFactor (line 161) | double computeViewportScaleFactor(double domainWindow)
method reverse (line 184) | num reverse(double viewPixels)
method isRangeValueWithinViewport (line 209) | bool isRangeValueWithinViewport(double rangeValue)
method _configureScale (line 216) | void _configureScale()
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/linear/linear_scale_domain_info.dart
class LinearScaleDomainInfo (line 19) | class LinearScaleDomainInfo {
method reset (line 56) | void reset()
method addDomainValue (line 64) | void addDomainValue(num? domainValue)
method extendDomain (line 85) | bool extendDomain(num? domainValue)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/linear/linear_scale_function.dart
class LinearScaleFunction (line 23) | class LinearScaleFunction {
method reverse (line 49) | double reverse(double viewPixels)
method updateScaleFactor (line 55) | void updateScaleFactor(
method getStepReservationPercent (line 78) | double getStepReservationPercent(
method updateTranslateAndRangeBand (line 91) | void updateTranslateAndRangeBand(LinearScaleViewportSettings viewportS...
method _calculateRangeBandSize (line 122) | double _calculateRangeBandSize(RangeBandConfig rangeBandConfig)
method _updateStepSizeAndScaleFactor (line 143) | void _updateStepSizeAndScaleFactor(
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/linear/linear_scale_viewport.dart
class LinearScaleViewportSettings (line 24) | class LinearScaleViewportSettings {
method reset (line 69) | void reset()
method isRangeValueWithinViewport (line 78) | bool isRangeValueWithinViewport(double rangeValue)
method updateViewportScaleFactor (line 83) | void updateViewportScaleFactor(LinearScaleDomainInfo domainInfo)
method updateViewportTranslatePx (line 107) | void updateViewportTranslatePx(
method updateViewportDomainExtent (line 126) | void updateViewportDomainExtent(
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/numeric_extents.dart
class NumericExtents (line 19) | class NumericExtents implements Extents<num> {
method plus (line 48) | NumericExtents plus(NumericExtents other)
method compareValue (line 69) | int compareValue(num value)
method _containsValue (line 79) | bool _containsValue(double value)
method overlaps (line 82) | bool overlaps(NumericExtents other)
method toString (line 100) | String toString()
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/numeric_scale.dart
class NumericScale (line 24) | abstract class NumericScale extends MutableScale<num> {
method computeViewportScaleFactor (line 56) | double computeViewportScaleFactor(double domainWindow)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/numeric_tick_provider.dart
class NumericTickProvider (line 45) | class NumericTickProvider extends BaseTickProvider<num> {
method setFixedTickCount (line 138) | void setFixedTickCount(int? tickCount)
method setTickCount (line 152) | void setTickCount(int maxTickCount, int minTickCount)
method _getTicksFromHint (line 200) | List<Tick<num>> _getTicksFromHint({
method getTicks (line 234) | List<Tick<num>> getTicks({
method _updateDomainExtents (line 344) | void _updateDomainExtents(NumericExtents axisExtents)
method _getStepsForTickCount (line 379) | _TickStepInfo _getStepsForTickCount(int tickCount, num high, num low)
method _getTickValues (line 467) | List<double> _getTickValues(_TickStepInfo steps, int tickCount)
method _updateTickCounts (line 479) | void _updateTickCounts({
method _getEnclosingPowerOfTen (line 518) | double _getEnclosingPowerOfTen(num number)
method _getStepLessThan (line 528) | double _getStepLessThan(double number, double stepSize)
method _removeRoundingErrors (line 543) | double _removeRoundingErrors(double number)
class _TickStepInfo (line 554) | class _TickStepInfo {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/ordinal_extents.dart
class OrdinalExtents (line 20) | class OrdinalExtents extends Extents<String> {
method indexOf (line 45) | int indexOf(String value)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/ordinal_scale.dart
class OrdinalScale (line 19) | abstract class OrdinalScale extends MutableScale<String> {
method setViewport (line 31) | void setViewport(int? viewportDataSize, String? startingDomain)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/ordinal_scale_domain_info.dart
class OrdinalScaleDomainInfo (line 24) | class OrdinalScaleDomainInfo {
method copy (line 35) | OrdinalScaleDomainInfo copy()
method add (line 42) | void add(String domain)
method indexOf (line 50) | int? indexOf(String domain)
method getDomainAtIndex (line 52) | String getDomainAtIndex(int index)
method clear (line 72) | void clear()
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/ordinal_tick_provider.dart
class OrdinalTickProvider (line 26) | class OrdinalTickProvider extends BaseTickProvider<String> {
method getTicks (line 30) | List<Tick<String>> getTicks({
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/range_axis_tick.dart
class RangeAxisTicks (line 19) | class RangeAxisTicks<D> extends AxisTicks<D> {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/range_tick.dart
class RangeTick (line 23) | class RangeTick<D> extends Tick<D> {
method toString (line 52) | String toString()
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/range_tick_provider.dart
class RangeTickProvider (line 31) | class RangeTickProvider<D> extends TickProvider<D> {
method getTicks (line 36) | List<Tick<D>> getTicks({
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/scale.dart
class Scale (line 33) | abstract class Scale<D> {
method reverse (line 42) | D reverse(double pixelLocation)
method canTranslate (line 49) | bool canTranslate(D domainValue)
method compareDomainValueToViewport (line 83) | int compareDomainValueToViewport(D domainValue)
method isRangeValueWithinViewport (line 88) | bool isRangeValueWithinViewport(double rangeValue)
method copy (line 108) | MutableScale<D> copy()
class MutableScale (line 117) | abstract class MutableScale<D> extends Scale<D> {
method resetDomain (line 119) | void resetDomain()
method resetViewportSettings (line 122) | void resetViewportSettings()
method addDomain (line 129) | void addDomain(D domainValue)
method setViewportSettings (line 150) | void setViewportSettings(double viewportScale, double viewportTranslat...
class ScaleOutputExtent (line 166) | class ScaleOutputExtent {
method containsValue (line 175) | bool containsValue(double value)
method toString (line 194) | String toString()
type RangeBandType (line 198) | enum RangeBandType {
class RangeBandConfig (line 227) | class RangeBandConfig {
type StepSizeType (line 284) | enum StepSizeType { autoDetect, fixedDomain, fixedPixels }
class StepSizeConfig (line 291) | class StepSizeConfig {
class Extents (line 316) | abstract class Extents<D> {}
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/simple_ordinal_scale.dart
class SimpleOrdinalScale (line 36) | class SimpleOrdinalScale implements OrdinalScale {
method reverse (line 145) | String reverse(double pixelLocation)
method canTranslate (line 163) | bool canTranslate(String domainValue)
method addDomain (line 170) | void addDomain(String domainValue)
method resetDomain (line 185) | void resetDomain()
method resetViewportSettings (line 191) | void resetViewportSettings()
method setViewportSettings (line 207) | void setViewportSettings(double viewportScale, double viewportTranslat...
method setViewport (line 220) | void setViewport(int? viewportDataSize, String? startingDomain)
method _updateViewport (line 234) | void _updateViewport()
method isRangeValueWithinViewport (line 290) | bool isRangeValueWithinViewport(double rangeValue)
method compareDomainValueToViewport (line 295) | int compareDomainValueToViewport(String domainValue)
method copy (line 313) | SimpleOrdinalScale copy()
method _updateCachedFields (line 315) | void _updateCachedFields(
method _updateScale (line 329) | void _updateScale()
method _recalculateScale (line 337) | void _recalculateScale()
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/spec/axis_spec.dart
class AxisSpec (line 27) | @immutable
method configure (line 60) | void configure(
method createAxis (line 87) | Axis<D>? createAxis()
class TickProviderSpec (line 110) | @immutable
method createTickProvider (line 112) | TickProvider<D> createTickProvider(ChartContext context)
class TickFormatterSpec (line 115) | @immutable
method createTickFormatter (line 117) | TickFormatter<D> createTickFormatter(ChartContext context)
class ScaleSpec (line 120) | @immutable
method createScale (line 122) | Scale<D> createScale()
class RenderSpec (line 125) | @immutable
method createDrawStrategy (line 129) | TickDrawStrategy<D> createDrawStrategy(
class TextStyleSpec (line 133) | @immutable
class LineStyleSpec (line 170) | @immutable
type TickLabelAnchor (line 196) | enum TickLabelAnchor {
type TickLabelJustification (line 207) | enum TickLabelJustification {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/spec/bucketing_axis_spec.dart
class BucketingAxisSpec (line 55) | @immutable
method configure (line 89) | void configure(
method createAxis (line 107) | BucketingNumericAxis createAxis()
class BucketingNumericTickProviderSpec (line 126) | @immutable
method createTickProvider (line 157) | BucketingNumericTickProvider createTickProvider(ChartContext context)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/spec/date_time_axis_spec.dart
class DateTimeAxisSpec (line 44) | @immutable
method configure (line 75) | void configure(Axis<DateTime> axis, ChartContext context,
method createAxis (line 85) | Axis<DateTime>? createAxis()
method createDateTimeAxis (line 91) | DateTimeAxis createDateTimeAxis(DateTimeFactory dateTimeFactory)
class DateTimeTickProviderSpec (line 106) | abstract class DateTimeTickProviderSpec extends TickProviderSpec<DateTim...
class DateTimeTickFormatterSpec (line 108) | abstract class DateTimeTickFormatterSpec extends TickFormatterSpec<DateT...
class AutoDateTimeTickProviderSpec (line 112) | @immutable
method createTickProvider (line 124) | AutoAdjustingDateTimeTickProvider createTickProvider(ChartContext cont...
class DayTickProviderSpec (line 143) | @immutable
method createTickProvider (line 155) | AutoAdjustingDateTimeTickProvider createTickProvider(ChartContext cont...
class DateTimeEndPointsTickProviderSpec (line 172) | @immutable
method createTickProvider (line 179) | EndPointsTickProvider<DateTime> createTickProvider(ChartContext context)
class StaticDateTimeTickProviderSpec (line 189) | @immutable
method createTickProvider (line 196) | StaticTickProvider<DateTime> createTickProvider(ChartContext context)
class TimeFormatterSpec (line 208) | @immutable
class BasicDateTimeTickFormatterSpec (line 247) | @immutable
method createTickFormatter (line 264) | DateTimeTickFormatter createTickFormatter(ChartContext context)
class AutoDateTimeTickFormatterSpec (line 290) | @immutable
method createTickFormatter (line 308) | DateTimeTickFormatter createTickFormatter(ChartContext context)
method _makeFormatter (line 335) | TimeTickFormatterImpl _makeFormatter(TimeFormatterSpec spec,
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/spec/end_points_time_axis_spec.dart
class EndPointsTimeAxisSpec (line 30) | @immutable
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/spec/numeric_axis_spec.dart
class NumericAxisSpec (line 34) | @immutable
method configure (line 83) | void configure(
method createAxis (line 93) | NumericAxis createAxis()
class NumericTickProviderSpec (line 108) | abstract class NumericTickProviderSpec extends TickProviderSpec<num> {}
class NumericTickFormatterSpec (line 110) | abstract class NumericTickFormatterSpec extends TickFormatterSpec<num> {}
class BasicNumericTickProviderSpec (line 112) | @immutable
method createTickProvider (line 143) | NumericTickProvider createTickProvider(ChartContext context)
class NumericEndPointsTickProviderSpec (line 183) | @immutable
method createTickProvider (line 190) | EndPointsTickProvider<num> createTickProvider(ChartContext context)
class StaticNumericTickProviderSpec (line 200) | @immutable
method createTickProvider (line 207) | StaticTickProvider<num> createTickProvider(ChartContext context)
class BasicNumericTickFormatterSpec (line 219) | @immutable
method createTickFormatter (line 234) | NumericTickFormatter createTickFormatter(ChartContext context)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/spec/ordinal_axis_spec.dart
class OrdinalAxisSpec (line 34) | @immutable
method configure (line 67) | void configure(Axis<String> axis, ChartContext context,
method createAxis (line 77) | OrdinalAxis createAxis()
class OrdinalTickProviderSpec (line 95) | abstract class OrdinalTickProviderSpec extends TickProviderSpec<String> {}
class OrdinalTickFormatterSpec (line 97) | abstract class OrdinalTickFormatterSpec extends TickFormatterSpec<String...
class OrdinalScaleSpec (line 99) | abstract class OrdinalScaleSpec extends ScaleSpec<String> {}
class BasicOrdinalTickProviderSpec (line 101) | @immutable
method createTickProvider (line 106) | OrdinalTickProvider createTickProvider(ChartContext context)
class StaticOrdinalTickProviderSpec (line 117) | @immutable
method createTickProvider (line 124) | StaticTickProvider<String> createTickProvider(ChartContext context)
class RangeOrdinalTickProviderSpec (line 137) | @immutable
method createTickProvider (line 143) | RangeTickProvider<String> createTickProvider(ChartContext context)
class BasicOrdinalTickFormatterSpec (line 155) | @immutable
method createTickFormatter (line 160) | OrdinalTickFormatter createTickFormatter(ChartContext context)
class SimpleOrdinalScaleSpec (line 170) | @immutable
method createScale (line 175) | OrdinalScale createScale()
class FixedPixelSpaceOrdinalScaleSpec (line 186) | @immutable
method createScale (line 193) | OrdinalScale createScale()
class FixedPixelOrdinalScaleSpec (line 205) | @immutable
method createScale (line 212) | OrdinalScale createScale()
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/spec/percent_axis_spec.dart
class PercentAxisSpec (line 30) | @immutable
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/spec/range_tick_spec.dart
class RangeTickSpec (line 22) | class RangeTickSpec<D> extends TickSpec<D> {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/spec/tick_spec.dart
class TickSpec (line 21) | class TickSpec<D> {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/static_tick_provider.dart
class StaticTickProvider (line 32) | class StaticTickProvider<D> extends TickProvider<D> {
method getTicks (line 38) | List<Tick<D>> getTicks({
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/tick.dart
class Tick (line 21) | class Tick<D> {
method toString (line 44) | String toString()
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/tick_formatter.dart
class TickFormatter (line 24) | abstract class TickFormatter<D> {
method format (line 28) | List<String> format(List<D> tickValues, Map<D, String> cache,
class SimpleTickFormatterBase (line 32) | abstract class SimpleTickFormatterBase<D> implements TickFormatter<D> {
method format (line 36) | List<String> format(List<D> tickValues, Map<D, String> cache,
method formatValue (line 49) | String formatValue(D value)
class OrdinalTickFormatter (line 53) | class OrdinalTickFormatter extends SimpleTickFormatterBase<String> {
method formatValue (line 57) | String formatValue(String value)
class NumericTickFormatter (line 69) | class NumericTickFormatter extends SimpleTickFormatterBase<num> {
method _getFormatter (line 95) | MeasureFormatter _getFormatter(NumberFormat numberFormat)
method formatValue (line 100) | String formatValue(num value)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/tick_provider.dart
class TickProvider (line 27) | abstract class TickProvider<D> {
method getTicks (line 39) | List<Tick<D>> getTicks({
class BaseTickProvider (line 53) | abstract class BaseTickProvider<D> implements TickProvider<D> {
method createTicks (line 57) | List<Tick<D>> createTicks(
class TickHint (line 89) | class TickHint<D> {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/auto_adjusting_date_time_tick_provider.dart
class AutoAdjustingDateTimeTickProvider (line 44) | class AutoAdjustingDateTimeTickProvider implements TickProvider<DateTime> {
method getTicks (line 91) | List<Tick<DateTime>> getTicks({
method _getClosestTickProvider (line 136) | TimeRangeTickProvider _getClosestTickProvider(TickHint<DateTime> tickH...
method createYearTickProvider (line 157) | TimeRangeTickProvider createYearTickProvider(
method createMonthTickProvider (line 161) | TimeRangeTickProvider createMonthTickProvider(
method createDayTickProvider (line 165) | TimeRangeTickProvider createDayTickProvider(
method createHourTickProvider (line 169) | TimeRangeTickProvider createHourTickProvider(
method createMinuteTickProvider (line 173) | TimeRangeTickProvider createMinuteTickProvider(
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/base_time_stepper.dart
class BaseTimeStepper (line 22) | abstract class BaseTimeStepper implements TimeStepper {
method getStepTimeBeforeInclusive (line 38) | DateTime getStepTimeBeforeInclusive(DateTime time, int tickIncrement)
method getNextStepTime (line 41) | DateTime getNextStepTime(DateTime time, int tickIncrement)
method getStepCountBetween (line 44) | int getStepCountBetween(DateTimeExtents timeExtent, int tickIncrement)
method getSteps (line 59) | TimeStepIteratorFactory getSteps(DateTimeExtents timeExtent)
method updateBoundingSteps (line 69) | DateTimeExtents updateBoundingSteps(DateTimeExtents timeExtent)
method getStepTimeAfterInclusive (line 76) | DateTime getStepTimeAfterInclusive(DateTime time, int tickIncrement)
class _TimeStepIteratorImpl (line 85) | class _TimeStepIteratorImpl implements TimeStepIterator {
method moveNext (line 98) | bool moveNext()
method reset (line 113) | TimeStepIterator reset(int tickIncrement)
class _TimeStepIteratorFactoryImpl (line 121) | class _TimeStepIteratorFactoryImpl extends TimeStepIteratorFactory {
function checkTickIncrement (line 141) | void checkTickIncrement(int tickIncrement)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/date_time_axis.dart
class DateTimeAxis (line 26) | class DateTimeAxis extends Axis<DateTime> {
method setScaleViewport (line 38) | void setScaleViewport(DateTimeExtents viewport)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/date_time_extents.dart
class DateTimeExtents (line 18) | class DateTimeExtents extends Extents<DateTime> {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/date_time_scale.dart
class DateTimeScale (line 26) | class DateTimeScale extends MutableScale<DateTime> {
method reverse (line 41) | DateTime reverse(double pixelLocation)
method resetDomain (line 46) | void resetDomain()
method setViewportSettings (line 64) | void setViewportSettings(double viewportScale, double viewportTranslat...
method addDomain (line 74) | void addDomain(DateTime domainValue)
method resetViewportSettings (line 79) | void resetViewportSettings()
method copy (line 99) | DateTimeScale copy()
method isRangeValueWithinViewport (line 108) | bool isRangeValueWithinViewport(double rangeValue)
method compareDomainValueToViewport (line 112) | int compareDomainValueToViewport(DateTime domainValue)
method canTranslate (line 134) | bool canTranslate(DateTime domainValue)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/date_time_tick_formatter.dart
class DateTimeTickFormatter (line 35) | class DateTimeTickFormatter implements TickFormatter<DateTime> {
method format (line 145) | List<String> format(List<DateTime> tickValues, Map<DateTime, String> c...
method _checkPositiveAndSorted (line 195) | void _checkPositiveAndSorted(Iterable<int> values)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/day_time_stepper.dart
class DayTimeStepper (line 20) | class DayTimeStepper extends BaseTimeStepper {
method getStepTimeBeforeInclusive (line 56) | DateTime getStepTimeBeforeInclusive(DateTime time, int tickIncrement)
method getNextStepTime (line 70) | DateTime getNextStepTime(DateTime time, int tickIncrement)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/hour_tick_formatter.dart
class HourTickFormatter (line 22) | class HourTickFormatter extends TimeTickFormatterImpl {
method formatSimpleTick (line 39) | String formatSimpleTick(DateTime date)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/hour_time_stepper.dart
class HourTimeStepper (line 20) | class HourTimeStepper extends BaseTimeStepper {
method getStepTimeBeforeInclusive (line 55) | DateTime getStepTimeBeforeInclusive(DateTime time, int tickIncrement)
method getNextStepTime (line 80) | DateTime getNextStepTime(DateTime time, int tickIncrement)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/minute_time_stepper.dart
class MinuteTimeStepper (line 20) | class MinuteTimeStepper extends BaseTimeStepper {
method getStepTimeBeforeInclusive (line 53) | DateTime getStepTimeBeforeInclusive(DateTime time, int tickIncrement)
method getNextStepTime (line 71) | DateTime getNextStepTime(DateTime time, int tickIncrement)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/month_time_stepper.dart
class MonthTimeStepper (line 20) | class MonthTimeStepper extends BaseTimeStepper {
method getStepTimeBeforeInclusive (line 50) | DateTime getStepTimeBeforeInclusive(DateTime time, int tickIncrement)
method getNextStepTime (line 65) | DateTime getNextStepTime(DateTime time, int tickIncrement)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/simple_time_tick_formatter.dart
type DateTimeFormatterFunction (line 18) | typedef DateTimeFormatterFunction = String Function(DateTime datetime);
class SimpleTimeTickFormatter (line 21) | class SimpleTimeTickFormatter implements TimeTickFormatter {
method formatFirstTick (line 27) | String formatFirstTick(DateTime date)
method formatSimpleTick (line 30) | String formatSimpleTick(DateTime date)
method formatTransitionTick (line 33) | String formatTransitionTick(DateTime date)
method isTransition (line 37) | bool isTransition(DateTime tickValue, DateTime prevTickValue)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/time_range_tick_provider.dart
class TimeRangeTickProvider (line 22) | abstract class TimeRangeTickProvider extends BaseTickProvider<DateTime> {
method providesSufficientTicksForRange (line 25) | bool providesSufficientTicksForRange(DateTimeExtents domainExtents)
method getClosestStepSize (line 28) | int getClosestStepSize(int stepSize)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/time_range_tick_provider_impl.dart
class TimeRangeTickProviderImpl (line 29) | class TimeRangeTickProviderImpl extends TimeRangeTickProvider {
method providesSufficientTicksForRange (line 36) | bool providesSufficientTicksForRange(DateTimeExtents domainExtents)
method getClosestStepSize (line 43) | int getClosestStepSize(int stepSize)
method _getClosestIncrementFromStepSize (line 49) | int _getClosestIncrementFromStepSize(int stepSize)
method getTicks (line 67) | List<Tick<DateTime>> getTicks({
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/time_stepper.dart
class TimeStepper (line 19) | abstract class TimeStepper {
method updateBoundingSteps (line 22) | DateTimeExtents updateBoundingSteps(DateTimeExtents timeExtents)
method getStepCountBetween (line 27) | int getStepCountBetween(DateTimeExtents timeExtents, int tickIncrement)
method getSteps (line 32) | TimeStepIteratorFactory getSteps(DateTimeExtents timeExtents)
class TimeStepIterator (line 48) | abstract class TimeStepIterator extends Iterator<DateTime> {
method reset (line 54) | TimeStepIterator reset(int tickIncrement)
class TimeStepIteratorFactory (line 58) | abstract class TimeStepIteratorFactory extends Iterable<DateTime> {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/time_tick_formatter.dart
class TimeTickFormatter (line 17) | abstract class TimeTickFormatter {
method formatFirstTick (line 19) | String formatFirstTick(DateTime date)
method formatSimpleTick (line 24) | String formatSimpleTick(DateTime date)
method formatTransitionTick (line 27) | String formatTransitionTick(DateTime date)
method isTransition (line 30) | bool isTransition(DateTime tickValue, DateTime prevTickValue)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/time_tick_formatter_impl.dart
class TimeTickFormatterImpl (line 21) | class TimeTickFormatterImpl implements TimeTickFormatter {
method formatFirstTick (line 42) | String formatFirstTick(DateTime date)
method formatSimpleTick (line 45) | String formatSimpleTick(DateTime date)
method formatTransitionTick (line 48) | String formatTransitionTick(DateTime date)
method isTransition (line 51) | bool isTransition(DateTime tickValue, DateTime prevTickValue)
method getCalendarField (line 64) | int getCalendarField(DateTime dateTime, CalendarField field)
type CalendarField (line 82) | enum CalendarField {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/year_time_stepper.dart
class YearTimeStepper (line 20) | class YearTimeStepper extends BaseTimeStepper {
method getStepTimeBeforeInclusive (line 50) | DateTime getStepTimeBeforeInclusive(DateTime time, int tickIncrement)
method getNextStepTime (line 56) | DateTime getNextStepTime(DateTime time, int tickIncrement)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/cartesian_chart.dart
class NumericCartesianChart (line 48) | class NumericCartesianChart extends CartesianChart<num> {
method initDomainAxis (line 65) | void initDomainAxis()
class OrdinalCartesianChart (line 71) | class OrdinalCartesianChart extends CartesianChart<String> {
method initDomainAxis (line 88) | void initDomainAxis()
class CartesianChart (line 94) | abstract class CartesianChart<D> extends BaseChart<D> {
method init (line 172) | void init(ChartContext context, GraphicsFactory graphicsFactory)
method updateConfig (line 190) | void updateConfig(LayoutConfig? layoutConfig)
method initDomainAxis (line 198) | void initDomainAxis()
method createDomainAxisFromSpec (line 211) | Axis<D>? createDomainAxisFromSpec(AxisSpec<D> axisSpec)
method configurationChanged (line 216) | void configurationChanged()
method getMeasureAxis (line 297) | NumericAxis getMeasureAxis({String? axisId})
method makeSeries (line 365) | MutableSeries<D> makeSeries(Series<dynamic, D> series)
method makeDefaultRenderer (line 379) | SeriesRenderer<D> makeDefaultRenderer()
method preprocessSeries (line 384) | Map<String, List<MutableSeries<D>>> preprocessSeries(
method onSkipLayout (line 487) | void onSkipLayout()
method onPostLayout (line 507) | void onPostLayout(Map<String, List<MutableSeries<D>>> rendererToSeries...
method getDatumDetails (line 515) | List<DatumDetails<D>> getDatumDetails(SelectionModelType type)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/cartesian_renderer.dart
class CartesianRenderer (line 26) | abstract class CartesianRenderer<D> extends SeriesRenderer<D> {
method configureDomainAxes (line 28) | void configureDomainAxes(List<MutableSeries<D>> seriesList)
method configureMeasureAxes (line 31) | void configureMeasureAxes(List<MutableSeries<D>> seriesList)
class BaseCartesianRenderer (line 34) | abstract class BaseCartesianRenderer<D> extends BaseSeriesRenderer<D>
method onAttach (line 49) | void onAttach(BaseChart<D> chart)
method configureDomainAxes (line 63) | void configureDomainAxes(List<MutableSeries<D>> seriesList)
method configureMeasureAxes (line 111) | void configureMeasureAxes(List<MutableSeries<D>> seriesList)
method addMeasureValuesFor (line 140) | void addMeasureValuesFor(
method findNearestViewportStart (line 169) | int findNearestViewportStart(
method findNearestViewportEnd (line 223) | int findNearestViewportEnd(
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/base_chart.dart
type BehaviorCreator (line 38) | typedef BehaviorCreator = ChartBehavior<D> Function<D>();
class BaseChart (line 40) | abstract class BaseChart<D> {
method init (line 119) | void init(ChartContext context, GraphicsFactory graphicsFactory)
method updateConfig (line 134) | void updateConfig(LayoutConfig layoutConfig)
method resetChartDirtyFlag (line 144) | void resetChartDirtyFlag()
method markChartDirty (line 152) | void markChartDirty()
method configurationChanged (line 161) | void configurationChanged()
method addGestureListener (line 173) | GestureListener addGestureListener(GestureListener listener)
method removeGestureListener (line 179) | void removeGestureListener(GestureListener listener)
method addLifecycleListener (line 183) | LifecycleListener<D> addLifecycleListener(LifecycleListener<D> listener)
method removeLifecycleListener (line 188) | bool removeLifecycleListener(LifecycleListener<D> listener)
method getSelectionModel (line 193) | MutableSelectionModel<D> getSelectionModel(SelectionModelType type)
method getDatumDetails (line 198) | List<DatumDetails<D>> getDatumDetails(SelectionModelType type)
method addSeriesRenderer (line 212) | void addSeriesRenderer(SeriesRenderer<D> renderer)
method getSeriesRenderer (line 226) | SeriesRenderer<D> getSeriesRenderer(String? rendererId)
method makeDefaultRenderer (line 241) | SeriesRenderer<D> makeDefaultRenderer()
method pointWithinRenderer (line 243) | bool pointWithinRenderer(Point<double> chartPosition)
method getNearestDatumDetailPerSeries (line 258) | List<DatumDetails<D>> getNearestDatumDetailPerSeries(
method getSelectedDatumDetails (line 298) | List<DatumDetails<D>> getSelectedDatumDetails(
method getAllDatumDetails (line 323) | List<DatumDetails<D>> getAllDatumDetails(
method createBehavior (line 355) | ChartBehavior<D> createBehavior(BehaviorCreator creator)
method addBehavior (line 362) | void addBehavior(ChartBehavior<D> behavior)
method removeBehavior (line 382) | bool removeBehavior(ChartBehavior<D>? behavior)
method registerTappable (line 405) | void registerTappable(ChartBehavior<D> behavior)
method unregisterTappable (line 416) | void unregisterTappable(ChartBehavior<D> behavior)
method measure (line 429) | void measure(int width, int height)
method layout (line 435) | void layout(int width, int height)
method layoutInternal (line 443) | void layoutInternal(int width, int height)
method addView (line 449) | void addView(LayoutView view)
method removeView (line 456) | void removeView(LayoutView view)
method withinDrawArea (line 461) | bool withinDrawArea(Point<num> point)
method draw (line 484) | void draw(List<Series<dynamic, D>> seriesList)
method redraw (line 517) | void redraw({bool skipAnimation = false, bool skipLayout = false})
method drawInternal (line 530) | void drawInternal(List<MutableSeries<D>> seriesList,
method makeSeries (line 556) | MutableSeries<D> makeSeries(Series<dynamic, D> series)
method configureSeries (line 569) | void configureSeries(List<MutableSeries<D>> seriesList)
method preprocessSeries (line 590) | Map<String, List<MutableSeries<D>>> preprocessSeries(
method onSkipLayout (line 618) | void onSkipLayout()
method onPostLayout (line 622) | void onPostLayout(Map<String, List<MutableSeries<D>>> rendererToSeries...
method paint (line 641) | void paint(ChartCanvas canvas)
method fireOnDraw (line 663) | void fireOnDraw(List<MutableSeries<D>> seriesList)
method fireOnPreprocess (line 670) | void fireOnPreprocess(List<MutableSeries<D>> seriesList)
method fireOnPostprocess (line 677) | void fireOnPostprocess(List<MutableSeries<D>> seriesList)
method fireOnAxisConfigured (line 684) | void fireOnAxisConfigured()
method fireOnPostrender (line 691) | void fireOnPostrender(ChartCanvas canvas)
method fireOnAnimationComplete (line 698) | void fireOnAnimationComplete()
method destroy (line 705) | void destroy()
class LifecycleListener (line 717) | class LifecycleListener<D> {
type LifecycleSeriesListCallback (line 765) | typedef LifecycleSeriesListCallback<D> = void Function(
type LifecycleCanvasCallback (line 767) | typedef LifecycleCanvasCallback = void Function(ChartCanvas canvas);
type LifecycleEmptyCallback (line 768) | typedef LifecycleEmptyCallback = void Function();
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/a11y/a11y_explore_behavior.dart
type ExploreModeTrigger (line 23) | enum ExploreModeTrigger {
class A11yExploreBehavior (line 29) | abstract class A11yExploreBehavior<D> implements ChartBehavior<D> {
method _toggleExploreMode (line 70) | bool _toggleExploreMode(Point<double> _)
method createA11yNodes (line 87) | List<A11yNode> createA11yNodes()
method attachTo (line 90) | void attachTo(BaseChart<D> chart)
method removeFrom (line 96) | void removeFrom(BaseChart<D> chart)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/a11y/a11y_node.dart
type OnFocus (line 18) | typedef OnFocus = void Function();
class A11yNode (line 21) | class A11yNode {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/a11y/domain_a11y_explore_behavior.dart
type VocalizationCallback (line 29) | typedef VocalizationCallback<D> = String Function(
function domainVocalization (line 33) | String domainVocalization<D>(List<SeriesDatum<D>> seriesDatums)
class DomainA11yExploreBehavior (line 42) | class DomainA11yExploreBehavior<D> extends A11yExploreBehavior<D> {
method createA11yNodes (line 64) | List<A11yNode> createA11yNodes()
method _updateSeriesList (line 114) | void _updateSeriesList(List<MutableSeries<D>> seriesList)
method attachTo (line 119) | void attachTo(BaseChart<D> chart)
method removeFrom (line 130) | void removeFrom(BaseChart<D> chart)
class _DomainA11yNode (line 139) | class _DomainA11yNode extends A11yNode implements Comparable<_DomainA11y...
method compareTo (line 182) | int compareTo(_DomainA11yNode other)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/a11y/keyboard_domain_navigator.dart
class KeyboardDomainNavigator (line 43) | abstract class KeyboardDomainNavigator<D> implements ChartBehavior<D> {
method attachTo (line 62) | void attachTo(BaseChart<D> chart)
method removeFrom (line 68) | void removeFrom(BaseChart<D> chart)
method onData (line 74) | void onData(List<MutableSeries<D>> _)
method handleEscape (line 81) | bool handleEscape()
method handleEnter (line 88) | bool handleEnter()
method handlePreviousDomain (line 95) | bool handlePreviousDomain()
method handleNextDomain (line 123) | bool handleNextDomain()
method _doNavigate (line 151) | void _doNavigate(int domainIndex)
method selectDomain (line 156) | void selectDomain(int domainIndex)
method clearSelection (line 161) | void clearSelection()
method _selectDomainIndex (line 169) | bool _selectDomainIndex(
method _getActiveHoverDomainIndex (line 200) | int _getActiveHoverDomainIndex()
method _generateSelectionDomains (line 235) | void _generateSelectionDomains()
method _getDatumPairs (line 293) | List<SeriesDatum<D>> _getDatumPairs(int domainIndex)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/calculation/percent_injector.dart
class PercentInjector (line 40) | class PercentInjector<D> implements ChartBehavior<D> {
method attachTo (line 56) | void attachTo(BaseChart<D> chart)
method removeFrom (line 61) | void removeFrom(BaseChart<D> chart)
method _onData (line 66) | void _onData(List<MutableSeries<D>> seriesList)
method _preProcess (line 78) | void _preProcess(List<MutableSeries<D>> seriesList)
type PercentInjectorTotalType (line 228) | enum PercentInjectorTotalType { domain, domainBySeriesCategory, series }
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/chart_behavior.dart
class ChartBehavior (line 21) | abstract class ChartBehavior<D> {
method attachTo (line 25) | void attachTo(BaseChart<D> chart)
method removeFrom (line 28) | void removeFrom(BaseChart<D> chart)
type BehaviorPosition (line 44) | enum BehaviorPosition {
type OutsideJustification (line 53) | enum OutsideJustification {
type InsideJustification (line 63) | enum InsideJustification {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/chart_title/chart_title.dart
class ChartTitle (line 43) | class ChartTitle<D> implements ChartBehavior<D> {
method attachTo (line 227) | void attachTo(BaseChart<D> chart)
method removeFrom (line 240) | void removeFrom(BaseChart<D> chart)
method _updateViewData (line 246) | void _updateViewData()
class _ChartTitleLayoutView (line 257) | class _ChartTitleLayoutView<D> extends LayoutView {
method measure (line 309) | ViewMeasuredSizes measure(int maxWidth, int maxHeight)
method layout (line 422) | void layout(Rectangle<int> componentBounds, Rectangle<int> drawAreaBou...
method paint (line 431) | void paint(ChartCanvas canvas, double animationPercent)
method _resetTextElementCache (line 532) | void _resetTextElementCache()
method _getLabelPosition (line 565) | Point<int>? _getLabelPosition(
method _getHorizontalLabelPosition (line 589) | Point<int> _getHorizontalLabelPosition(
method _getVerticalLabelPosition (line 664) | Point<int> _getVerticalLabelPosition(
method _getTextStyle (line 737) | TextStyle _getTextStyle(
class _ChartTitleConfig (line 754) | class _ChartTitleConfig {
type ChartTitleDirection (line 792) | enum ChartTitleDirection {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/domain_highlighter.dart
class DomainHighlighter (line 29) | class DomainHighlighter<D> implements ChartBehavior<D> {
method _selectionChanged (line 41) | void _selectionChanged(SelectionModel<D> selectionModel)
method _updateColorFunctions (line 45) | void _updateColorFunctions(List<MutableSeries<D>> seriesList)
method attachTo (line 65) | void attachTo(BaseChart<D> chart)
method removeFrom (line 74) | void removeFrom(BaseChart<D> chart)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/domain_outliner.dart
class DomainOutliner (line 27) | class DomainOutliner<D> implements ChartBehavior<D> {
method _selectionChange (line 56) | void _selectionChange(SelectionModel<D> selectionModel)
method _outline (line 60) | void _outline(List<MutableSeries<D>> seriesList)
method attachTo (line 91) | void attachTo(BaseChart<D> chart)
method removeFrom (line 100) | void removeFrom(BaseChart<D> chart)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/initial_selection.dart
class InitialSelection (line 24) | class InitialSelection<D> implements ChartBehavior<D> {
method _setInitialSelection (line 46) | void _setInitialSelection(List<MutableSeries<D>> seriesList)
method attachTo (line 61) | void attachTo(BaseChart<D> chart)
method removeFrom (line 67) | void removeFrom(BaseChart<D> chart)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/legend/datum_legend.dart
class DatumLegend (line 32) | class DatumLegend<D> extends Legend<D> {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/legend/legend.dart
class Legend (line 53) | abstract class Legend<D> implements ChartBehavior<D>, LayoutView {
method defaultLegendMeasureFormatter (line 104) | String defaultLegendMeasureFormatter(num? value)
method onData (line 146) | void onData(List<MutableSeries<D>> seriesList)
method _preProcess (line 149) | void _preProcess(List<MutableSeries<D>> seriesList)
method preProcessSeriesList (line 157) | void preProcessSeriesList(List<MutableSeries<D>> seriesList)
method _postProcess (line 160) | void _postProcess(List<MutableSeries<D>> seriesList)
method _selectionChanged (line 206) | void _selectionChanged(SelectionModel<D> selectionModel)
method _updateLegendEntries (line 215) | void _updateLegendEntries({List<MutableSeries<D>>? seriesList})
method updateLegend (line 223) | void updateLegend()
method attachTo (line 226) | void attachTo(BaseChart<D> chart)
method removeFrom (line 237) | void removeFrom(BaseChart<D> chart)
method measure (line 270) | ViewMeasuredSizes measure(int maxWidth, int maxHeight)
method layout (line 277) | void layout(Rectangle<int> componentBounds, Rectangle<int> drawAreaBou...
method paint (line 285) | void paint(ChartCanvas canvas, double animationPercent)
class LegendState (line 299) | class LegendState<D> {
class LegendCellPadding (line 310) | class LegendCellPadding {
method bottom (line 376) | double bottom(num height)
method left (line 379) | double left(num width)
method right (line 381) | double right(num width)
method top (line 383) | double top(num height)
type LegendTapHandling (line 387) | enum LegendTapHandling {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/legend/legend_entry.dart
class LegendEntryBase (line 23) | class LegendEntryBase {
class LegendCategory (line 65) | class LegendCategory<D> extends LegendEntryBase {
class LegendEntry (line 97) | class LegendEntry<D> extends LegendEntryBase {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/legend/legend_entry_generator.dart
class LegendEntryGenerator (line 25) | abstract class LegendEntryGenerator<D> {
method getLegendEntries (line 29) | List<LegendEntry<D>> getLegendEntries(List<MutableSeries<D>> seriesList)
method updateLegendEntries (line 36) | void updateLegendEntries(List<LegendEntry<D>> legendEntries,
type LegendDefaultMeasure (line 61) | enum LegendDefaultMeasure {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/legend/per_datum_legend_entry_generator.dart
class PerDatumLegendEntryGenerator (line 28) | class PerDatumLegendEntryGenerator<D> implements LegendEntryGenerator<D> {
method getLegendEntries (line 46) | List<LegendEntry<D>> getLegendEntries(List<MutableSeries<D>> seriesList)
method updateLegendEntries (line 67) | void updateLegendEntries(List<LegendEntry<D>> legendEntries,
method _updateFromSelection (line 82) | void _updateFromSelection(
method _resetLegendEntryMeasures (line 100) | void _resetLegendEntryMeasures(List<LegendEntry<D>> legendEntries)
method _updateEntries (line 113) | void _updateEntries(List<LegendEntry<D>> legendEntries)
method _getFormattedMeasureValue (line 130) | String _getFormattedMeasureValue(ImmutableSeries<D> series, num measure)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/legend/per_series_legend_entry_generator.dart
class PerSeriesLegendEntryGenerator (line 29) | class PerSeriesLegendEntryGenerator<D> implements LegendEntryGenerator<D> {
method getLegendEntries (line 47) | List<LegendEntry<D>> getLegendEntries(List<MutableSeries<D>> seriesList)
method updateLegendEntries (line 68) | void updateLegendEntries(List<LegendEntry<D>> legendEntries,
method _updateFromSelection (line 83) | void _updateFromSelection(
method _resetLegendEntryMeasures (line 121) | void _resetLegendEntryMeasures(List<LegendEntry<D>> legendEntries)
method _updateFromSeriesList (line 134) | void _updateFromSeriesList(
method getMeasureTotal (line 137) | num getMeasureTotal(MutableSeries<D> series)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/legend/series_legend.dart
class SeriesLegend (line 32) | class SeriesLegend<D> extends Legend<D> {
method onData (line 148) | void onData(List<MutableSeries<D>> seriesList)
method preProcessSeriesList (line 157) | void preProcessSeriesList(List<MutableSeries<D>> seriesList)
method hideSeries (line 168) | void hideSeries(String seriesId)
method showSeries (line 179) | void showSeries(String seriesId)
method isSeriesHidden (line 184) | bool isSeriesHidden(String seriesId)
method isSeriesAlwaysVisible (line 189) | bool isSeriesAlwaysVisible(String seriesId)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/line_point_highlighter.dart
class LinePointHighlighter (line 56) | class LinePointHighlighter<D> implements ChartBehavior<D> {
method attachTo (line 143) | void attachTo(BaseChart<D> chart)
method removeFrom (line 169) | void removeFrom(BaseChart<D> chart)
method _selectionChanged (line 177) | void _selectionChanged(SelectionModel<D> selectionModel)
method _updateViewData (line 181) | void _updateViewData()
class _LinePointLayoutView (line 281) | class _LinePointLayoutView<D> extends LayoutView {
method measure (line 328) | ViewMeasuredSizes? measure(int maxWidth, int maxHeight)
method layout (line 333) | void layout(Rectangle<int> componentBounds, Rectangle<int> drawAreaBou...
method paint (line 338) | void paint(ChartCanvas canvas, double animationPercent)
class _DatumPoint (line 526) | class _DatumPoint<D> extends NullablePoint {
class _PointRendererElement (line 549) | class _PointRendererElement<D> {
method clone (line 568) | _PointRendererElement<D> clone()
method updateAnimationPercent (line 580) | void updateAnimationPercent(_PointRendererElement<D> previous,
method _lerpDouble (line 615) | double? _lerpDouble(double? a, double? b, double t)
class _AnimatedPoint (line 621) | class _AnimatedPoint<D> {
method animateOut (line 641) | void animateOut()
method setNewTarget (line 660) | void setNewTarget(_PointRendererElement<D> newTarget)
method getCurrentPoint (line 667) | _PointRendererElement<D> getCurrentPoint(double animationPercent)
type LinePointHighlighterFollowLineType (line 682) | enum LinePointHighlighterFollowLineType {
class LinePointHighlighterTester (line 694) | @visibleForTesting
method getSelectionLength (line 700) | int getSelectionLength()
method isDatumSelected (line 702) | bool isDatumSelected(D datum)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/range_annotation.dart
class RangeAnnotation (line 53) | class RangeAnnotation<D> implements ChartBehavior<D> {
method attachTo (line 139) | void attachTo(BaseChart<D> chart)
method removeFrom (line 160) | void removeFrom(BaseChart<D> chart)
method shouldShowLabels (line 169) | bool shouldShowLabels(AnnotationSegment<Object> annotation)
method _updateAxisRange (line 171) | void _updateAxisRange(List<MutableSeries<D>> seriesList)
method _updateViewData (line 199) | void _updateViewData()
method updateAnnotation (line 204) | void updateAnnotation<T>(
method _getAnnotationDatum (line 339) | _DatumAnnotation _getAnnotationDatum<T>(T startValue, T endValue,
class _RangeAnnotationLayoutView (line 356) | class _RangeAnnotationLayoutView<D> extends LayoutView {
method measure (line 401) | ViewMeasuredSizes? measure(int maxWidth, int maxHeight)
method layout (line 406) | void layout(Rectangle<int> componentBounds, Rectangle<int> drawAreaBou...
method paint (line 411) | void paint(ChartCanvas canvas, double animationPercent)
method _getAnnotationBounds (line 500) | Rectangle<num> _getAnnotationBounds(_AnnotationElement<D> annotationEl...
method _getLineAnnotationPoints (line 527) | List<Point> _getLineAnnotationPoints(
method _getLabelMaxWidth (line 551) | int _getLabelMaxWidth(Rectangle<num> bounds,
method _getLabelPosition (line 598) | Point<int>? _getLabelPosition(
method _getDomainLabelPosition (line 615) | Point<int> _getDomainLabelPosition(
method _getDomainLabelPositionHorizontal (line 631) | Point<int> _getDomainLabelPositionHorizontal(
method _getDomainLabelPositionVertical (line 723) | Point<int> _getDomainLabelPositionVertical(
method _getMeasureLabelPosition (line 817) | Point<int> _getMeasureLabelPosition(
method _getMeasureLabelPositionHorizontal (line 833) | Point<int> _getMeasureLabelPositionHorizontal(
method _getMeasureLabelPositionVertical (line 930) | Point<int> _getMeasureLabelPositionVertical(
method _resolveAutoLabelPosition (line 1034) | AnnotationLabelPosition _resolveAutoLabelPosition(Rectangle<num> bounds,
method _getTextStyle (line 1080) | TextStyle _getTextStyle(
class _DatumAnnotation (line 1090) | class _DatumAnnotation {
class _AnnotationElement (line 1110) | class _AnnotationElement<D> {
method clone (line 1141) | _AnnotationElement<D> clone()
method updateAnimationPercent (line 1159) | void updateAnimationPercent(
type _AnnotationLabelType (line 1188) | enum _AnnotationLabelType {
class _AnimatedAnnotation (line 1194) | class _AnimatedAnnotation<D> {
method animateOut (line 1211) | void animateOut()
method setNewTarget (line 1218) | void setNewTarget(_AnnotationElement<D> newTarget)
method getCurrentAnnotation (line 1225) | _AnnotationElement<D> getCurrentAnnotation(double animationPercent)
class RangeAnnotationTester (line 1240) | @visibleForTesting
method mockLayout (line 1250) | void mockLayout(Rectangle<int> bounds)
method doesAnnotationExist (line 1255) | bool doesAnnotationExist(
class AnnotationSegment (line 1290) | abstract class AnnotationSegment<D> {
class RangeAnnotationSegment (line 1317) | class RangeAnnotationSegment<D> extends AnnotationSegment<D> {
class LineAnnotationSegment (line 1348) | class LineAnnotationSegment<D> extends AnnotationSegment<D> {
type RangeAnnotationAxisType (line 1381) | enum RangeAnnotationAxisType {
type AnnotationLabelAnchor (line 1387) | enum AnnotationLabelAnchor {
type AnnotationLabelDirection (line 1399) | enum AnnotationLabelDirection {
type AnnotationLabelPosition (line 1414) | enum AnnotationLabelPosition {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/selection/lock_selection.dart
class LockSelection (line 35) | class LockSelection<D> implements ChartBehavior<D> {
method _onTapTest (line 58) | bool _onTapTest(Point<double> chartPoint)
method _onSelect (line 63) | bool _onSelect(Point<double> chartPoint, [double? ignored])
method attachTo (line 97) | void attachTo(BaseChart<D> chart)
method removeFrom (line 117) | void removeFrom(BaseChart<D> chart)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/selection/select_nearest.dart
class SelectNearest (line 60) | class SelectNearest<D> implements ChartBehavior<D> {
method _onTapTest (line 148) | bool _onTapTest(Point<double> chartPoint)
method _onLongPressSelect (line 154) | bool _onLongPressSelect(Point<double> chartPoint)
method _onSelect (line 159) | bool _onSelect(Point<double> chartPoint, [double? ignored])
method _extractSeriesFromNearestSelection (line 210) | List<SeriesDatum<D>> _extractSeriesFromNearestSelection(
method _onDeselectAll (line 225) | bool _onDeselectAll(Point<double> _, double __, double ___)
method _expandToDomain (line 237) | List<SeriesDatum<D>> _expandToDomain(DatumDetails<D> nearestDetails)
method attachTo (line 296) | void attachTo(BaseChart<D> chart)
method removeFrom (line 316) | void removeFrom(BaseChart<D> chart)
type SelectionMode (line 327) | enum SelectionMode {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/selection/selection_trigger.dart
type SelectionTrigger (line 16) | enum SelectionTrigger {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/slider/slider.dart
class Slider (line 52) | class Slider<D> implements ChartBehavior<D> {
method _onTapTest (line 207) | bool _onTapTest(Point<double> chartPoint)
method _onLongPressSelect (line 213) | bool _onLongPressSelect(Point<double> chartPoint)
method _onSelect (line 218) | bool _onSelect(Point<double> chartPoint, [double? ignored])
method _onDragEnd (line 238) | bool _onDragEnd(Point<double> chartPoint, double __, double ___)
method _sliderContainsPoint (line 277) | bool _sliderContainsPoint(Point<double> chartPoint)
method _setInitialDragState (line 282) | void _setInitialDragState(List<MutableSeries<D>> _)
method _updateViewData (line 286) | void _updateViewData()
method _fireChangeEvent (line 321) | void _fireChangeEvent(ChartCanvas _)
method _moveSliderToPoint (line 371) | bool _moveSliderToPoint(Point<double> point)
method _moveSliderToDomain (line 469) | bool _moveSliderToDomain(D? domain, {num? measure})
method moveSliderToDomain (line 499) | void moveSliderToDomain(D domain, {num? measure, bool skipAnimation = ...
method attachTo (line 516) | void attachTo(BaseChart<D> chart)
method removeFrom (line 535) | void removeFrom(BaseChart<D> chart)
class SliderStyle (line 547) | class SliderStyle {
type SliderHandlePosition (line 611) | enum SliderHandlePosition { middle, top, manual }
class _SliderLayoutView (line 614) | class _SliderLayoutView<D> extends LayoutView {
method measure (line 644) | ViewMeasuredSizes? measure(int maxWidth, int maxHeight)
method layout (line 649) | void layout(Rectangle<int> componentBounds, Rectangle<int> drawAreaBou...
method paint (line 654) | void paint(ChartCanvas canvas, double animationPercent)
class _SliderElement (line 679) | class _SliderElement<D> {
method clone (line 694) | _SliderElement<D> clone()
method updateAnimationPercent (line 704) | void updateAnimationPercent(_SliderElement<D> previous,
class _AnimatedSlider (line 747) | class _AnimatedSlider<D> {
method animateOut (line 763) | void animateOut()
method setNewTarget (line 784) | void setNewTarget(_SliderElement<D> newTarget)
method getCurrentSlider (line 791) | _SliderElement<D> getCurrentSlider(double animationPercent)
class SliderEventListener (line 806) | class SliderEventListener<D> {
type SliderListenerCallback (line 822) | typedef SliderListenerCallback<D> = void Function(Point<int> point, D? d...
type SliderListenerDragState (line 840) | enum SliderListenerDragState { initial, drag, end }
class SliderTester (line 843) | @visibleForTesting
method layout (line 855) | void layout(Rectangle<int> componentBounds, Rectangle<int> drawAreaBou...
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/sliding_viewport.dart
class SlidingViewport (line 28) | class SlidingViewport<D> implements ChartBehavior<D> {
method _selectionChanged (line 35) | void _selectionChanged(SelectionModel<D> selectionModel)
method attachTo (line 58) | void attachTo(BaseChart<D> chart)
method removeFrom (line 67) | void removeFrom(BaseChart<D> chart)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/sunburst_ring_expander.dart
class SunburstRingExpander (line 24) | class SunburstRingExpander<D> implements ChartBehavior<D> {
method _selectionChanged (line 31) | void _selectionChanged(SelectionModel<D> selectionModel)
method attachTo (line 39) | void attachTo(BaseChart<D> chart)
method removeFrom (line 51) | void removeFrom(BaseChart<D> chart)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/zoom/initial_hint_behavior.dart
class InitialHintBehavior (line 30) | abstract class InitialHintBehavior<D> implements ChartBehavior<D> {
method attachTo (line 115) | void attachTo(BaseChart<D> chart)
method removeFrom (line 128) | void removeFrom(BaseChart<D> chart)
method onTapTest (line 144) | bool onTapTest(Point<double> localPosition)
method _onAxisConfigured (line 157) | void _onAxisConfigured()
method _onAnimationComplete (line 190) | void _onAnimationComplete()
method startHintAnimation (line 202) | void startHintAnimation()
method stopHintAnimation (line 214) | void stopHintAnimation()
method onHintTick (line 227) | void onHintTick()
method _lerpDouble (line 260) | double _lerpDouble(double? a, double? b, double t)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/zoom/pan_and_zoom_behavior.dart
class PanAndZoomBehavior (line 33) | class PanAndZoomBehavior<D> extends PanBehavior<D> {
method onDragStart (line 56) | bool onDragStart(Point<double> localPosition)
method onDragUpdate (line 71) | bool onDragUpdate(Point<double> localPosition, double scale)
method onDragEnd (line 115) | bool onDragEnd(
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/zoom/pan_behavior.dart
class PanBehavior (line 31) | class PanBehavior<D> implements ChartBehavior<D> {
method attachTo (line 80) | void attachTo(BaseChart<D> chart)
method removeFrom (line 100) | void removeFrom(BaseChart<D> chart)
method onTapTest (line 119) | bool onTapTest(Point<double> localPosition)
method onDragStart (line 128) | bool onDragStart(Point<double> localPosition)
method onDragUpdate (line 141) | bool onDragUpdate(Point<double> localPosition, double scale)
method onDragEnd (line 188) | bool onDragEnd(
method onPanStart (line 195) | void onPanStart()
method onPanEnd (line 206) | void onPanEnd()
method cancelPanning (line 222) | void cancelPanning()
type PanningCompletedCallback (line 228) | typedef PanningCompletedCallback = void Function();
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/zoom/panning_tick_provider.dart
type PanningTickProviderMode (line 26) | enum PanningTickProviderMode {
class PanningTickProvider (line 40) | class PanningTickProvider<D> implements TickProvider<D> {
method getTicks (line 54) | List<Tick<D>> getTicks({
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/canvas_shapes.dart
class CanvasRect (line 22) | class CanvasRect {
class CanvasBarStack (line 39) | class CanvasBarStack {
class CanvasPie (line 104) | class CanvasPie {
class CanvasPieSlice (line 121) | class CanvasPieSlice {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/chart_canvas.dart
class ChartCanvas (line 23) | abstract class ChartCanvas {
method drawCircleSector (line 44) | void drawCircleSector(Point center, double radius, double innerRadius,
method drawLine (line 55) | void drawLine(
method drawPie (line 65) | void drawPie(CanvasPie canvasPie)
method drawPoint (line 80) | void drawPoint(
method drawPolygon (line 98) | void drawPolygon(
method drawRect (line 111) | void drawRect(Rectangle<num> bounds,
method drawRRect (line 118) | void drawRRect(Rectangle<num> bounds,
method drawBarStack (line 140) | void drawBarStack(CanvasBarStack canvasBarStack,
method drawText (line 143) | void drawText(TextElement textElement, int offsetX, int offsetY,
method setClipBounds (line 149) | void setClipBounds(Rectangle<int> clipBounds)
method resetClipBounds (line 152) | void resetClipBounds()
function getAnimatedColor (line 155) | Color getAnimatedColor(Color previous, Color target, double animationPer...
type FillPatternType (line 170) | enum FillPatternType { forwardHatch, solid }
type BlendMode (line 173) | enum BlendMode {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/chart_context.dart
class ChartContext (line 20) | abstract class ChartContext {
method requestRedraw (line 52) | void requestRedraw()
method requestAnimation (line 54) | void requestAnimation(Duration transition)
method requestPaint (line 56) | void requestPaint()
method enableA11yExploreMode (line 58) | void enableA11yExploreMode(List<A11yNode> nodes, {String? announcement})
method disableA11yExploreMode (line 60) | void disableA11yExploreMode({String? announcement})
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/datum_details.dart
type DomainFormatter (line 24) | typedef DomainFormatter<D> = String Function(D domain);
type MeasureFormatter (line 25) | typedef MeasureFormatter = String Function(num? measure);
class DatumDetails (line 28) | class DatumDetails<D> {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/processed_series.dart
class MutableSeries (line 24) | class MutableSeries<D> extends ImmutableSeries<D> {
method setAttr (line 210) | void setAttr<R>(AttributeKey<R> key, R value)
method getAttr (line 213) | R? getAttr<R>(AttributeKey<R> key)
class ImmutableSeries (line 223) | abstract class ImmutableSeries<D> {
method setAttr (line 309) | void setAttr<R>(AttributeKey<R> key, R value)
method getAttr (line 311) | R? getAttr<R>(AttributeKey<R> key)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/selection_model/selection_model.dart
class SelectionModel (line 33) | class SelectionModel<D> {
method isDatumSelected (line 104) | bool isDatumSelected(ImmutableSeries<D> series, int? index)
class MutableSelectionModel (line 149) | class MutableSelectionModel<D> extends SelectionModel<D> {
method clearSelection (line 166) | bool clearSelection({bool notifyListeners = true})
method updateSelection (line 172) | bool updateSelection(
method addSelectionChangedListener (line 201) | void addSelectionChangedListener(SelectionModelListener<D> listener)
method removeSelectionChangedListener (line 206) | void removeSelectionChangedListener(SelectionModelListener<D> listener)
method addSelectionUpdatedListener (line 219) | void addSelectionUpdatedListener(SelectionModelListener<D> listener)
method removeSelectionUpdatedListener (line 224) | void removeSelectionUpdatedListener(SelectionModelListener<D> listener)
method addSelectionLockChangedListener (line 229) | void addSelectionLockChangedListener(SelectionModelListener<D> listener)
method removeSelectionLockChangedListener (line 234) | void removeSelectionLockChangedListener(SelectionModelListener<D> list...
method clearAllListeners (line 239) | void clearAllListeners()
type SelectionModelListener (line 248) | typedef SelectionModelListener<D> = void Function(SelectionModel<D> model);
type SelectionModelType (line 250) | enum SelectionModelType {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/series_datum.dart
class SeriesDatum (line 19) | class SeriesDatum<D> {
class SeriesDatumConfig (line 45) | class SeriesDatumConfig<D> {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/series_renderer.dart
class SeriesRenderer (line 49) | abstract class SeriesRenderer<D> extends LayoutView {
method onAttach (line 69) | void onAttach(BaseChart<D> chart)
method onDetach (line 73) | void onDetach(BaseChart<D> chart)
method configureSeries (line 79) | void configureSeries(List<MutableSeries<D>> seriesList)
method preprocessSeries (line 83) | void preprocessSeries(List<MutableSeries<D>> seriesList)
method configureDomainAxes (line 86) | void configureDomainAxes(List<MutableSeries<D>> seriesList)
method configureMeasureAxes (line 89) | void configureMeasureAxes(List<MutableSeries<D>> seriesList)
method update (line 94) | void update(List<ImmutableSeries<D>> seriesList, bool isAnimating)
method paint (line 99) | void paint(ChartCanvas canvas, double animationPercent)
method getNearestDatumDetailPerSeries (line 119) | List<DatumDetails<D>> getNearestDatumDetailPerSeries(
method getDetailsForSeriesDatum (line 131) | DatumDetails<D> getDetailsForSeriesDatum(SeriesDatum<D> seriesDatum)
method addPositionToDetailsForSeriesDatum (line 138) | DatumDetails<D> addPositionToDetailsForSeriesDatum(
class BaseSeriesRenderer (line 144) | abstract class BaseSeriesRenderer<D> implements SeriesRenderer<D> {
method onAttach (line 171) | void onAttach(BaseChart<D> chart)
method onDetach (line 174) | void onDetach(BaseChart<D> chart)
method assignMissingColors (line 184) | void assignMissingColors(Iterable<MutableSeries<D>> seriesList,
method measure (line 301) | ViewMeasuredSizes? measure(int maxWidth, int maxHeight)
method layout (line 306) | void layout(Rectangle<int> componentBounds, Rectangle<int> drawAreaBou...
method configureSeries (line 317) | void configureSeries(List<MutableSeries<D>> seriesList)
method preprocessSeries (line 320) | void preprocessSeries(List<MutableSeries<D>> seriesList)
method configureDomainAxes (line 323) | void configureDomainAxes(List<MutableSeries<D>> seriesList)
method configureMeasureAxes (line 326) | void configureMeasureAxes(List<MutableSeries<D>> seriesList)
method getDetailsForSeriesDatum (line 329) | DatumDetails<D> getDetailsForSeriesDatum(SeriesDatum<D> seriesDatum)
method isPointWithinBounds (line 413) | bool isPointWithinBounds(Point<double> chartPoint, Rectangle<int>? bou...
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/series_renderer_config.dart
class SeriesRendererConfig (line 21) | abstract class SeriesRendererConfig<D> {
method build (line 33) | SeriesRenderer<D> build()
class RendererAttributeKey (line 36) | class RendererAttributeKey<R> extends TypedKey<R> {
class RendererAttributes (line 40) | class RendererAttributes extends TypedRegistry {}
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/unitconverter/identity_converter.dart
class IdentityConverter (line 19) | class IdentityConverter<U extends num> implements UnitConverter<U, U> {
method convert (line 23) | U convert(U value)
method invert (line 26) | U invert(U value)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/unitconverter/unit_converter.dart
class UnitConverter (line 20) | abstract class UnitConverter<F extends num, T extends num> {
method convert (line 22) | T convert(F value)
method invert (line 25) | F invert(T value)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/layout/layout_config.dart
class LayoutConfig (line 17) | class LayoutConfig {
class MarginSpec (line 36) | class MarginSpec {
method getMinPixels (line 99) | int getMinPixels(int totalPixels)
method getMaxPixels (line 113) | int getMaxPixels(int totalPixels)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/layout/layout_manager.dart
class LayoutManager (line 21) | abstract class LayoutManager {
method addView (line 23) | void addView(LayoutView view)
method removeView (line 27) | void removeView(LayoutView view)
method isAttached (line 30) | bool isAttached(LayoutView view)
method measure (line 34) | void measure(int width, int height)
method layout (line 38) | void layout(int width, int height)
method updateConfig (line 41) | void updateConfig(LayoutConfig layoutConfig)
method withinDrawArea (line 63) | bool withinDrawArea(Point<num> point)
method applyToViews (line 66) | void applyToViews(void Function(LayoutView view) apply)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/layout/layout_manager_impl.dart
class LayoutManagerImpl (line 24) | class LayoutManagerImpl implements LayoutManager {
method addView (line 57) | void addView(LayoutView view)
method removeView (line 66) | void removeView(LayoutView view)
method isAttached (line 76) | bool isAttached(LayoutView view)
method updateConfig (line 79) | void updateConfig(LayoutConfig layoutConfig)
method withinDrawArea (line 167) | bool withinDrawArea(Point<num> point)
method measure (line 173) | void measure(int width, int height)
method layout (line 242) | void layout(int width, int height)
method _viewsForPositions (line 270) | Iterable<LayoutView> _viewsForPositions(LayoutPosition p1,
method _measure (line 280) | _MeasuredSizes _measure(
method applyToViews (line 347) | void applyToViews(void Function(LayoutView view) apply)
class _MeasuredSizes (line 353) | class _MeasuredSizes {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/layout/layout_margin_strategy.dart
class SizeList (line 19) | class SizeList {
method add (line 29) | void add(int size)
method adjust (line 34) | void adjust(int index, int amount)
class _DesiredViewSizes (line 40) | class _DesiredViewSizes {
method add (line 44) | void add(int preferred, int minimum)
method adjustedTo (line 49) | void adjustedTo(int maxSize)
class VerticalMarginStrategy (line 71) | abstract class VerticalMarginStrategy {
method measure (line 72) | SizeList measure(Iterable<LayoutView> views,
method layout (line 106) | void layout(List<LayoutView> views, SizeList measuredSizes,
class LeftMarginLayoutStrategy (line 111) | class LeftMarginLayoutStrategy extends VerticalMarginStrategy {
method layout (line 113) | void layout(Iterable<LayoutView> views, SizeList measuredSizes,
class RightMarginLayoutStrategy (line 141) | class RightMarginLayoutStrategy extends VerticalMarginStrategy {
method layout (line 143) | void layout(Iterable<LayoutView> views, SizeList measuredSizes,
class HorizontalMarginStrategy (line 171) | abstract class HorizontalMarginStrategy {
method measure (line 172) | SizeList measure(Iterable<LayoutView> views,
method layout (line 206) | void layout(Iterable<LayoutView> views, SizeList measuredSizes,
class TopMarginLayoutStrategy (line 211) | class TopMarginLayoutStrategy extends HorizontalMarginStrategy {
method layout (line 213) | void layout(Iterable<LayoutView> views, SizeList measuredSizes,
class BottomMarginLayoutStrategy (line 242) | class BottomMarginLayoutStrategy extends HorizontalMarginStrategy {
method layout (line 244) | void layout(Iterable<LayoutView> views, SizeList measuredSizes,
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/layout/layout_view.dart
type LayoutPosition (line 24) | enum LayoutPosition {
class LayoutViewPaintOrder (line 46) | class LayoutViewPaintOrder {
class LayoutViewPositionOrder (line 74) | class LayoutViewPositionOrder {
class ViewMargin (line 83) | class ViewMargin {
class LayoutViewConfig (line 106) | class LayoutViewConfig {
class ViewMeasuredSizes (line 154) | class ViewMeasuredSizes {
class LayoutView (line 180) | abstract class LayoutView {
method measure (line 192) | ViewMeasuredSizes? measure(int maxWidth, int maxHeight)
method layout (line 195) | void layout(Rectangle<int> componentBounds, Rectangle<int> drawAreaBou...
method paint (line 198) | void paint(ChartCanvas canvas, double animationPercent)
function layoutPosition (line 214) | LayoutPosition layoutPosition(BehaviorPosition behaviorPosition,
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/line/line_chart.dart
class LineChart (line 24) | class LineChart extends NumericCartesianChart {
method makeDefaultRenderer (line 39) | SeriesRenderer<num> makeDefaultRenderer()
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/line/line_renderer.dart
class LineRenderer (line 42) | class LineRenderer<D> extends BaseCartesianRenderer<D> {
method layout (line 86) | void layout(Rectangle<int> componentBounds, Rectangle<int> drawAreaBou...
method configureSeries (line 95) | void configureSeries(List<MutableSeries<D>> seriesList)
method preprocessSeries (line 121) | void preprocessSeries(List<MutableSeries<D>> seriesList)
method _createInitialOffsetMap (line 247) | Map<D, num?> _createInitialOffsetMap(MutableSeries<D> series)
method _createStackedMeasureOffsetFunction (line 263) | AccessorFn<num?> _createStackedMeasureOffsetFunction(MutableSeries<D> ...
method _mergeIntoSeriesMap (line 287) | void _mergeIntoSeriesMap(List<ImmutableSeries<D>> seriesList)
method update (line 326) | void update(List<ImmutableSeries<D>> seriesList, bool isAnimatingThisD...
method _createLineAndAreaElements (line 577) | List<Object> _createLineAndAreaElements(
method _createPointListForSeries (line 684) | List<_DatumPoint<D>> _createPointListForSeries(
method _createLineAndAreaSegmentsForSeries (line 729) | List<List<List<_DatumPoint<D>>>> _createLineAndAreaSegmentsForSeries(
method _createLineSegment (line 816) | List<_DatumPoint<D>> _createLineSegment(
method _createAreaSegment (line 837) | List<_DatumPoint<D>> _createAreaSegment(
method _createBoundsSegment (line 870) | List<_DatumPoint<D>> _createBoundsSegment(List<_DatumPoint<D>> pointList,
method _createPositionExtent (line 905) | _Range<num> _createPositionExtent(
method onAttach (line 924) | void onAttach(BaseChart<D> chart)
method paint (line 933) | void paint(ChartCanvas canvas, double animationPercent)
method _getClipBoundsForExtent (line 1016) | Rectangle<num> _getClipBoundsForExtent(_Range<num> extent)
method _getPoint (line 1040) | _DatumPoint<D> _getPoint(
method getNearestDatumDetailPerSeries (line 1065) | List<DatumDetails<D>> getNearestDatumDetailPerSeries(
method addPositionToDetailsForSeriesDatum (line 1152) | DatumDetails<D> addPositionToDetailsForSeriesDatum(
class _DatumPoint (line 1167) | class _DatumPoint<D> extends NullablePoint {
class _LineRendererElement (line 1194) | class _LineRendererElement<D> {
method clone (line 1219) | _LineRendererElement<D> clone()
method updateAnimationPercent (line 1234) | void updateAnimationPercent(_LineRendererElement<D> previous,
class _AnimatedLine (line 1295) | class _AnimatedLine<D> {
method animateOut (line 1315) | void animateOut()
method setNewTarget (line 1338) | void setNewTarget(_LineRendererElement<D> newTarget)
method getCurrentLine (line 1345) | _LineRendererElement<D> getCurrentLine(double animationPercent)
class _AreaRendererElement (line 1364) | class _AreaRendererElement<D> {
method clone (line 1383) | _AreaRendererElement<D> clone()
method updateAnimationPercent (line 1395) | void updateAnimationPercent(_AreaRendererElement<D> previous,
class _AnimatedArea (line 1450) | class _AnimatedArea<D> {
method animateOut (line 1470) | void animateOut()
method setNewTarget (line 1489) | void setNewTarget(_AreaRendererElement<D> newTarget)
method getCurrentArea (line 1496) | _AreaRendererElement<D> getCurrentArea(double animationPercent)
class _AnimatedElements (line 1510) | class _AnimatedElements<D> {
class _Range (line 1579) | class _Range<D> {
method includePoint (line 1594) | void includePoint(D? value)
method _includePointAsNum (line 1611) | void _includePointAsNum(D value)
method _includePointAsDateTime (line 1621) | void _includePointAsDateTime(D value)
method _includePointAsString (line 1634) | void _includePointAsString(D value)
class LineRendererTester (line 1639) | @visibleForTesting
method setSeriesKeys (line 1647) | void setSeriesKeys(List<String> keys)
method merge (line 1651) | void merge(List<ImmutableSeries<D>> series)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/line/line_renderer_config.dart
class LineRendererConfig (line 23) | class LineRendererConfig<D> extends LayoutViewConfig
method build (line 92) | LineRenderer<D> build()
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/pie/arc_label_decorator.dart
class ArcLabelDecorator (line 38) | class ArcLabelDecorator<D> extends ArcRendererDecorator<D> {
method decorate (line 89) | void decorate(ArcRendererElementList<D> arcElements, ChartCanvas canvas,
method calculateLabelPosition (line 214) | ArcLabelPosition calculateLabelPosition(
method _getTextStyle (line 239) | TextStyle _getTextStyle(
method _getDatumStyle (line 249) | TextStyle _getDatumStyle(AccessorFn<TextStyleSpec>? labelFn, int? datu...
method _drawInsideLabel (line 259) | void _drawInsideLabel(
method _drawOutsideLabel (line 282) | List<Object>? _drawOutsideLabel(
method _detectOutsideLabelCollision (line 336) | bool _detectOutsideLabelCollision(num labelY, bool labelLeftOfChart,
method _drawLeaderLine (line 361) | double _drawLeaderLine(
type ArcLabelPosition (line 392) | enum ArcLabelPosition {
class ArcLabelLeaderLineStyleSpec (line 406) | @immutable
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/pie/arc_renderer.dart
class ArcRenderer (line 34) | class ArcRenderer<D> extends BaseArcRenderer<D> {
method preprocessSeries (line 64) | void preprocessSeries(List<MutableSeries<D>> seriesList)
method update (line 137) | void update(List<ImmutableSeries<D>> seriesList, bool isAnimatingThisD...
method paint (line 299) | void paint(ChartCanvas canvas, double animationPercent)
method assignMissingColors (line 319) | void assignMissingColors(Iterable<MutableSeries<D>> seriesList,
method _calculateInnerRadius (line 340) | double _calculateInnerRadius(double radius)
method getArcLists (line 352) | List<AnimatedArcList<D>> getArcLists({String? seriesId})
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/pie/arc_renderer_config.dart
class ArcRendererConfig (line 25) | class ArcRendererConfig<D> extends BaseArcRendererConfig<D> {
method build (line 49) | ArcRenderer<D> build()
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/pie/arc_renderer_decorator.dart
class ArcRendererDecorator (line 23) | abstract class ArcRendererDecorator<D> {
method decorate (line 30) | void decorate(ArcRendererElementList<D> arcElements, ChartCanvas canvas,
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/pie/arc_renderer_element.dart
class ArcRendererElementList (line 23) | class ArcRendererElementList<D> {
class ArcRendererElement (line 47) | class ArcRendererElement<D> {
method clone (line 66) | ArcRendererElement<D> clone()
method updateAnimationPercent (line 77) | void updateAnimationPercent(ArcRendererElement<D> previous,
class AnimatedArcList (line 90) | @protected
class AnimatedArc (line 105) | @protected
method animateOut (line 126) | void animateOut(double endAngle)
method setNewTarget (line 137) | void setNewTarget(ArcRendererElement<D> newTarget)
method getCurrentArc (line 144) | ArcRendererElement<D> getCurrentArc(double animationPercent)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/pie/base_arc_renderer.dart
class BaseArcRenderer (line 42) | abstract class BaseArcRenderer<D> extends BaseSeriesRenderer<D> {
method onAttach (line 62) | void onAttach(BaseChart<D> chart)
method configureSeries (line 68) | void configureSeries(List<MutableSeries<D>> seriesList)
method getExpandedDatumDetails (line 104) | DatumDetails<D> getExpandedDatumDetails(SeriesDatum<D> seriesDatum)
method getArcLists (line 128) | List<AnimatedArcList<D>> getArcLists({String? seriesId})
method _getChartPosition (line 136) | Point<double>? _getChartPosition(String seriesId, String key)
method paint (line 170) | void paint(ChartCanvas canvas, double animationPercent)
method getNearestDatumDetailPerSeries (line 232) | List<DatumDetails<D>> getNearestDatumDetailPerSeries(
method addPositionToDetailsForSeriesDatum (line 296) | DatumDetails<D> addPositionToDetailsForSeriesDatum(
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/pie/base_arc_renderer_config.dart
class BaseArcRendererConfig (line 27) | abstract class BaseArcRendererConfig<D> extends LayoutViewConfig
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/pie/pie_chart.dart
class PieChart (line 26) | class PieChart<D> extends BaseChart<D> {
method drawInternal (line 38) | void drawInternal(List<MutableSeries<D>> seriesList,
method updateConfig (line 48) | void updateConfig(LayoutConfig? layoutConfig)
method makeDefaultRenderer (line 53) | SeriesRenderer<D> makeDefaultRenderer()
method getDatumDetails (line 59) | List<DatumDetails<D>> getDatumDetails(SelectionModelType type)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/scatter_plot/comparison_points_decorator.dart
class ComparisonPointsDecorator (line 31) | class ComparisonPointsDecorator<D> extends PointRendererDecorator<D> {
method decorate (line 44) | void decorate(PointRendererElement<D> pointElement, ChartCanvas canvas,
method computeBoundedPointsForElement (line 70) | List<Point<double>>? computeBoundedPointsForElement(
method _clampPointAlongLineToBoundingBox (line 122) | Point<double>? _clampPointAlongLineToBoundingBox(
class _Line (line 166) | class _Line {
method intersection (line 209) | Point<double>? intersection(_Line other)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/scatter_plot/point_renderer.dart
class PointRenderer (line 68) | class PointRenderer<D> extends BaseCartesianRenderer<D> {
method configureSeries (line 100) | void configureSeries(List<MutableSeries<D>> seriesList)
method preprocessSeries (line 105) | void preprocessSeries(List<MutableSeries<D>> seriesList)
method update (line 204) | void update(List<ImmutableSeries<D>> seriesList, bool isAnimatingThisD...
method onAttach (line 338) | void onAttach(BaseChart<D> chart)
method paint (line 347) | void paint(ChartCanvas canvas, double animationPercent)
method getPoint (line 426) | DatumPoint<D> getPoint(
method getNearestDatumDetailPerSeries (line 473) | List<DatumDetails<D>> getNearestDatumDetailPerSeries(
method _createDatumDetails (line 556) | DatumDetails<D> _createDatumDetails(
method _getDatumDistance (line 580) | _Distances _getDatumDistance(
method addPositionToDetailsForSeriesDatum (line 633) | DatumDetails<D> addPositionToDetailsForSeriesDatum(
class DatumPoint (line 686) | class DatumPoint<D> extends NullablePoint {
class PointRendererElement (line 731) | class PointRendererElement<D> {
method clone (line 754) | PointRendererElement<D> clone()
method updateAnimationPercent (line 768) | void updateAnimationPercent(PointRendererElement<D> previous,
class AnimatedPoint (line 833) | class AnimatedPoint<D> {
method animateOut (line 853) | void animateOut()
method setNewTarget (line 876) | void setNewTarget(PointRendererElement<D> newTarget)
method getCurrentPoint (line 883) | PointRendererElement<D> getCurrentPoint(double animationPercent)
class _Distances (line 898) | class _Distances {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/scatter_plot/point_renderer_config.dart
class PointRendererConfig (line 24) | class PointRendererConfig<D> extends LayoutViewConfig
method build (line 80) | PointRenderer<D> build()
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/scatter_plot/point_renderer_decorator.dart
class PointRendererDecorator (line 23) | abstract class PointRendererDecorator<D> {
method decorate (line 30) | void decorate(PointRendererElement<D> pointElement, ChartCanvas canvas,
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/scatter_plot/scatter_plot_chart.dart
class ScatterPlotChart (line 35) | class ScatterPlotChart extends NumericCartesianChart {
method makeDefaultRenderer (line 62) | SeriesRenderer<num> makeDefaultRenderer()
method initDomainAxis (line 67) | void initDomainAxis()
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/scatter_plot/symbol_annotation_renderer.dart
class SymbolAnnotationRenderer (line 49) | class SymbolAnnotationRenderer<D> extends PointRenderer<D>
method configureMeasureAxes (line 73) | void configureMeasureAxes(List<MutableSeries<D>> seriesList)
method preprocessSeries (line 76) | void preprocessSeries(List<MutableSeries<D>> seriesList)
method getPoint (line 135) | DatumPoint<D> getPoint(
method onAttach (line 181) | void onAttach(BaseChart<D> chart)
method onDetach (line 197) | void onDetach(BaseChart<D> chart)
method paint (line 202) | void paint(ChartCanvas canvas, double animationPercent)
method measure (line 235) | ViewMeasuredSizes measure(int maxWidth, int maxHeight)
method layout (line 244) | void layout(Rectangle<int> componentBounds, Rectangle<int> drawAreaBou...
class _SeriesInfo (line 254) | class _SeriesInfo<D> {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/scatter_plot/symbol_annotation_renderer_config.dart
class SymbolAnnotationRendererConfig (line 29) | class SymbolAnnotationRendererConfig<D> extends PointRendererConfig<D> {
method build (line 68) | SymbolAnnotationRenderer<D> build()
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/sunburst/sunburst_arc_label_decorator.dart
class SunburstArcLabelDecorator (line 36) | class SunburstArcLabelDecorator<D> extends ArcLabelDecorator<D> {
method decorate (line 72) | void decorate(ArcRendererElementList<D> arcElements, ChartCanvas canvas,
method calculateLabelPosition (line 91) | ArcLabelPosition calculateLabelPosition(
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/sunburst/sunburst_arc_renderer.dart
class SunburstArcRenderer (line 38) | class SunburstArcRenderer<D> extends BaseArcRenderer<D> {
method preprocessSeries (line 75) | void preprocessSeries(List<MutableSeries<D>> seriesList)
method _createArcRenderElementForNode (line 135) | List<SunburstArcRendererElement<D>> _createArcRenderElementForNode(
method _getParentArcLength (line 187) | double _getParentArcLength(TreeNode<D> parent)
method _getParentStartAngle (line 192) | double _getParentStartAngle(TreeNode<D> parent)
method update (line 198) | void update(List<ImmutableSeries<D>> seriesList, bool isAnimatingThisD...
method paint (line 398) | void paint(ChartCanvas canvas, double animationPercent)
method _isNodeDisplayed (line 425) | bool _isNodeDisplayed(TreeNode<D>? node)
method expandNode (line 432) | void expandNode(TreeNode<D> node)
method assignMissingColors (line 455) | void assignMissingColors(Iterable<MutableSeries<D>> seriesList,
method _calculateRadii (line 510) | List<double> _calculateRadii(double radius,
method getArcLists (line 574) | List<AnimatedArcList<D>> getArcLists({String? seriesId})
method _ensureConfigLengthCoversMaxDisplayLevel (line 584) | List<int> _ensureConfigLengthCoversMaxDisplayLevel(
class SunburstArcRendererElement (line 601) | class SunburstArcRendererElement<D> extends ArcRendererElement<D> {
method clone (line 635) | SunburstArcRendererElement<D> clone()
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/sunburst/sunburst_arc_renderer_config.dart
type List (line 28) | typedef List<TreeNode<dynamic>> ExpandNodeCallback(
class SunburstArcRendererConfig (line 32) | class SunburstArcRendererConfig<D> extends BaseArcRendererConfig<D> {
method build (line 95) | SunburstArcRenderer<D> build()
type SunburstColorStrategy (line 102) | enum SunburstColorStrategy {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/sunburst/sunburst_chart.dart
class SunburstChart (line 26) | class SunburstChart<D> extends BaseChart<D> {
method makeDefaultRenderer (line 31) | SeriesRenderer<D> makeDefaultRenderer()
method getDatumDetails (line 38) | List<DatumDetails<D>> getDatumDetails(SelectionModelType type)
method expandNode (line 63) | void expandNode(TreeNode<D> node)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/time_series/time_series_chart.dart
class TimeSeriesChart (line 31) | class TimeSeriesChart extends CartesianChart<DateTime> {
method initDomainAxis (line 50) | void initDomainAxis()
method makeDefaultRenderer (line 56) | SeriesRenderer<DateTime> makeDefaultRenderer()
method createDomainAxisFromSpec (line 62) | Axis<DateTime> createDomainAxisFromSpec(AxisSpec<DateTime> axisSpec)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/treemap/base_treemap_renderer.dart
class BaseTreeMapRenderer (line 42) | abstract class BaseTreeMapRenderer<D> extends BaseSeriesRenderer<D> {
method onAttach (line 72) | void onAttach(BaseChart<D> chart)
method configureSeries (line 81) | void configureSeries(List<MutableSeries<D>> seriesList)
method preprocessSeries (line 87) | void preprocessSeries(List<MutableSeries<D>> seriesList)
method tile (line 109) | void tile(TreeNode<Object> node)
method update (line 112) | void update(List<ImmutableSeries<D>> seriesList, bool isAnimating)
method paint (line 143) | void paint(ChartCanvas canvas, double animationPercent)
method getNearestDatumDetailPerSeries (line 182) | List<DatumDetails<D>> getNearestDatumDetailPerSeries(
method addPositionToDetailsForSeriesDatum (line 230) | DatumDetails<D> addPositionToDetailsForSeriesDatum(
method assignMissingColors (line 245) | void assignMissingColors(Iterable<MutableSeries<D>> seriesList,
method assignMissingStrokeWidths (line 267) | void assignMissingStrokeWidths(Iterable<MutableSeries<D>> seriesList)
method availableLayoutBoundingRect (line 278) | MutableRectangle availableLayoutBoundingRect(TreeNode<Object> node)
method scaleArea (line 305) | void scaleArea(Iterable<TreeNode<Object>> children, num scaleFactor)
method measureForTreeNode (line 315) | num measureForTreeNode(TreeNode<Object> node)
method areaForRectangle (line 320) | num areaForRectangle(Rectangle rect)
method areaForTreeNode (line 324) | num areaForTreeNode(TreeNode<Object> node)
method position (line 341) | void position(Iterable<TreeNode<Object>> nodes, MutableRectangle bound...
method _configureRootRendererElement (line 376) | void _configureRootRendererElement(TreeNode<Object> root)
method _createAnimatedTreeMapRect (line 388) | _AnimatedTreeMapRect<D> _createAnimatedTreeMapRect(
method _createRendererElement (line 406) | TreeMapRendererElement<D> _createRendererElement(
method _getRendererElement (line 419) | TreeMapRendererElement<D> _getRendererElement(TreeNode<Object> node)
method _ensureSingleTree (line 426) | void _ensureSingleTree(List<ImmutableSeries<D>> seriesList)
class _AnimatedTreeMapRect (line 433) | class _AnimatedTreeMapRect<D> {
method animateOut (line 454) | void animateOut()
method setNewTarget (line 465) | void setNewTarget(TreeMapRendererElement<D> newTarget)
method getCurrentRect (line 474) | TreeMapRendererElement<D> getCurrentRect(double animationPercent)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/treemap/dice_treemap_renderer.dart
class DiceTreeMapRenderer (line 22) | class DiceTreeMapRenderer<D> extends BaseTreeMapRenderer<D> {
method tile (line 31) | void tile(TreeNode<Object> node)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/treemap/slice_dice_treemap_renderer.dart
class SliceDiceTreeMapRenderer (line 22) | class SliceDiceTreeMapRenderer<D> extends BaseTreeMapRenderer<D> {
method tile (line 32) | void tile(TreeNode<Object> node)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/treemap/slice_treemap_renderer.dart
class SliceTreeMapRenderer (line 22) | class SliceTreeMapRenderer<D> extends BaseTreeMapRenderer<D> {
method tile (line 31) | void tile(TreeNode<Object> node)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/treemap/squarified_treemap_renderer.dart
class SquarifiedTreeMapRenderer (line 25) | class SquarifiedTreeMapRenderer<D> extends BaseTreeMapRenderer<D> {
method tile (line 47) | void tile(TreeNode<Object> node)
class _SquarifyRatioAnalyzer (line 87) | class _SquarifyRatioAnalyzer {
method addNode (line 102) | void addNode(TreeNode<Object> node)
method removeLast (line 108) | void removeLast()
method worst (line 122) | num worst(num width)
method reset (line 141) | void reset()
method _square (line 147) | num _square(num n)
type AreaFn (line 151) | typedef AreaFn = num Function(TreeNode<Object> node);
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/treemap/treemap_chart.dart
class TreeMapChart (line 25) | class TreeMapChart<D> extends BaseChart<D> {
method drawInternal (line 30) | void drawInternal(List<MutableSeries<D>> seriesList,
method makeDefaultRenderer (line 41) | SeriesRenderer<D> makeDefaultRenderer()
method getDatumDetails (line 48) | List<DatumDetails<D>> getDatumDetails(SelectionModelType type)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/treemap/treemap_label_decorator.dart
class TreeMapLabelDecorator (line 31) | class TreeMapLabelDecorator<D> extends TreeMapRendererDecorator<D> {
method decorate (line 62) | void decorate(TreeMapRendererElement<D> rendererElement, ChartCanvas c...
method _asTextStyle (line 115) | TextStyle _asTextStyle(
method _datumStyle (line 124) | TextStyle _datumStyle(AccessorFn<TextStyleSpec>? labelStyleFn, int dat...
method _createLabelSegment (line 133) | _TreeMapLabelSegment _createLabelSegment(Rectangle elementBoundingRect,
class _TreeMapLabelSegment (line 167) | class _TreeMapLabelSegment {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/treemap/treemap_renderer_config.dart
class TreeMapRendererConfig (line 30) | class TreeMapRendererConfig<D> extends LayoutViewConfig
method build (line 81) | BaseTreeMapRenderer<D> build()
type TreeMapTileType (line 107) | enum TreeMapTileType { dice, slice, sliceDice, squarified }
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/treemap/treemap_renderer_decorator.dart
class TreeMapRendererDecorator (line 24) | abstract class TreeMapRendererDecorator<D> {
method decorate (line 28) | void decorate(TreeMapRendererElement<D> rendererElement, ChartCanvas c...
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/treemap/treemap_renderer_element.dart
class TreeMapRendererElement (line 23) | class TreeMapRendererElement<D> {
method clone (line 81) | TreeMapRendererElement<D> clone()
method refreshPaintProperties (line 106) | void refreshPaintProperties()
method updateAnimationPercent (line 119) | void updateAnimationPercent(TreeMapRendererElement<D> previous,
method toString (line 127) | String toString()
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/color.dart
class Color (line 18) | @immutable
method toString (line 98) | String toString()
method _get2CharHex (line 111) | String _get2CharHex(int num)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/date_time_factory.dart
class DateTimeFactory (line 21) | abstract class DateTimeFactory {
method createDateTimeFromMilliSecondsSinceEpoch (line 30) | DateTime createDateTimeFromMilliSecondsSinceEpoch(int millisecondsSinc...
method createDateTime (line 32) | DateTime createDateTime(int year,
method createDateFormat (line 42) | DateFormat createDateFormat(String? pattern)
class LocalDateTimeFactory (line 46) | class LocalDateTimeFactory implements DateTimeFactory {
method createDateTimeFromMilliSecondsSinceEpoch (line 50) | DateTime createDateTimeFromMilliSecondsSinceEpoch(
method createDateTime (line 56) | DateTime createDateTime(int year,
method createDateFormat (line 70) | DateFormat createDateFormat(String? pattern)
class UTCDateTimeFactory (line 74) | class UTCDateTimeFactory implements DateTimeFactory {
method createDateTimeFromMilliSecondsSinceEpoch (line 78) | DateTime createDateTimeFromMilliSecondsSinceEpoch(
method createDateTime (line 85) | DateTime createDateTime(int year,
method createDateFormat (line 99) | DateFormat createDateFormat(String? pattern)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/gesture_listener.dart
class GestureListener (line 24) | class GestureListener {
type GestureCancelCallback (line 106) | typedef GestureCancelCallback = void Function();
type GestureCallback (line 107) | typedef GestureCallback = bool Function();
type GestureSinglePointCallback (line 108) | typedef GestureSinglePointCallback = bool Function(Point<double> localPo...
type GestureDragStartCallback (line 110) | typedef GestureDragStartCallback = bool Function(Point<double> localPosi...
type GestureDragUpdateCallback (line 111) | typedef GestureDragUpdateCallback = bool Function(
type GestureDragEndCallback (line 113) | typedef GestureDragEndCallback = bool Function(
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/graphics_factory.dart
class GraphicsFactory (line 21) | abstract class GraphicsFactory {
method createLinePaint (line 22) | LineStyle createLinePaint()
method createTextPaint (line 25) | TextStyle createTextPaint()
method createTextElement (line 28) | TextElement createTextElement(String text)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/line_style.dart
class LineStyle (line 18) | abstract class LineStyle extends PaintStyle {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/material_palette.dart
class MaterialPalette (line 22) | class MaterialPalette {
method getOrderedPalettes (line 55) | List<Palette> getOrderedPalettes(int count)
class MaterialBlue (line 60) | class MaterialBlue extends Palette {
class MaterialRed (line 72) | class MaterialRed extends Palette {
class MaterialYellow (line 84) | class MaterialYellow extends Palette {
class MaterialGreen (line 96) | class MaterialGreen extends Palette {
class MaterialPurple (line 108) | class MaterialPurple extends Palette {
class MaterialCyan (line 120) | class MaterialCyan extends Palette {
class MaterialDeepOrange (line 132) | class MaterialDeepOrange extends Palette {
class MaterialLime (line 144) | class MaterialLime extends Palette {
class MaterialIndigo (line 156) | class MaterialIndigo extends Palette {
class MaterialPink (line 168) | class MaterialPink extends Palette {
class MaterialTeal (line 180) | class MaterialTeal extends Palette {
class MaterialGray (line 192) | class MaterialGray extends Palette {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/math.dart
function withinBounds (line 29) | bool withinBounds(num value, num lowerBound, num upperBound,
function clamp (line 42) | num clamp(num value, num minValue, num maxValue)
function distanceBetweenPointAndLineSegment (line 51) | double distanceBetweenPointAndLineSegment(Vector2 p, Vector2 v, Vector2 w)
function distanceBetweenPointAndLineSegmentSquared (line 61) | double distanceBetweenPointAndLineSegmentSquared(
class NullablePoint (line 79) | class NullablePoint {
method toString (line 90) | String toString()
method toPoint (line 107) | Point<double> toPoint()
function toPoints (line 118) | List<Point<double>> toPoints()
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/paint_style.dart
class PaintStyle (line 19) | abstract class PaintStyle {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/palette.dart
class Palette (line 19) | abstract class Palette {
method makeShades (line 26) | List<Color> makeShades(int colorCnt)
method _getSteppedColor (line 46) | Color _getSteppedColor(Color color, int index, int steps,
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/performance.dart
type PerformanceCallback (line 16) | typedef PerformanceCallback = void Function(String tag);
class Performance (line 18) | class Performance {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/proxy_gesture_listener.dart
class ProxyGestureListener (line 23) | class ProxyGestureListener {
method add (line 27) | void add(GestureListener listener)
method remove (line 32) | void remove(GestureListener listener)
method onTapTest (line 37) | bool onTapTest(Point<double> localPosition)
method onLongPress (line 42) | bool onLongPress(Point<double> localPosition)
method onTap (line 57) | bool onTap(Point<double> localPosition)
method onHover (line 73) | bool onHover(Point<double> localPosition)
method onDragStart (line 82) | bool onDragStart(Point<double> localPosition)
method onDragUpdate (line 102) | bool onDragUpdate(Point<double> localPosition, double scale)
method onDragEnd (line 107) | bool onDragEnd(
method onFocus (line 114) | bool onFocus()
method onBlur (line 119) | bool onBlur()
method _cancel (line 124) | List<GestureListener> _cancel({
method _populateActiveListeners (line 136) | bool _populateActiveListeners(Point<double> localPosition)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/rate_limit_utils.dart
type UnaryFunction (line 19) | typedef UnaryFunction<T, R> = R Function(T argument);
function throttle (line 27) | UnaryFunction<T, R> throttle<T, R>(UnaryFunction<T, R> callback,
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/rtl_spec.dart
class RTLSpec (line 17) | class RTLSpec {
type AxisDirection (line 44) | enum AxisDirection {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/style/material_style.dart
class MaterialStyle (line 24) | class MaterialStyle implements Style {
method getOrderedPalettes (line 37) | List<Palette> getOrderedPalettes(int count)
method createAxisLineStyle (line 41) | LineStyle createAxisLineStyle(
method createTickLineStyle (line 50) | LineStyle createTickLineStyle(
method createGridlineStyle (line 65) | LineStyle createGridlineStyle(
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/style/style.dart
class Style (line 29) | abstract class Style {
method getOrderedPalettes (line 37) | List<Palette> getOrderedPalettes(int count)
method createAxisLineStyle (line 42) | LineStyle createAxisLineStyle(
method createTickLineStyle (line 48) | LineStyle createTickLineStyle(
method createGridlineStyle (line 61) | LineStyle createGridlineStyle(
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/style/style_factory.dart
class StyleFactory (line 19) | class StyleFactory {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/symbol_renderer.dart
class BaseSymbolRenderer (line 25) | abstract class BaseSymbolRenderer {
method shouldRepaint (line 26) | bool shouldRepaint(covariant BaseSymbolRenderer oldRenderer)
class SymbolRenderer (line 30) | abstract class SymbolRenderer extends BaseSymbolRenderer {
method paint (line 44) | void paint(ChartCanvas canvas, Rectangle<num> bounds,
method getSolidStrokeWidthPx (line 52) | double? getSolidStrokeWidthPx(double? strokeWidthPx)
method getSolidFillColor (line 57) | Color? getSolidFillColor(Color? fillColor)
class PointSymbolRenderer (line 73) | abstract class PointSymbolRenderer extends BaseSymbolRenderer {
method paint (line 74) | void paint(ChartCanvas canvas, Point<double> p1, double radius,
class RoundedRectSymbolRenderer (line 79) | class RoundedRectSymbolRenderer extends SymbolRenderer {
method paint (line 87) | void paint(ChartCanvas canvas, Rectangle<num> bounds,
method shouldRepaint (line 105) | bool shouldRepaint(RoundedRectSymbolRenderer oldRenderer)
class LineSymbolRenderer (line 125) | class LineSymbolRenderer extends SymbolRenderer {
method paint (line 144) | void paint(ChartCanvas canvas, Rectangle<num> bounds,
method shouldRepaint (line 188) | bool shouldRepaint(LineSymbolRenderer oldRenderer)
class CircleSymbolRenderer (line 208) | class CircleSymbolRenderer extends SymbolRenderer {
method paint (line 212) | void paint(ChartCanvas canvas, Rectangle<num> bounds,
method shouldRepaint (line 232) | bool shouldRepaint(CircleSymbolRenderer oldRenderer)
class RectSymbolRenderer (line 249) | class RectSymbolRenderer extends SymbolRenderer {
method paint (line 253) | void paint(ChartCanvas canvas, Rectangle<num> bounds,
method shouldRepaint (line 266) | bool shouldRepaint(RectSymbolRenderer oldRenderer)
class TriangleSymbolRenderer (line 283) | class TriangleSymbolRenderer extends SymbolRenderer {
method paint (line 287) | void paint(ChartCanvas canvas, Rectangle<num> bounds,
method shouldRepaint (line 311) | bool shouldRepaint(TriangleSymbolRenderer oldRenderer)
class CylinderSymbolRenderer (line 322) | class CylinderSymbolRenderer extends PointSymbolRenderer {
method paint (line 326) | void paint(ChartCanvas canvas, Point<double> p1, double radius,
method shouldRepaint (line 350) | bool shouldRepaint(CylinderSymbolRenderer oldRenderer)
class RectangleRangeSymbolRenderer (line 362) | class RectangleRangeSymbolRenderer extends PointSymbolRenderer {
method paint (line 366) | void paint(ChartCanvas canvas, Point<double> p1, double radius,
method shouldRepaint (line 390) | bool shouldRepaint(RectangleRangeSymbolRenderer oldRenderer)
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/text_element.dart
class TextElement (line 20) | abstract class TextElement {
method elementSettingsSame (line 61) | bool elementSettingsSame(TextElement a, TextElement b)
type TextDirection (line 70) | enum TextDirection {
type MaxWidthStrategy (line 77) | enum MaxWidthStrategy {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/text_measurement.dart
class TextMeasurement (line 17) | class TextMeasurement {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/text_style.dart
class TextStyle (line 19) | abstract class TextStyle extends PaintStyle {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/text_utils.dart
function wrapLabelLines (line 30) | List<TextElement> wrapLabelLines(TextElement labelElement,
function _splitLabel (line 143) | List<TextElement> _splitLabel(
function _doesLabelFit (line 170) | bool _doesLabelFit(bool allowLabelOverflow, TextElement textElement,
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/typed_registry.dart
class TypedRegistry (line 16) | class TypedRegistry {
method getAttr (line 19) | R? getAttr<R>(TypedKey<R> key)
method setAttr (line 23) | void setAttr<R>(TypedKey<R> key, R value)
method mergeFrom (line 27) | void mergeFrom(TypedRegistry other)
class TypedKey (line 32) | class TypedKey<R> {
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/data/series.dart
class Series (line 23) | class Series<T, D> {
method setAttribute (line 254) | void setAttribute<R>(AttributeKey<R> key, R value)
method getAttribute (line 258) | R? getAttribute<R>(AttributeKey<R> key)
type AccessorFn (line 270) | typedef AccessorFn<R> = R Function(int? index);
type TypedAccessorFn (line 272) | typedef TypedAccessorFn<T, R> = R Function(T datum, int? index);
class AttributeKey (line 274) | class AttributeKey<R> extends TypedKey<R> {
class SeriesAttributes (line 278) | class SeriesAttributes extends TypedRegistry {}
FILE: flutter/reddit_ticker/deps/charts/charts_common/lib/src/data/tree.dart
class Tree (line 27) | class Tree<T, D> {
method toSeries (line 124) | Series<TreeNode<T>, D> toSeries()
method setAttribute (line 143) | void setAttribute<R>(AttributeKey<R> key, R value)
method getAttribute (line 147) | R? getAttribute<R>(AttributeKey<R> key)
class TreeNode (line 152) | class TreeNode<T> {
method addChild (line 179) | void addChild(TreeNode<T> child)
method addChildren (line 187) | void addChildren(Iterable<TreeNode<T>> newChildren)
method visit (line 193) | void visit(void Function(TreeNode<T> node) f)
class TreeAttributes (line 205) | class TreeAttributes extends TypedRegistry {}
function _castFrom (line 208) | TypedAccessorFn<TreeNode<T>, R>? _castFrom<T, R>(TypedAccessorFn<T, R>? f)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/bar_chart.dart
class BarChart (line 38) | @immutable
method createCommonChart (line 86) | common.BarChart createCommonChart(BaseChartState chartState)
method addDefaultInteractions (line 99) | void addDefaultInteractions(List<ChartBehavior> behaviors)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/base_chart.dart
class BaseChart (line 36) | @immutable
method createState (line 88) | BaseChartState<D> createState()
method createCommonChart (line 91) | common.BaseChart<D> createCommonChart(BaseChartState<D> chartState)
method updateCommonChart (line 94) | void updateCommonChart(common.BaseChart<D> chart, BaseChart<D>? oldWid...
method _updateBehaviors (line 129) | void _updateBehaviors(common.BaseChart chart, BaseChartState<D> chartS...
method addDefaultInteractions (line 179) | void addDefaultInteractions(List<ChartBehavior> behaviors)
method _notACustomBehavior (line 187) | bool _notACustomBehavior(ChartBehavior behavior)
method _updateSelectionModel (line 193) | void _updateSelectionModel(
method getDesiredGestures (line 243) | Set<GestureType> getDesiredGestures(BaseChartState chartState)
class LayoutConfig (line 260) | @immutable
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/base_chart_state.dart
class BaseChartState (line 35) | class BaseChartState<D> extends State<BaseChart<D>>
method initState (line 63) | void initState()
method requestRebuild (line 70) | void requestRebuild()
method markChartDirty (line 75) | void markChartDirty()
method resetChartDirtyFlag (line 80) | void resetChartDirtyFlag()
method setState (line 88) | void setState(fn)
method _buildChartContainer (line 95) | Widget _buildChartContainer()
method build (line 118) | Widget build(BuildContext context)
method dispose (line 148) | void dispose()
method setAnimation (line 157) | void setAnimation(Duration transition)
method _playAnimation (line 161) | void _playAnimation(Duration duration)
method _animationTick (line 167) | void _animationTick()
method getAnimationController (line 174) | AnimationController getAnimationController(ChartStateBehavior behavior)
method disposeAnimationController (line 182) | void disposeAnimationController(ChartStateBehavior behavior)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/behaviors/a11y/domain_a11y_explore_behavior.dart
class DomainA11yExploreBehavior (line 26) | class DomainA11yExploreBehavior<D> extends ChartBehavior<D> {
method createCommonBehavior (line 87) | common.DomainA11yExploreBehavior<D> createCommonBehavior()
method updateCommonBehavior (line 97) | void updateCommonBehavior(common.ChartBehavior commonBehavior)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/behaviors/calculation/percent_injector.dart
class PercentInjector (line 38) | @immutable
method createCommonBehavior (line 51) | common.PercentInjector<D> createCommonBehavior()
method updateCommonBehavior (line 55) | void updateCommonBehavior(common.ChartBehavior commonBehavior)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/behaviors/chart_behavior.dart
class ChartBehavior (line 29) | @immutable
method createCommonBehavior (line 33) | common.ChartBehavior<D> createCommonBehavior()
method updateCommonBehavior (line 35) | void updateCommonBehavior(common.ChartBehavior<D> commonBehavior)
class ChartStateBehavior (line 41) | abstract class ChartStateBehavior<B extends common.ChartBehavior> {
class BuildableBehavior (line 46) | abstract class BuildableBehavior<B extends common.ChartBehavior> {
method build (line 51) | Widget build(BuildContext context)
type GestureType (line 67) | enum GestureType {
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/behaviors/chart_title/chart_title.dart
class ChartTitle (line 31) | @immutable
method createCommonBehavior (line 147) | common.ChartTitle<D> createCommonBehavior()
method updateCommonBehavior (line 162) | void updateCommonBehavior(common.ChartBehavior commonBehavior)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/behaviors/domain_highlighter.dart
class DomainHighlighter (line 30) | @immutable
method createCommonBehavior (line 39) | common.DomainHighlighter<D> createCommonBehavior()
method updateCommonBehavior (line 43) | void updateCommonBehavior(common.ChartBehavior commonBehavior)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/behaviors/initial_selection.dart
class InitialSelection (line 26) | @immutable
method createCommonBehavior (line 40) | common.InitialSelection<D> createCommonBehavior()
method updateCommonBehavior (line 47) | void updateCommonBehavior(common.ChartBehavior commonBehavior)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/behaviors/legend/datum_legend.dart
class DatumLegend (line 43) | @immutable
method createCommonBehavior (line 248) | common.DatumLegend<D> createCommonBehavior()
method updateCommonBehavior (line 252) | void updateCommonBehavior(common.ChartBehavior commonBehavior)
class _FlutterDatumLegend (line 293) | class _FlutterDatumLegend<D> extends common.DatumLegend<D>
method updateLegend (line 308) | void updateLegend()
method build (line 324) | Widget build(BuildContext context)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/behaviors/legend/legend.dart
class TappableLegend (line 18) | abstract class TappableLegend<T, D> {
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/behaviors/legend/legend_content_builder.dart
class LegendContentBuilder (line 24) | abstract class LegendContentBuilder {
method build (line 27) | Widget build(BuildContext context, common.LegendState legendState,
class BaseLegendContentBuilder (line 37) | abstract class BaseLegendContentBuilder implements LegendContentBuilder {
method build (line 47) | Widget build(BuildContext context, common.LegendState legendState,
class TabularLegendContentBuilder (line 72) | class TabularLegendContentBuilder extends BaseLegendContentBuilder {
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/behaviors/legend/legend_entry_layout.dart
class LegendEntryLayout (line 26) | abstract class LegendEntryLayout {
method build (line 27) | Widget build(BuildContext context, common.LegendEntry legendEntry,
class SimpleLegendEntryLayout (line 36) | class SimpleLegendEntryLayout implements LegendEntryLayout {
method createSymbol (line 39) | Widget createSymbol(BuildContext context, common.LegendEntry legendEntry,
method createLabel (line 65) | Widget createLabel(BuildContext context, common.LegendEntry legendEntry,
method createMeasureValue (line 75) | Widget createMeasureValue(BuildContext context,
method build (line 83) | Widget build(BuildContext context, common.LegendEntry legendEntry,
method makeTapUpCallback (line 109) | GestureTapUpCallback makeTapUpCallback(BuildContext context,
method _convertTextStyle (line 127) | TextStyle _convertTextStyle(
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/behaviors/legend/legend_layout.dart
class LegendLayout (line 21) | abstract class LegendLayout {
method build (line 22) | Widget build(BuildContext context, List<Widget> legendEntryWidgets)
class TabularLegendLayout (line 26) | class TabularLegendLayout implements LegendLayout {
method build (line 83) | Widget build(BuildContext context, List<Widget> legendEntries)
method _buildHorizontalFirst (line 107) | Widget _buildHorizontalFirst(List<Widget> legendEntries)
method _buildVerticalFirst (line 123) | Widget _buildVerticalFirst(List<Widget> legendEntries)
method _buildTableFromRows (line 137) | Table _buildTableFromRows(List<TableRow> rows)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/behaviors/legend/series_legend.dart
class SeriesLegend (line 42) | @immutable
method createCommonBehavior (line 260) | common.SeriesLegend<D> createCommonBehavior()
method updateCommonBehavior (line 264) | void updateCommonBehavior(common.ChartBehavior commonBehavior)
class _FlutterSeriesLegend (line 307) | class _FlutterSeriesLegend<D> extends common.SeriesLegend<D>
method updateLegend (line 323) | void updateLegend()
method build (line 339) | Widget build(BuildContext context)
method _hideSeries (line 370) | void _hideSeries(common.LegendEntry detail)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/behaviors/line_point_highlighter.dart
class LinePointHighlighter (line 36) | @immutable
method createCommonBehavior (line 86) | common.LinePointHighlighter<D> createCommonBehavior()
method updateCommonBehavior (line 99) | void updateCommonBehavior(common.ChartBehavior<D> commonBehavior)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/behaviors/range_annotation.dart
class RangeAnnotation (line 39) | @immutable
method createCommonBehavior (line 86) | common.RangeAnnotation<D> createCommonBehavior()
method updateCommonBehavior (line 98) | void updateCommonBehavior(common.ChartBehavior commonBehavior)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/behaviors/select_nearest.dart
class SelectNearest (line 51) | @immutable
method _getDesiredGestures (line 89) | Set<GestureType> _getDesiredGestures(
method createCommonBehavior (line 115) | common.SelectNearest<D> createCommonBehavior()
method updateCommonBehavior (line 125) | void updateCommonBehavior(common.ChartBehavior commonBehavior)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/behaviors/slider/slider.dart
class Slider (line 42) | @immutable
method _getDesiredGestures (line 141) | Set<GestureType> _getDesiredGestures(
method createCommonBehavior (line 163) | common.Slider<D> createCommonBehavior()
method updateCommonBehavior (line 173) | void updateCommonBehavior(common.ChartBehavior<D> commonBehavior)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/behaviors/sliding_viewport.dart
class SlidingViewport (line 29) | @immutable
method createCommonBehavior (line 38) | common.SlidingViewport<D> createCommonBehavior()
method updateCommonBehavior (line 42) | void updateCommonBehavior(common.ChartBehavior<D> commonBehavior)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/behaviors/zoom/initial_hint_behavior.dart
class InitialHintBehavior (line 26) | @immutable
method createCommonBehavior (line 38) | common.InitialHintBehavior<D> createCommonBehavior()
method updateCommonBehavior (line 57) | void updateCommonBehavior(common.ChartBehavior commonBehavior)
class FlutterInitialHintBehavior (line 73) | class FlutterInitialHintBehavior<D> extends common.InitialHintBehavior<D>
method startHintAnimation (line 89) | void startHintAnimation()
method stopHintAnimation (line 98) | void stopHintAnimation()
method onHintTick (line 114) | void onHintTick()
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/behaviors/zoom/pan_and_zoom_behavior.dart
class PanAndZoomBehavior (line 23) | @immutable
method createCommonBehavior (line 40) | common.PanAndZoomBehavior<D> createCommonBehavior()
method updateCommonBehavior (line 46) | void updateCommonBehavior(common.ChartBehavior commonBehavior)
class FlutterPanAndZoomBehavior (line 63) | class FlutterPanAndZoomBehavior<D> extends common.PanAndZoomBehavior<D>
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/behaviors/zoom/pan_behavior.dart
class PanBehavior (line 29) | @immutable
method createCommonBehavior (line 46) | common.PanBehavior<D> createCommonBehavior()
method updateCommonBehavior (line 52) | void updateCommonBehavior(common.ChartBehavior commonBehavior)
function onTapTest (line 106) | bool onTapTest(Point<double> chartPoint)
function onDragEnd (line 115) | bool onDragEnd(
function _startFling (line 131) | void _startFling(double pixelsPerSec)
function _decelerate (line 149) | double _decelerate(double value)
function _onFlingTick (line 154) | void _onFlingTick()
function stopFlingAnimation (line 180) | void stopFlingAnimation()
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/canvas/circle_sector_painter.dart
class CircleSectorPainter (line 21) | class CircleSectorPainter {
method draw (line 35) | void draw({
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/canvas/line_painter.dart
class LinePainter (line 26) | class LinePainter {
method draw (line 34) | void draw(
method _drawSolidLine (line 96) | void _drawSolidLine(Canvas canvas, Paint paint, List<Point> points)
method _drawDashedLine (line 110) | void _drawDashedLine(
method _getOffset (line 235) | Offset _getOffset(Point point)
method _getOffsetDistance (line 239) | num _getOffsetDistance(Offset o1, Offset o2)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/canvas/pie_painter.dart
class PiePainter (line 22) | class PiePainter {
method draw (line 24) | void draw(Canvas canvas, Paint paint, common.CanvasPie canvasPie)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/canvas/point_painter.dart
class PointPainter (line 23) | class PointPainter {
method draw (line 24) | void draw(
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/canvas/polygon_painter.dart
class PolygonPainter (line 25) | class PolygonPainter {
method draw (line 33) | void draw(
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/cartesian_chart.dart
class CartesianChart (line 35) | @immutable
method updateCommonChart (line 75) | void updateCommonChart(common.BaseChart<D> baseChart, BaseChart<D>? ol...
method createDisjointMeasureAxes (line 108) | LinkedHashMap<String, common.NumericAxis>? createDisjointMeasureAxes()
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/chart_canvas.dart
class ChartCanvas (line 38) | class ChartCanvas implements common.ChartCanvas {
method drawCircleSector (line 49) | void drawCircleSector(Point center, double radius, double innerRadius,
method drawLine (line 65) | void drawLine(
method drawPie (line 86) | void drawPie(common.CanvasPie canvasPie)
method drawPoint (line 91) | void drawPoint(
method drawPolygon (line 109) | void drawPolygon(
method _createHintGradient (line 126) | ui.Gradient _createHintGradient(double left, double top, common.Color ...
method drawRect (line 138) | void drawRect(Rectangle<num> bounds,
method drawRRect (line 202) | void drawRRect(Rectangle<num> bounds,
method drawBarStack (line 229) | void drawBarStack(common.CanvasBarStack barStack,
method drawText (line 268) | void drawText(common.TextElement textElement, int offsetX, int offsetY,
method setClipBounds (line 311) | void setClipBounds(Rectangle<int> clipBounds)
method resetClipBounds (line 318) | void resetClipBounds()
method _getRect (line 323) | Rect _getRect(Rectangle<num> rectangle)
method _getRRect (line 332) | RRect _getRRect(
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/chart_container.dart
class ChartContainer (line 41) | class ChartContainer<D> extends CustomPaint {
method createRenderObject (line 60) | RenderCustomPaint createRenderObject(BuildContext context)
method updateRenderObject (line 65) | void updateRenderObject(
class ChartContainerRenderObject (line 72) | class ChartContainerRenderObject<D> extends RenderCustomPaint
method reconfigure (line 99) | void reconfigure(ChartContainer<D> config, BuildContext context)
method performLayout (line 211) | void performLayout()
method markNeedsLayout (line 228) | void markNeedsLayout()
method hitTestSelf (line 236) | bool hitTestSelf(Offset position)
method requestRedraw (line 239) | void requestRedraw()
method requestAnimation (line 242) | void requestAnimation(Duration transition)
method startAnimationController (line 243) | void startAnimationController(_)
method requestRebuild (line 266) | void requestRebuild()
method doRebuild (line 267) | void doRebuild(_)
method requestPaint (line 285) | void requestPaint()
method enableA11yExploreMode (line 317) | void enableA11yExploreMode(List<common.A11yNode> nodes,
method disableA11yExploreMode (line 329) | void disableA11yExploreMode({String? announcement})
method _setNewPainter (line 339) | void _setNewPainter()
class ChartContainerCustomPaint (line 349) | class ChartContainerCustomPaint extends CustomPainter {
method paint (line 382) | void paint(Canvas canvas, Size size)
method shouldRepaint (line 391) | bool shouldRepaint(ChartContainerCustomPaint oldPainter)
method shouldRebuildSemantics (line 395) | bool shouldRebuildSemantics(ChartContainerCustomPaint oldDelegate)
method _buildSemantics (line 404) | List<CustomPainterSemantics> _buildSemantics(Size size)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/chart_gesture_detector.dart
class ChartGestureDetector (line 36) | class ChartGestureDetector {
method onTapDown (line 75) | void onTapDown(TapDownDetails d)
method onTapUp (line 90) | void onTapUp(TapUpDetails d)
method onLongPress (line 99) | void onLongPress()
method onScaleStart (line 104) | void onScaleStart(ScaleStartDetails d)
method onScaleUpdate (line 114) | void onScaleUpdate(ScaleUpdateDetails d)
method onScaleEnd (line 127) | void onScaleEnd(ScaleEndDetails d)
type ChartContainerRenderObject (line 140) | typedef ChartContainerRenderObject _ContainerResolver();
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/chart_state.dart
class ChartState (line 16) | abstract class ChartState {
method setAnimation (line 17) | void setAnimation(Duration transition)
method requestRebuild (line 20) | void requestRebuild()
method markChartDirty (line 29) | void markChartDirty()
method resetChartDirtyFlag (line 32) | void resetChartDirtyFlag()
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/combo_chart/combo_chart.dart
class NumericComboChart (line 37) | class NumericComboChart extends CartesianChart<num> {
method createCommonChart (line 69) | common.NumericCartesianChart createCommonChart(BaseChartState chartState)
class OrdinalComboChart (line 82) | class OrdinalComboChart extends CartesianChart<String> {
method createCommonChart (line 114) | common.OrdinalCartesianChart createCommonChart(BaseChartState chartState)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/graphics_factory.dart
class GraphicsFactory (line 24) | class GraphicsFactory implements common.GraphicsFactory {
method createTextPaint (line 35) | common.TextStyle createTextPaint()
method createTextElement (line 40) | common.TextElement createTextElement(String text)
method createLinePaint (line 46) | common.LineStyle createLinePaint()
class GraphicsFactoryHelper (line 50) | class GraphicsFactoryHelper {
method getTextScaleFactorOf (line 53) | double getTextScaleFactorOf(BuildContext context)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/line_chart.dart
class LineChart (line 35) | class LineChart extends CartesianChart<num> {
method createCommonChart (line 73) | common.LineChart createCommonChart(BaseChartState chartState)
method addDefaultInteractions (line 85) | void addDefaultInteractions(List<ChartBehavior> behaviors)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/line_style.dart
class LineStyle (line 18) | class LineStyle implements common.LineStyle {
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/pie_chart.dart
class PieChart (line 23) | class PieChart<D> extends BaseChart<D> {
method createCommonChart (line 47) | common.PieChart<D> createCommonChart(BaseChartState chartState)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/scatter_plot_chart.dart
class ScatterPlotChart (line 34) | class ScatterPlotChart extends CartesianChart<num> {
method createCommonChart (line 72) | common.ScatterPlotChart createCommonChart(BaseChartState chartState)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/selection_model_config.dart
class SelectionModelConfig (line 20) | @immutable
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/symbol_renderer.dart
class SymbolRendererCanvas (line 27) | class SymbolRendererCanvas implements SymbolRendererBuilder {
method build (line 34) | Widget build(BuildContext context,
class CustomSymbolRenderer (line 53) | abstract class CustomSymbolRenderer extends common.SymbolRenderer
method build (line 60) | Widget build(BuildContext context,
method paint (line 64) | void paint(common.ChartCanvas canvas, Rectangle<num> bounds,
method shouldRepaint (line 74) | bool shouldRepaint(common.SymbolRenderer oldRenderer)
class SymbolRendererBuilder (line 81) | abstract class SymbolRendererBuilder {
method build (line 82) | Widget build(BuildContext context,
class _SymbolCustomPaint (line 88) | class _SymbolCustomPaint extends CustomPainter {
method paint (line 98) | void paint(Canvas canvas, Size size)
method shouldRepaint (line 113) | bool shouldRepaint(_SymbolCustomPaint oldDelegate)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/text_element.dart
class TextElement (line 28) | class TextElement implements common.TextElement {
method _refreshPainter (line 137) | void _refreshPainter()
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/text_style.dart
class TextStyle (line 19) | class TextStyle implements common.TextStyle {
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/time_series_chart.dart
class TimeSeriesChart (line 35) | class TimeSeriesChart extends CartesianChart<DateTime> {
method createCommonChart (line 78) | common.TimeSeriesChart createCommonChart(BaseChartState chartState)
method addDefaultInteractions (line 92) | void addDefaultInteractions(List<ChartBehavior> behaviors)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/user_managed_state.dart
class UserManagedState (line 23) | class UserManagedState<D> {
class UserManagedSelectionModel (line 46) | class UserManagedSelectionModel<D> {
method getModel (line 70) | common.SelectionModel<D> getModel(
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/util.dart
function getChartContainerRenderObject (line 28) | ChartContainerRenderObject getChartContainerRenderObject(RenderBox box)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/util/color.dart
class ColorUtil (line 19) | class ColorUtil {
method toDartColor (line 20) | ui.Color toDartColor(common.Color color)
method fromDartColor (line 24) | common.Color fromDartColor(ui.Color color)
FILE: flutter/reddit_ticker/deps/charts/charts_flutter/lib/src/widget_layout_delegate.dart
class WidgetLayoutDelegate (line 26) | class WidgetLayoutDelegate extends MultiChildLayoutDelegate {
method performLayout (line 39) | void performLayout(Size size)
method shouldRelayout (line 97) | bool shouldRelayout(MultiChildLayoutDelegate oldDelegate)
method _getBehaviorOffset (line 104) | Offset _getBehaviorOffset(BuildableBehavior behavior,
method getOutsideJustification (line 184) | _HorizontalJustification getOutsideJustification(
type _HorizontalJustification (line 217) | enum _HorizontalJustification {
FILE: flutter/reddit_ticker/lib/cubit/add_post_cubit.dart
class AddPostCubit (line 10) | class AddPostCubit extends Cubit<AddPostState> {
method addPost (line 14) | Future<void> addPost(String url)
FILE: flutter/reddit_ticker/lib/cubit/add_post_state.dart
class AddPostState (line 3) | @immutable
class AddPostInactive (line 6) | @immutable
class AddPostPending (line 9) | @immutable
class AddPostSucceeded (line 16) | @immutable
class AddPostFailed (line 23) | @immutable
FILE: flutter/reddit_ticker/lib/cubit/post_cubit.dart
class PostCubit (line 10) | class PostCubit extends Cubit<PostState> {
method _subscribe (line 17) | void _subscribe()
method _unsubscribe (line 24) | Future<void> _unsubscribe()
method _refreshState (line 29) | Future<void> _refreshState()
method stopWatching (line 42) | Future<bool> stopWatching()
method close (line 51) | Future<void> close()
FILE: flutter/reddit_ticker/lib/cubit/post_state.dart
class PostState (line 3) | @immutable
class PostActive (line 11) | @immutable
method intoRemoved (line 17) | PostRemoved intoRemoved()
class PostRemoved (line 20) | @immutable
FILE: flutter/reddit_ticker/lib/cubit/posts_cubit.dart
class PostsCubit (line 9) | class PostsCubit extends Cubit<PostsState> {
method _subscribe (line 18) | void _subscribe()
method _unsubscribe (line 25) | Future<void> _unsubscribe()
method _refresh (line 30) | void _refresh()
method close (line 38) | Future<void> close()
FILE: flutter/reddit_ticker/lib/cubit/posts_state.dart
class PostsState (line 3) | @immutable
FILE: flutter/reddit_ticker/lib/main.dart
function main (line 11) | void main()
class RedditTickerApp (line 22) | class RedditTickerApp extends StatelessWidget {
method build (line 24) | Widget build(BuildContext context)
class RedditTickerPage (line 39) | class RedditTickerPage extends StatefulWidget {
method createState (line 44) | _RedditTickerPageState createState()
class _RedditTickerPageState (line 47) | class _RedditTickerPageState extends State<RedditTickerPage> {
method initState (line 49) | void initState()
method build (line 56) | Widget build(BuildContext context)
FILE: flutter/reddit_ticker/lib/rid/messaging.dart
class LogMessageHandler (line 19) | class LogMessageHandler {
method dispose (line 46) | void dispose()
class ErrorHandler (line 58) | class ErrorHandler {
method dispose (line 114) | void dispose()
class UserMsgHandler (line 126) | class UserMsgHandler {
method dispose (line 185) | void dispose()
class RidMessaging (line 197) | class RidMessaging {
method init (line 198) | void init()
FILE: flutter/reddit_ticker/lib/views/add_post.dart
class AddPostView (line 5) | class AddPostView extends StatefulWidget {
method createState (line 7) | State<AddPostView> createState()
class _AddPostViewState (line 10) | class _AddPostViewState extends State<AddPostView> {
method build (line 15) | Widget build(BuildContext context)
method _addPostDialog (line 43) | Future<void> _addPostDialog(BuildContext context)
method _onSubmitted (line 68) | void _onSubmitted()
FILE: flutter/reddit_ticker/lib/views/post.dart
function _toChartData (line 8) | charts.Series<Score, double> _toChartData(List<Score> scores)
class PostView (line 17) | class PostView extends StatelessWidget {
method build (line 19) | Widget build(BuildContext context)
FILE: flutter/reddit_ticker/lib/views/posts.dart
class PostsView (line 7) | class PostsView extends StatelessWidget {
method build (line 9) | Widget build(BuildContext context)
FILE: flutter/reddit_ticker/plugin/lib/plugin.dart
class Plugin (line 6) | class Plugin {
FILE: flutter/reddit_ticker/rid_build.rs
function main (line 4) | fn main() {
FILE: flutter/reddit_ticker/src/db.rs
constant DB_NAME (line 8) | pub const DB_NAME: &str = "reddit_ticker.sqlite";
type DB (line 10) | pub struct DB {
method new (line 15) | pub fn new(path: &str) -> Result<Self> {
method init_tables (line 25) | fn init_tables(&self) -> Result<()> {
method insert_post (line 52) | pub fn insert_post(&self, post: &Post) -> Result<usize> {
method insert_score (line 65) | pub fn insert_score(&self, post_id: &str, time_stamp: SystemTime, scor...
method get_scores (line 89) | pub fn get_scores(&self, post: &Post) -> Result<Vec<Score>> {
method get_all_posts (line 111) | pub fn get_all_posts(&self) -> Result<Vec<Post>> {
method delete_post (line 139) | pub fn delete_post(&self, post_id: &str) -> Result<usize> {
function try_extract_score (line 168) | fn try_extract_score(row: &Row, post_added: SystemTime) -> rusqlite::Res...
function try_extract_post (line 186) | fn try_extract_post(row: &Row) -> rusqlite::Result<Post> {
function time_stamp_to_secs (line 195) | fn time_stamp_to_secs(time_stamp: SystemTime) -> u32 {
function secs_to_time_stamp (line 201) | fn secs_to_time_stamp(secs: u32) -> SystemTime {
FILE: flutter/reddit_ticker/src/lib.rs
type Store (line 26) | pub struct Store {
method create (line 36) | fn create() -> Self {
method update (line 44) | fn update(&mut self, req_id: u64, msg: Msg) {
method read (line 112) | fn read() -> RwLockReadGuard<'static, Store> {
method write (line 115) | fn write() -> RwLockWriteGuard<'static, Store> {
type Msg (line 124) | enum Msg {
type Reply (line 135) | enum Reply {
function start_watching (line 148) | fn start_watching(req_id: u64, url: String) {
function try_start_watching (line 159) | fn try_start_watching(url: String) -> Result<Post> {
function poll_posts (line 185) | fn poll_posts() {
FILE: flutter/reddit_ticker/src/reddit/mod.rs
constant RESOLUTION_MILLIS (line 11) | pub const RESOLUTION_MILLIS: u64 = 5_000;
type Page (line 17) | pub struct Page {
type Score (line 28) | pub struct Score {
type Post (line 39) | pub struct Post {
FILE: flutter/reddit_ticker/src/reddit/reddit.rs
function query_page (line 7) | pub fn query_page(url: &str) -> Result<Page> {
constant API_INFO_URL (line 48) | const API_INFO_URL: &str = "https://api.reddit.com/api/info";
function query_score (line 50) | pub fn query_score(id: &str) -> Result<i32> {
FILE: flutter/reddit_ticker/src/reddit/reddit_api_response.rs
type ApiRoot (line 4) | pub struct ApiRoot {
type Data (line 9) | pub struct Data {
type Children (line 14) | pub struct Children {
type Data2 (line 19) | pub struct Data2 {
FILE: flutter/reddit_ticker/src/reddit/reddit_page_response.rs
type PageRoot (line 3) | pub type PageRoot = Vec<RedditPage>;
type RedditPage (line 6) | pub struct RedditPage {
type ChildContainer (line 11) | pub struct ChildContainer {
type Children (line 16) | pub struct Children {
type ChildData (line 21) | pub struct ChildData {
FILE: flutter/reddit_ticker/test/logging.dart
class LogMessageHandler (line 17) | class LogMessageHandler {
method dispose (line 42) | void dispose()
class ErrorHandler (line 56) | class ErrorHandler {
method dispose (line 79) | void dispose()
class RidMessaging (line 93) | class RidMessaging {
method init (line 94) | void init()
FILE: flutter/reddit_ticker/test/wip.dart
function main (line 5) | void main()
FILE: flutter/todo/lib/main.dart
function configRid (line 11) | void configRid()
function main (line 15) | void main()
class TodoApp (line 21) | class TodoApp extends StatelessWidget with StatelessLock {
method build (line 23) | Widget build(BuildContext context)
class TodosPage (line 36) | class TodosPage extends StatefulWidget with StatefulLock {
method createState (line 42) | _TodosPageState createState()
class _TodosPageState (line 45) | class _TodosPageState extends State<TodosPage> with StateAsync<TodosPage> {
method initState (line 52) | void initState()
method dispose (line 66) | void dispose()
method build (line 72) | Widget build(BuildContext context)
method _addTodoDialog (line 182) | Future<void> _addTodoDialog(BuildContext context)
FILE: flutter/todo/lib/views/expiry.dart
function expiryColor (line 3) | Color expiryColor(double completedExpiryMillis, double remaining)
class ExpiryWidget (line 15) | class ExpiryWidget extends StatelessWidget {
method build (line 24) | Widget build(BuildContext context)
FILE: flutter/todo/lib/views/menu.dart
class Menu (line 5) | class Menu extends StatelessWidget {
method build (line 23) | Widget build(BuildContext context)
class AutoRemoveCompletedWidget (line 59) | class AutoRemoveCompletedWidget extends StatefulWidget with StatefulLock {
method createState (line 70) | State<AutoRemoveCompletedWidget> createState()
class _AutoRemoveCompletedWidgetState (line 74) | class _AutoRemoveCompletedWidgetState extends State<AutoRemoveCompletedW...
method build (line 77) | Widget build(BuildContext context)
FILE: flutter/todo/lib/views/todo.dart
class TodoView (line 7) | class TodoView extends StatefulWidget with StatefulLock {
method createState (line 23) | _TodoViewState createState()
class _TodoViewState (line 26) | class _TodoViewState extends State<TodoView> with StateAsync<TodoView> {
method _replyIsForThisTodo (line 33) | bool _replyIsForThisTodo(PostedReply reply)
method initState (line 44) | void initState()
method build (line 61) | Widget build(BuildContext context)
method dispose (line 94) | void dispose()
FILE: flutter/todo/lib/views/todos.dart
class TodosView (line 7) | class TodosView extends StatelessWidget {
method build (line 24) | Widget build(BuildContext context)
FILE: flutter/todo/linux/flutter/generated_plugin_registrant.cc
function fl_register_plugins (line 8) | void fl_register_plugins(FlPluginRegistry* registry) {
FILE: flutter/todo/linux/main.cc
function main (line 3) | int main(int argc, char** argv) {
FILE: flutter/todo/linux/my_application.cc
type _MyApplication (line 10) | struct _MyApplication {
function my_application_activate (line 18) | static void my_application_activate(GApplication* application) {
function gboolean (line 67) | static gboolean my_application_local_command_line(GApplication* applicat...
function my_application_dispose (line 86) | static void my_application_dispose(GObject *object) {
function my_application_class_init (line 92) | static void my_application_class_init(MyApplicationClass* klass) {
function my_application_init (line 98) | static void my_application_init(MyApplication* self) {}
function MyApplication (line 100) | MyApplication* my_application_new() {
FILE: flutter/todo/rid_build.rs
function main (line 4) | fn main() {
FILE: flutter/todo/src/lib.rs
constant COMPLETED_EXPIRY_MILLIS (line 9) | const COMPLETED_EXPIRY_MILLIS: u64 = 7000;
constant EXPIRY_STEP (line 10) | const EXPIRY_STEP: u64 = 7;
type Store (line 19) | pub struct Store {
method create (line 27) | fn create() -> Self {
method update (line 63) | fn update(&mut self, req_id: u64, msg: Msg) {
method remove_todo (line 124) | fn remove_todo(&mut self, id: u32) {
method update_todo (line 133) | fn update_todo<F: FnOnce(&mut Todo)>(&mut self, id: u32, update: F) {
method filtered_todos (line 141) | fn filtered_todos(&self) -> Vec<&Todo> {
method todo_by_id (line 152) | fn todo_by_id(&self, id: u32) -> Option<&Todo> {
method read (line 158) | fn read() -> RwLockReadGuard<'static, Store> {
method write (line 162) | fn write() -> RwLockWriteGuard<'static, Store> {
method set_auto_expire_completed_todos (line 166) | pub fn set_auto_expire_completed_todos(&mut self, expire: bool) {
type Settings (line 216) | pub struct Settings {
type Todo (line 226) | pub struct Todo {
method set_completed (line 234) | fn set_completed(&mut self, completed: bool) {
method cmp (line 241) | fn cmp(&self, other: &Self) -> std::cmp::Ordering {
type Filter (line 251) | pub enum Filter {
type Msg (line 263) | pub enum Msg {
type Reply (line 282) | pub enum Reply {
FILE: flutter/todo/test/widget_test.dart
function main (line 13) | void main()
FILE: flutter/todo_cubit/lib/blocs/cubit/filter_cubit.dart
class FilterCubit (line 4) | class FilterCubit extends Cubit<Filter> {
method setFilter (line 8) | Future<void> setFilter(Filter filter)
FILE: flutter/todo_cubit/lib/blocs/cubit/settings_cubit.dart
class SettingsCubit (line 4) | class SettingsCubit extends Cubit<Settings> {
method setAutoExpireCompleted (line 8) | Future<void> setAutoExpireCompleted(bool val)
FILE: flutter/todo_cubit/lib/blocs/cubit/todo_cubit.dart
class TodoCubit (line 10) | class TodoCubit extends Cubit<TodoState> {
method _tickIsForThisTodo (line 19) | bool _tickIsForThisTodo(PostedReply reply)
method _subscribe (line 30) | void _subscribe()
method close (line 37) | Future<void> close()
method _refreshState (line 42) | void _refreshState(PostedReply _reply)
method toggleCompleted (line 51) | Future<void> toggleCompleted()
method removeTodo (line 54) | Future<void> removeTodo(int id)
FILE: flutter/todo_cubit/lib/blocs/cubit/todo_state.dart
class TodoState (line 3) | @immutable
class ExistingTodo (line 17) | class ExistingTodo extends TodoState {
class MissingTodo (line 30) | class MissingTodo extends TodoState {
FILE: flutter/todo_cubit/lib/blocs/cubit/todos_cubit.dart
class TodosCubit (line 10) | class TodosCubit extends Cubit<TodosState> {
method _subscribe (line 18) | void _subscribe()
method close (line 29) | Future<void> close()
method _refreshList (line 34) | void _refreshList(PostedReply _reply)
method addTodo (line 40) | Future<void> addTodo(String title)
method restartAll (line 43) | Future<void> restartAll()
method completeAll (line 44) | Future<void> completeAll()
method removeCompleted (line 45) | Future<void> removeCompleted()
FILE: flutter/todo_cubit/lib/blocs/cubit/todos_state.dart
class TodosState (line 3) | @immutable
FILE: flutter/todo_cubit/lib/main.dart
function configRid (line 15) | void configRid()
function main (line 19) | void main()
class TodoApp (line 24) | class TodoApp extends StatelessWidget {
method build (line 26) | Widget build(BuildContext context)
class TodosPage (line 45) | class TodosPage extends StatefulWidget {
method createState (line 50) | _TodosPageState createState()
class _TodosPageState (line 53) | class _TodosPageState extends State<TodosPage> {
method build (line 58) | Widget build(BuildContext context)
method _addTodoDialog (line 139) | Future<void> _addTodoDialog(BuildContext context)
FILE: flutter/todo_cubit/lib/views/expiry.dart
function expiryColor (line 3) | Color expiryColor(double completedExpiryMillis, double remaining)
class ExpiryWidget (line 15) | class ExpiryWidget extends StatelessWidget {
method build (line 24) | Widget build(BuildContext context)
FILE: flutter/todo_cubit/lib/views/menu.dart
class Menu (line 7) | class Menu extends StatelessWidget {
method build (line 9) | Widget build(BuildContext context)
class AutoRemoveCompletedWidget (line 41) | class AutoRemoveCompletedWidget extends StatelessWidget {
method build (line 43) | Widget build(BuildContext context)
FILE: flutter/todo_cubit/lib/views/todo.dart
class TodoView (line 8) | class TodoView extends StatelessWidget {
method build (line 10) | Widget build(BuildContext context)
FILE: flutter/todo_cubit/lib/views/todos.dart
class TodosView (line 7) | class TodosView extends StatelessWidget {
method build (line 9) | Widget build(BuildContext context)
FILE: flutter/todo_cubit/linux/flutter/generated_plugin_registrant.cc
function fl_register_plugins (line 8) | void fl_register_plugins(FlPluginRegistry* registry) {
FILE: flutter/todo_cubit/linux/main.cc
function main (line 3) | int main(int argc, char** argv) {
FILE: flutter/todo_cubit/linux/my_application.cc
type _MyApplication (line 10) | struct _MyApplication {
function my_application_activate (line 18) | static void my_application_activate(GApplication* application) {
function gboolean (line 67) | static gboolean my_application_local_command_line(GApplication* applicat...
function my_application_dispose (line 86) | static void my_application_dispose(GObject *object) {
function my_application_class_init (line 92) | static void my_application_class_init(MyApplicationClass* klass) {
function my_application_init (line 98) | static void my_application_init(MyApplication* self) {}
function MyApplication (line 100) | MyApplication* my_application_new() {
FILE: flutter/todo_cubit/rid_build.rs
function main (line 4) | fn main() {
FILE: flutter/todo_cubit/src/lib.rs
constant COMPLETED_EXPIRY_MILLIS (line 9) | const COMPLETED_EXPIRY_MILLIS: u64 = 7000;
constant EXPIRY_STEP (line 10) | const EXPIRY_STEP: u64 = 10;
type Store (line 19) | pub struct Store {
method create (line 27) | fn create() -> Self {
method update (line 63) | fn update(&mut self, req_id: u64, msg: Msg) {
method remove_todo (line 124) | fn remove_todo(&mut self, id: u32) {
method update_todo (line 133) | fn update_todo<F: FnOnce(&mut Todo)>(&mut self, id: u32, update: F) {
method filtered_todos (line 141) | fn filtered_todos(&self) -> Vec<&Todo> {
method todo_by_id (line 152) | fn todo_by_id(&self, id: u32) -> Option<&Todo> {
method read (line 158) | fn read() -> RwLockReadGuard<'static, Store> {
method write (line 162) | fn write() -> RwLockWriteGuard<'static, Store> {
method set_auto_expire_completed_todos (line 166) | pub fn set_auto_expire_completed_todos(&mut self, expire: bool) {
type Settings (line 216) | pub struct Settings {
type Todo (line 226) | pub struct Todo {
method set_completed (line 234) | fn set_completed(&mut self, completed: bool) {
method cmp (line 241) | fn cmp(&self, other: &Self) -> std::cmp::Ordering {
type Filter (line 251) | pub enum Filter {
type Msg (line 263) | pub enum Msg {
type Reply (line 282) | pub enum Reply {
FILE: flutter/todo_cubit/test/widget_test.dart
function main (line 13) | void main()
FILE: flutter/todo_cubit/windows/flutter/generated_plugin_registrant.cc
function RegisterPlugins (line 8) | void RegisterPlugins(flutter::PluginRegistry* registry) {
FILE: flutter/todo_cubit/windows/runner/flutter_window.cpp
function LRESULT (line 43) | LRESULT
FILE: flutter/todo_cubit/windows/runner/flutter_window.h
function class (line 13) | class FlutterWindow : public Win32Window {
FILE: flutter/todo_cubit/windows/runner/main.cpp
function wWinMain (line 9) | int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
FILE: flutter/todo_cubit/windows/runner/run_loop.h
function class (line 11) | class RunLoop {
FILE: flutter/todo_cubit/windows/runner/utils.cpp
function CreateAndAttachConsole (line 10) | void CreateAndAttachConsole() {
function GetCommandLineArguments (line 24) | std::vector<std::string> GetCommandLineArguments() {
function Utf8FromUtf16 (line 44) | std::string Utf8FromUtf16(const wchar_t* utf16_string) {
FILE: flutter/todo_cubit/windows/runner/win32_window.cpp
function Scale (line 18) | int Scale(int source, double scale_factor) {
function EnableFullDpiSupportIfAvailable (line 24) | void EnableFullDpiSupportIfAvailable(HWND hwnd) {
class WindowClassRegistrar (line 41) | class WindowClassRegistrar {
method WindowClassRegistrar (line 46) | static WindowClassRegistrar* GetInstance() {
method WindowClassRegistrar (line 62) | WindowClassRegistrar() = default;
function wchar_t (line 71) | const wchar_t* WindowClassRegistrar::GetWindowClass() {
function LRESULT (line 133) | LRESULT CALLBACK Win32Window::WndProc(HWND const window,
function LRESULT (line 152) | LRESULT
function Win32Window (line 208) | Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept {
function RECT (line 224) | RECT Win32Window::GetClientArea() {
function HWND (line 230) | HWND Win32Window::GetHandle() {
FILE: flutter/todo_cubit/windows/runner/win32_window.h
type Size (line 21) | struct Size {
FILE: flutter/todo_cubit_wasm/lib/blocs/cubit/filter_cubit.dart
class FilterCubit (line 4) | class FilterCubit extends Cubit<Filter> {
method setFilter (line 8) | Future<void> setFilter(Filter filter)
FILE: flutter/todo_cubit_wasm/lib/blocs/cubit/settings_cubit.dart
class SettingsCubit (line 4) | class SettingsCubit extends Cubit<Settings> {
method setAutoExpireCompleted (line 8) | Future<void> setAutoExpireCompleted(bool val)
FILE: flutter/todo_cubit_wasm/lib/blocs/cubit/todo_cubit.dart
class TodoCubit (line 10) | class TodoCubit extends Cubit<TodoState> {
method _tickIsForThisTodo (line 19) | bool _tickIsForThisTodo(PostedReply reply)
method _subscribe (line 30) | void _subscribe()
method close (line 37) | Future<void> close()
method _refreshState (line 42) | void _refreshState(PostedReply _reply)
method toggleCompleted (line 51) | Future<void> toggleCompleted()
method removeTodo (line 54) | Future<void> removeTodo(int id)
FILE: flutter/todo_cubit_wasm/lib/blocs/cubit/todo_state.dart
class TodoState (line 3) | @immutable
class ExistingTodo (line 17) | class ExistingTodo extends TodoState {
class MissingTodo (line 30) | class MissingTodo extends TodoState {
FILE: flutter/todo_cubit_wasm/lib/blocs/cubit/todos_cubit.dart
class TodosCubit (line 10) | class TodosCubit extends Cubit<TodosState> {
method _subscribe (line 18) | void _subscribe()
method close (line 29) | Future<void> close()
method _refreshList (line 34) | void _refreshList(PostedReply _reply)
method addTodo (line 40) | Future<void> addTodo(String title)
method restartAll (line 43) | Future<void> restartAll()
method completeAll (line 44) | Future<void> completeAll()
method removeCompleted (line 45) | Future<void> removeCompleted()
FILE: flutter/todo_cubit_wasm/lib/blocs/cubit/todos_state.dart
class TodosState (line 3) | @immutable
FILE: flutter/todo_cubit_wasm/lib/main.dart
function configRid (line 15) | void configRid()
function main (line 20) | void main()
class TodoApp (line 29) | class TodoApp extends StatelessWidget {
method build (line 31) | Widget build(BuildContext context)
class TodosPage (line 50) | class TodosPage extends StatefulWidget {
method createState (line 55) | _TodosPageState createState()
class _TodosPageState (line 58) | class _TodosPageState extends State<TodosPage> {
method build (line 63) | Widget build(BuildContext context)
method _addTodoDialog (line 144) | Future<void> _addTodoDialog(BuildContext context)
FILE: flutter/todo_cubit_wasm/lib/views/expiry.dart
function expiryColor (line 3) | Color expiryColor(double completedExpiryMillis, double remaining)
class ExpiryWidget (line 15) | class ExpiryWidget extends StatelessWidget {
method build (line 24) | Widget build(BuildContext context)
FILE: flutter/todo_cubit_wasm/lib/views/menu.dart
class Menu (line 7) | class Menu extends StatelessWidget {
method build (line 9) | Widget build(BuildContext context)
class AutoRemoveCompletedWidget (line 32) | class AutoRemoveCompletedWidget extends StatelessWidget {
method build (line 34) | Widget build(BuildContext context)
FILE: flutter/todo_cubit_wasm/lib/views/todo.dart
class TodoView (line 8) | class TodoView extends StatelessWidget {
method build (line 10) | Widget build(BuildContext context)
FILE: flutter/todo_cubit_wasm/lib/views/todos.dart
class TodosView (line 7) | class TodosView extends StatelessWidget {
method build (line 9) | Widget build(BuildContext context)
FILE: flutter/todo_cubit_wasm/plugin/lib/wasm/reply_channel.dart
class IReply (line 6) | abstract class IReply {
type Decode (line 11) | typedef Decode<TReply> = TReply Function(ReplyStruct reply);
class ReplyChannel (line 14) | class ReplyChannel<TReply extends IReply> {
method _pollReplies (line 29) | void _pollReplies()
method _onReceivedReply (line 46) | void _onReceivedReply(ReplyStruct reply)
method _add (line 50) | void _add(ReplyStruct reply)
method reply (line 57) | Future<TReply> reply(int reqId)
method dispose (line 81) | Future<void> dispose()
method instance (line 87) | ReplyChannel<TReply> instance<TReply extends IReply>(
FILE: flutter/todo_cubit_wasm/plugin/lib/wasm/utils.dart
function loadWasmFromNetwork (line 8) | Future<Uint8List> loadWasmFromNetwork(String wasmFile)
function loadWasmAsset (line 34) | Future<Uint8List> loadWasmAsset(String wasmAsset)
FILE: flutter/todo_cubit_wasm/rid_build.rs
function main (line 4) | fn main() {
FILE: flutter/todo_cubit_wasm/src/alloc.rs
function rid_malloc (line 11) | pub extern "C" fn rid_malloc(size: usize) -> *mut u8 {
function rid_realloc (line 30) | pub unsafe extern "C" fn rid_realloc(
function malloc_failure (line 48) | fn malloc_failure() -> ! {
function rid_free (line 53) | pub unsafe extern "C" fn rid_free(ptr: *mut u8, size: usize) {
FILE: flutter/todo_cubit_wasm/src/lib.rs
constant COMPLETED_EXPIRY_MILLIS (line 7) | const COMPLETED_EXPIRY_MILLIS: u64 = 7000;
type Store (line 16) | pub struct Store {
method create (line 24) | fn create() -> Self {
method update (line 60) | fn update(&mut self, req_id: u64, msg: Msg) {
method remove_todo (line 120) | fn remove_todo(&mut self, id: u32) {
method update_todo (line 129) | fn update_todo<F: FnOnce(&mut Todo)>(&mut self, id: u32, update: F) {
method filtered_todos (line 136) | fn filtered_todos(&self) -> Vec<&Todo> {
method filtered_todos_string (line 149) | fn filtered_todos_string(&self) -> String {
method todo_by_id (line 154) | fn todo_by_id(&self, id: u32) -> Option<&Todo> {
type Settings (line 164) | pub struct Settings {
type Todo (line 174) | pub struct Todo {
method set_completed (line 182) | fn set_completed(&mut self, completed: bool) {
method cmp (line 189) | fn cmp(&self, other: &Self) -> std::cmp::Ordering {
type Filter (line 199) | pub enum Filter {
type Msg (line 211) | pub enum Msg {
type Reply (line 230) | pub enum Reply {
FILE: flutter/todo_cubit_wasm/src/replies.rs
type RidRepliesAccess (line 10) | struct RidRepliesAccess {
method instance (line 15) | fn instance() -> &'static RidRepliesAccess {
function post (line 31) | pub fn post(reply: Reply) {
function replies_read (line 35) | pub fn replies_read() -> ::std::sync::RwLockReadGuard<'static, Vec<Reply...
function replies_write (line 39) | pub fn replies_write() -> ::std::sync::RwLockWriteGuard<'static, Vec<Rep...
function rid_poll_reply (line 44) | pub extern "C" fn rid_poll_reply() -> *const ReplyStruct {
function rid_handled_reply (line 49) | pub extern "C" fn rid_handled_reply(req_id: u64) {
type ReplyStruct (line 55) | pub struct ReplyStruct {
method with_req_id (line 62) | fn with_req_id(ty: u8, req_id: u64) -> Self {
method with_data (line 69) | fn with_data(ty: u8, req_id: u64, data: String) -> Self {
method from (line 75) | fn from(reply: Reply) -> Self {
Condensed preview — 631 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,142K chars).
[
{
"path": ".github/FUNDING.yml",
"chars": 19,
"preview": "github: [thlorenz]\n"
},
{
"path": ".gitignore",
"chars": 1730,
"preview": ".DS_Store\n.idea/\n.metadata\n\n## Flutter ###\n# Flutter/Dart/Pub related\n**/doc/api/\n.dart_tool/\n.flutter-plugins\n.flutter-"
},
{
"path": "README.md",
"chars": 1575,
"preview": "# rid-examples\n\nExamples showing how to use [**Rid**](https://thlorenz.com/rid-site/) in order to build Dart/Flutter app"
},
{
"path": "dart/todo/.gitignore",
"chars": 14,
"preview": "**/generated/\n"
},
{
"path": "dart/todo/Cargo.toml",
"chars": 556,
"preview": "[package]\nname = \"rid_dart_todo\"\nversion = \"0.1.0\"\nauthors = [\"Thorsten Lorenz <thlorenz@gmx.de>\"]\nedition = \"2018\"\n\n[li"
},
{
"path": "dart/todo/README.md",
"chars": 2190,
"preview": "# Rid Todo Example\n\nAn example todo app with user interaction implemented in Dart and app logic in Rust.\n\n## Getting Sta"
},
{
"path": "dart/todo/lib/main.dart",
"chars": 3186,
"preview": "import 'generated/rid_api.dart';\nimport 'dart:io';\n\nprintStatus(Store store) {\n final todos = store.todos;\n final tota"
},
{
"path": "dart/todo/pubspec.yaml",
"chars": 127,
"preview": "name: rid_dart_todo \nversion: 0.0.0\nenvironment:\n sdk: '>=2.13.0 <=3.0.0'\n\ndependencies: \n ffi: ^1.0.0\n ffigen: 4.0.0"
},
{
"path": "dart/todo/rid_build.rs",
"chars": 728,
"preview": "use rid_build::{build, BuildConfig, BuildTarget, Project};\nuse std::env;\n\nfn main() {\n let crate_dir = env::var(\"CARG"
},
{
"path": "dart/todo/sh/build",
"chars": 130,
"preview": "#!/usr/bin/env bash\n\nDIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" >/dev/null 2>&1 && pwd )\"\n\n(cd $DIR/.. && cargo run r"
},
{
"path": "dart/todo/sh/run",
"chars": 152,
"preview": "#!/usr/bin/env bash\n\ndart \\\n --enable-asserts \\\n --packages=.packages \\\n p"
},
{
"path": "dart/todo/src/app.rs",
"chars": 4999,
"preview": "#![allow(dead_code)]\n\nuse rid::RidStore;\nuse std::fmt::Display;\n\n// -----------------\n// Store\n// -----------------\n#[ri"
},
{
"path": "flutter/reddit_ticker/.gitignore",
"chars": 1785,
"preview": ".DS_Store\n.idea/\n.metadata\n\n## Flutter ###\n# Flutter/Dart/Pub related\n**/doc/api/\n.dart_tool/\n.flutter-plugins\n.flutter-"
},
{
"path": "flutter/reddit_ticker/Cargo.toml",
"chars": 537,
"preview": "[package]\nname = \"reddit_ticker\"\nversion = \"0.1.0\"\nauthors = [\"Thorsten Lorenz <thlorenz@gmx.de>\"]\nedition = \"2018\"\n\n[li"
},
{
"path": "flutter/reddit_ticker/README.md",
"chars": 2473,
"preview": "# reddit_ticker\n\nRust integrated Dart Flutter Project\n\n## Getting Started\n\nUse the below scripts to get the app ready to"
},
{
"path": "flutter/reddit_ticker/analysis_options.yaml",
"chars": 1453,
"preview": "# This file configures the analyzer, which statically analyzes Dart code to\n# check for errors, warnings, and lints.\n#\n#"
},
{
"path": "flutter/reddit_ticker/android/.gitignore",
"chars": 285,
"preview": "gradle-wrapper.jar\n/.gradle\n/captures/\n/gradlew\n/gradlew.bat\n/local.properties\nGeneratedPluginRegistrant.java\n\n# Remembe"
},
{
"path": "flutter/reddit_ticker/android/app/build.gradle",
"chars": 1899,
"preview": "def localProperties = new Properties()\ndef localPropertiesFile = rootProject.file('local.properties')\nif (localPropertie"
},
{
"path": "flutter/reddit_ticker/android/app/src/debug/AndroidManifest.xml",
"chars": 333,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"com.example.reddit_ticker\">\n <!-- F"
},
{
"path": "flutter/reddit_ticker/android/app/src/main/AndroidManifest.xml",
"chars": 1601,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"com.example.reddit_ticker\">\n <applic"
},
{
"path": "flutter/reddit_ticker/android/app/src/main/kotlin/com/example/reddit_ticker/MainActivity.kt",
"chars": 130,
"preview": "package com.example.reddit_ticker\n\nimport io.flutter.embedding.android.FlutterActivity\n\nclass MainActivity: FlutterActiv"
},
{
"path": "flutter/reddit_ticker/android/app/src/main/res/drawable/launch_background.xml",
"chars": 434,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Modify this file to customize your launch splash screen -->\n<layer-list xmln"
},
{
"path": "flutter/reddit_ticker/android/app/src/main/res/drawable-v21/launch_background.xml",
"chars": 438,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Modify this file to customize your launch splash screen -->\n<layer-list xmln"
},
{
"path": "flutter/reddit_ticker/android/app/src/main/res/values/styles.xml",
"chars": 994,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <!-- Theme applied to the Android Window while the process is sta"
},
{
"path": "flutter/reddit_ticker/android/app/src/main/res/values-night/styles.xml",
"chars": 993,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <!-- Theme applied to the Android Window while the process is sta"
},
{
"path": "flutter/reddit_ticker/android/app/src/profile/AndroidManifest.xml",
"chars": 333,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"com.example.reddit_ticker\">\n <!-- F"
},
{
"path": "flutter/reddit_ticker/android/build.gradle",
"chars": 576,
"preview": "buildscript {\n ext.kotlin_version = '1.3.50'\n repositories {\n google()\n mavenCentral()\n }\n\n de"
},
{
"path": "flutter/reddit_ticker/android/gradle/wrapper/gradle-wrapper.properties",
"chars": 231,
"preview": "#Fri Jun 23 08:50:38 CEST 2017\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER"
},
{
"path": "flutter/reddit_ticker/android/gradle.properties",
"chars": 82,
"preview": "org.gradle.jvmargs=-Xmx1536M\nandroid.useAndroidX=true\nandroid.enableJetifier=true\n"
},
{
"path": "flutter/reddit_ticker/android/reddit_ticker_android.iml",
"chars": 1601,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module type=\"JAVA_MODULE\" version=\"4\">\n <component name=\"FacetManager\">\n <fa"
},
{
"path": "flutter/reddit_ticker/android/settings.gradle",
"chars": 462,
"preview": "include ':app'\n\ndef localPropertiesFile = new File(rootProject.projectDir, \"local.properties\")\ndef properties = new Prop"
},
{
"path": "flutter/reddit_ticker/deps/charts/.gitignore",
"chars": 183,
"preview": ".dart_tool/\n.packages\npubspec.lock\n\n.bundle\n_site\n\nbuild/\n**/ios/.generated/\n**/ios/Flutter/Generated.xcconfig\n**/ios/Ru"
},
{
"path": "flutter/reddit_ticker/deps/charts/.travis.yml",
"chars": 899,
"preview": "matrix:\n include:\n # Job 1) Run tests\n - os: linux\n env:\n - SHARD=Tests\n sudo: false\n addon"
},
{
"path": "flutter/reddit_ticker/deps/charts/AUTHORS",
"chars": 189,
"preview": "# Below is a list of people and organizations that have contributed\n# to the Charts project. Names should be added to th"
},
{
"path": "flutter/reddit_ticker/deps/charts/CONTRIBUTING.md",
"chars": 154,
"preview": "This project is developed internally at Google and published for external\nconsumption, external contributions unfortunat"
},
{
"path": "flutter/reddit_ticker/deps/charts/LICENSE",
"chars": 11358,
"preview": "\n Apache License\n Version 2.0, January 2004\n "
},
{
"path": "flutter/reddit_ticker/deps/charts/README.md",
"chars": 1174,
"preview": "Charts is a general charting library, currently enabled for the\n[Flutter mobile UI framework](https://flutter.io).\n\nSee "
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/CHANGELOG.md",
"chars": 3031,
"preview": "# 0.11.0\n* Null support\n* Update to latest from internal repo\n\n# 0.10.0\n* Internal bug fixes\n* Bump versions of intl due"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/LICENSE",
"chars": 11358,
"preview": "\n Apache License\n Version 2.0, January 2004\n "
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/README.md",
"chars": 354,
"preview": "# Common Charting library\n\n[](https://pub.dartlang.org/pac"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/charts_common.gwsq",
"chars": 170,
"preview": "send_cls_to('dart-charts-team+reviews');\nsend_cls_to('dart-charts-team');\n\ndefine Main {\n reassign_to_list(from_owners_"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/common.dart",
"chars": 13492,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_chart.dart",
"chars": 1647,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_error_decorator.dart",
"chars": 8351,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_label_decorator.dart",
"chars": 16657,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_lane_renderer.dart",
"chars": 15244,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_lane_renderer_config.dart",
"chars": 3764,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_renderer.dart",
"chars": 20642,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_renderer_config.dart",
"chars": 3566,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_renderer_decorator.dart",
"chars": 1280,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_target_line_renderer.dart",
"chars": 16137,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/bar_target_line_renderer_config.dart",
"chars": 3216,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/base_bar_renderer.dart",
"chars": 31880,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/base_bar_renderer_config.dart",
"chars": 6425,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/bar/base_bar_renderer_element.dart",
"chars": 4306,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/axis.dart",
"chars": 22226,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/axis_tick.dart",
"chars": 3478,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/collision_report.dart",
"chars": 1211,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/draw_strategy/base_tick_draw_strategy.dart",
"chars": 24702,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/draw_strategy/gridline_draw_strategy.dart",
"chars": 7398,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/draw_strategy/none_draw_strategy.dart",
"chars": 4976,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/draw_strategy/range_tick_draw_strategy.dart",
"chars": 16271,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/draw_strategy/small_tick_draw_strategy.dart",
"chars": 7594,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/draw_strategy/tick_draw_strategy.dart",
"chars": 2723,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/end_points_tick_provider.dart",
"chars": 4203,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/linear/bucketing_numeric_axis.dart",
"chars": 2943,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/linear/bucketing_numeric_tick_provider.dart",
"chars": 5302,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/linear/linear_scale.dart",
"chars": 7805,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/linear/linear_scale_domain_info.dart",
"chars": 4039,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/linear/linear_scale_function.dart",
"chars": 7981,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/linear/linear_scale_viewport.dart",
"chars": 5385,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/numeric_extents.dart",
"chars": 3161,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/numeric_scale.dart",
"chars": 2349,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/numeric_tick_provider.dart",
"chars": 20919,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/ordinal_extents.dart",
"chars": 1572,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/ordinal_scale.dart",
"chars": 1859,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/ordinal_scale_domain_info.dart",
"chars": 2233,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/ordinal_tick_provider.dart",
"chars": 2062,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/range_axis_tick.dart",
"chars": 1374,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/range_tick.dart",
"chars": 1942,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/range_tick_provider.dart",
"chars": 5071,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/scale.dart",
"chars": 11616,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/simple_ordinal_scale.dart",
"chars": 10830,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/spec/axis_spec.dart",
"chars": 5856,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/spec/bucketing_axis_spec.dart",
"chars": 6418,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/spec/date_time_axis_spec.dart",
"chars": 13434,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/spec/end_points_time_axis_spec.dart",
"chars": 2776,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/spec/numeric_axis_spec.dart",
"chars": 9230,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/spec/ordinal_axis_spec.dart",
"chars": 7004,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/spec/percent_axis_spec.dart",
"chars": 2148,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/spec/range_tick_spec.dart",
"chars": 1548,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/spec/tick_spec.dart",
"chars": 1160,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/static_tick_provider.dart",
"chars": 3877,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/tick.dart",
"chars": 1490,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/tick_formatter.dart",
"chars": 3625,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/tick_provider.dart",
"chars": 3494,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/auto_adjusting_date_time_tick_provider.dart",
"chars": 7283,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/base_time_stepper.dart",
"chars": 4756,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/date_time_axis.dart",
"chars": 1745,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/date_time_extents.dart",
"chars": 1049,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/date_time_scale.dart",
"chars": 4280,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/date_time_tick_formatter.dart",
"chars": 7950,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/day_time_stepper.dart",
"chars": 3095,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/hour_tick_formatter.dart",
"chars": 1614,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/hour_time_stepper.dart",
"chars": 3036,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/minute_time_stepper.dart",
"chars": 2712,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/month_time_stepper.dart",
"chars": 2716,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/simple_time_tick_formatter.dart",
"chars": 1369,
"preview": "// Copyright 2019 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/time_range_tick_provider.dart",
"chars": 1230,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/time_range_tick_provider_impl.dart",
"chars": 4827,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/time_stepper.dart",
"chars": 2563,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/time_tick_formatter.dart",
"chars": 1148,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/time_tick_formatter_impl.dart",
"chars": 3133,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/axis/time/year_time_stepper.dart",
"chars": 2117,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/cartesian_chart.dart",
"chars": 18974,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/cartesian/cartesian_renderer.dart",
"chars": 9409,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/base_chart.dart",
"chars": 25610,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/a11y/a11y_explore_behavior.dart",
"chars": 3264,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/a11y/a11y_node.dart",
"chars": 1062,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/a11y/domain_a11y_explore_behavior.dart",
"chars": 6942,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/a11y/keyboard_domain_navigator.dart",
"chars": 9702,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/calculation/percent_injector.dart",
"chars": 8512,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/chart_behavior.dart",
"chars": 2120,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/chart_title/chart_title.dart",
"chars": 27632,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/domain_highlighter.dart",
"chars": 2811,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/domain_outliner.dart",
"chars": 3668,
"preview": "// Copyright 2019 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/initial_selection.dart",
"chars": 2552,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/legend/datum_legend.dart",
"chars": 4154,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/legend/legend.dart",
"chars": 13140,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/legend/legend_entry.dart",
"chars": 4672,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/legend/legend_entry_generator.dart",
"chars": 2581,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/legend/per_datum_legend_entry_generator.dart",
"chars": 5668,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/legend/per_series_legend_entry_generator.dart",
"chars": 7509,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/legend/series_legend.dart",
"chars": 7249,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/line_point_highlighter.dart",
"chars": 23764,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/range_annotation.dart",
"chars": 48503,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/selection/lock_selection.dart",
"chars": 4313,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/selection/select_nearest.dart",
"chars": 12756,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/selection/selection_trigger.dart",
"chars": 731,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/slider/slider.dart",
"chars": 29940,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/sliding_viewport.dart",
"chars": 2736,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/sunburst_ring_expander.dart",
"chars": 2066,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/zoom/initial_hint_behavior.dart",
"chars": 8789,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/zoom/pan_and_zoom_behavior.dart",
"chars": 3950,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/zoom/pan_behavior.dart",
"chars": 6927,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/behavior/zoom/panning_tick_provider.dart",
"chars": 3047,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/canvas_shapes.dart",
"chars": 3667,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/chart_canvas.dart",
"chars": 7097,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/chart_context.dart",
"chars": 2238,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/datum_details.dart",
"chars": 8497,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/processed_series.dart",
"chars": 9175,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/selection_model/selection_model.dart",
"chars": 9573,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/series_datum.dart",
"chars": 1932,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/series_renderer.dart",
"chars": 16004,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/series_renderer_config.dart",
"chars": 1455,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/unitconverter/identity_converter.dart",
"chars": 913,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/common/unitconverter/unit_converter.dart",
"chars": 1040,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/layout/layout_config.dart",
"chars": 4390,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/layout/layout_manager.dart",
"chars": 2714,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/layout/layout_manager_impl.dart",
"chars": 12382,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/layout/layout_margin_strategy.dart",
"chars": 8987,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/layout/layout_view.dart",
"chars": 8427,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/line/line_chart.dart",
"chars": 1647,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/line/line_renderer.dart",
"chars": 57943,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/line/line_renderer_config.dart",
"chars": 3230,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/pie/arc_label_decorator.dart",
"chars": 15598,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/pie/arc_renderer.dart",
"chars": 12507,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/pie/arc_renderer_config.dart",
"chars": 2005,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/pie/arc_renderer_decorator.dart",
"chars": 1352,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/pie/arc_renderer_element.dart",
"chars": 5057,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/pie/base_arc_renderer.dart",
"chars": 10571,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/pie/base_arc_renderer_config.dart",
"chars": 3095,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/pie/pie_chart.dart",
"chars": 3017,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/scatter_plot/comparison_points_decorator.dart",
"chars": 8411,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/scatter_plot/point_renderer.dart",
"chars": 32995,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/scatter_plot/point_renderer_config.dart",
"chars": 3159,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/scatter_plot/point_renderer_decorator.dart",
"chars": 1351,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/scatter_plot/scatter_plot_chart.dart",
"chars": 2798,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/scatter_plot/symbol_annotation_renderer.dart",
"chars": 8457,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/scatter_plot/symbol_annotation_renderer_config.dart",
"chars": 2971,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/sunburst/sunburst_arc_label_decorator.dart",
"chars": 5373,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/sunburst/sunburst_arc_renderer.dart",
"chars": 24144,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/sunburst/sunburst_arc_renderer_config.dart",
"chars": 4607,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/sunburst/sunburst_chart.dart",
"chars": 2388,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/time_series/time_series_chart.dart",
"chars": 2580,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/treemap/base_treemap_renderer.dart",
"chars": 17286,
"preview": "// Copyright 2019 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/treemap/dice_treemap_renderer.dart",
"chars": 1652,
"preview": "// Copyright 2019 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/treemap/slice_dice_treemap_renderer.dart",
"chars": 1737,
"preview": "// Copyright 2019 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/treemap/slice_treemap_renderer.dart",
"chars": 1656,
"preview": "// Copyright 2019 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/treemap/squarified_treemap_renderer.dart",
"chars": 4994,
"preview": "// Copyright 2019 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/treemap/treemap_chart.dart",
"chars": 2708,
"preview": "// Copyright 2019 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/treemap/treemap_label_decorator.dart",
"chars": 6770,
"preview": "// Copyright 2019 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/treemap/treemap_renderer_config.dart",
"chars": 3926,
"preview": "// Copyright 2019 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/treemap/treemap_renderer_decorator.dart",
"chars": 1365,
"preview": "// Copyright 2019 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/chart/treemap/treemap_renderer_element.dart",
"chars": 4434,
"preview": "// Copyright 2019 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/color.dart",
"chars": 3335,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/date_time_factory.dart",
"chars": 3156,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/gesture_listener.dart",
"chars": 4771,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/graphics_factory.dart",
"chars": 1049,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
},
{
"path": "flutter/reddit_ticker/deps/charts/charts_common/lib/src/common/line_style.dart",
"chars": 870,
"preview": "// Copyright 2018 the Charts project authors. Please see the AUTHORS file\n// for details.\n//\n// Licensed under the Apach"
}
]
// ... and 431 more files (download for full content)
About this extraction
This page contains the full source code of the thlorenz/rid-examples GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 631 files (1.9 MB), approximately 543.2k tokens, and a symbol index with 1938 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.