PlantUML 出现语法错误 (Flutter/Dart)

PlantUML Getting Syntax Error (Flutter/Dart)

在 PlantUML 上,我在 Flutter/Dart 上的 dcdg 生成的 class diagams 上遇到语法错误。第一个错误在第 66 行,如何解决? Planttext.com或plantuml-editor.kkeisuke.com可以用来显示uml.

@startuml
set namespaceSeparator ::

class "covid19stats::chartsData.dart::ChartsData" {
  +ChartData* total
  +ChartData* recovered
  +ChartData* deaths
  +ChartData* vaccine
}

"covid19stats::chartsData.dart::ChartsData" o-- "covid19stats::chartsData.dart::ChartData"

class "covid19stats::chartsData.dart::ChartData" {
  +bool* daily
  +bool* available
  +List<String*>* labels
  +List<int*>* values
  +List<Color*>* gradientColors
}

class "covid19stats::counter.dart::Counter" {
  +Animation<int*>* animation
  +TextStyle* textStyle
  +Widget* build()
}

"covid19stats::counter.dart::Counter" o-- "flutter::src::animation::animation.dart::Animation<int>"
"covid19stats::counter.dart::Counter" o-- "flutter::src::painting::text_style.dart::TextStyle"
"flutter::src::widgets::transitions.dart::AnimatedWidget" <|-- "covid19stats::counter.dart::Counter"

class "covid19stats::countryData.dart::CountryData" {
  +int* totalTests
  +int* testsPerMln
  +int* totalCases
  +double* casesPerMln
  +int* newCases
  +int* totalRecovered
  +int* newRecovered
  +int* activeCases
  +int* totalDeaths
  +double* deathsPerMln
  +int* criticalCases
  +int* newDeaths
  +String* link
  +int* vacTotal
  +int* vacDaily
  +int* vactotalPerHundred
  +int* vacdailyPerMillion
}

class "covid19stats::countryDataVac.dart::CountryDataVac" {
  +int* vacTotal
  +int* vacDaily
  +int* vactotalPerHundred
  +int* vacdailyPerMillion
  +String* date
  +Map<String*, dynamic>* toJson()
}

class "covid19stats::dateRangeDialog.dart::DateRangeDialog" {
  +DateTimeRange* availableRange
  +DateTimeRange* currentRange
  +_DateRangeDialogState* createState()
}

"covid19stats::dateRangeDialog.dart::DateRangeDialog" o-- "flutter::src::material::date.dart::DateTimeR
ange"
"flutter::src::widgets::framework.dart::StatefulWidget" <|-- "covid19stats::dateRangeDialog.dart::DateR
angeDialog"

class "covid19stats::dateRangeDialog.dart::_DateRangeDialogState" {
  +TextEditingController* fromController
  +TextEditingController* toController
  +DateFormat* dateFormat
  +DateTimeRange* selectedRange
  +int* selectedOption
  +DateTimeRange* preset7
  +DateTimeRange* preset28
  +void initState()
  +Widget* build()
  +void checkForPresets()
}

"covid19stats::dateRangeDialog.dart::_DateRangeDialogState" o-- "flutter::src::widgets::editable_text.d
art::TextEditingController"
"covid19stats::dateRangeDialog.dart::_DateRangeDialogState" o-- "intl::intl.dart::DateFormat"
"covid19stats::dateRangeDialog.dart::_DateRangeDialogState" o-- "flutter::src::material::date.dart::Dat
eTimeRange"
"flutter::src::widgets::framework.dart::State" <|-- "covid19stats::dateRangeDialog.dart::_DateRangeDial
ogState"

class "covid19stats::main.dart::MyApp" {
  +Widget* build()
}

"flutter::src::widgets::framework.dart::StatelessWidget" <|-- "covid19stats::main.dart::MyApp"

class "covid19stats::main.dart::MyHomePage" {
  +_MyHomePageState* createState()
}

"flutter::src::widgets::framework.dart::StatefulWidget" <|-- "covid19stats::main.dart::MyHomePage"

class "covid19stats::main.dart::_MyHomePageState" {
  -GlobalKey<State<StatefulWidget*>*>* _refreshIndicatorKey
  -GlobalKey<ScaffoldState*>* _scaffoldKey
  +Map<String*, CountryData*>* countryData
  +Map<String*, CountryDataVac*>* countryDataVac
  +Map<String*, ChartsData*>* chartsData
  +Map<String*, ChartsData*>* chartsDataVac
  +String* country
  +bool* justStarted
  +int* springAnimationDuration
  -AnimationController* _controller
  +ThemeData* datePickerTheme
  +DateTimeRange* selectedDateRange
  +Settings* settings
  +void initState()
  -void _triggerLiquidPullRefresh()
  +Future<void>* refreshData()
  +void dispose()
  +Widget* build()
  +dynamic navigateToSelection()
  +Future<void>* showDateDialog()
  +Future<void>* showSettingsDialog()
  +void checkRangeSetting()
  +Widget* createGraph()
}

"covid19stats::main.dart::_MyHomePageState" o-- "flutter::src::widgets::framework.dart::GlobalKey<State
<StatefulWidget>>"
"covid19stats::main.dart::_MyHomePageState" o-- "flutter::src::widgets::framework.dart::GlobalKey<Scaff
oldState>"
"covid19stats::main.dart::_MyHomePageState" o-- "flutter::src::animation::animation_controller.dart::An
imationController"
"covid19stats::main.dart::_MyHomePageState" o-- "flutter::src::material::theme_data.dart::ThemeData"
"covid19stats::main.dart::_MyHomePageState" o-- "flutter::src::material::date.dart::DateTimeRange"
"covid19stats::main.dart::_MyHomePageState" o-- "covid19stats::settingsDialog.dart::Settings"
"flutter::src::widgets::framework.dart::State" <|-- "covid19stats::main.dart::_MyHomePageState"
"flutter::src::widgets::ticker_provider.dart::TickerProviderStateMixin" <|-- "covid19stats::main.dart::
_MyHomePageState"

class "covid19stats::parser.dart::Parser" {
  {static} +CountryData* parseRow()
  {static} +CountryDataVac* parseRowVac()
  {static} +int* parseInteger()
  {static} +double* parseDouble()
  {static} +String* getInnerString()
  {static} +String* normalizeName()
  {static} +Map<String*, CountryData*>* getCountryData()
  {static} +String* capitalize()
  {static} +Map<String*, CountryDataVac*>* getCountryDataVac()
  {static} +List<String*>* getCategories()
  {static} +List<int*>* getDataPoints()
  {static} +List<String*>* getVacDates()
  {static} +List<int*>* getVacDataPoints()
  {static} +ChartsData* getChartsData()
}

class "covid19stats::selectCountry.dart::SelectionScreen" {
  +List<dynamic>* countries
  +String* selectedCountry
  +_SelectionScreenState* createState()
}

"flutter::src::widgets::framework.dart::StatefulWidget" <|-- "covid19stats::selectCountry.dart::Selecti
onScreen"

class "covid19stats::selectCountry.dart::_SelectionScreenState" {
  +ScrollController* scrollController
  +GlobalKey<State<StatefulWidget*>*>* key
  +Map<String*, String*>* countryFlags
  -TextEditingController* _controller
  +FocusNode* textFieldFocusNode
  +bool* searchFieldVisible
  +List<dynamic>* filteredCountries
  +bool* newSearch
  +void initState()
  +void dispose()
  +void toggleSearchField()
  +Widget* build()
  +Widget* getListTile()
}

"covid19stats::selectCountry.dart::_SelectionScreenState" o-- "flutter::src::widgets::scroll_controller
.dart::ScrollController"
"covid19stats::selectCountry.dart::_SelectionScreenState" o-- "flutter::src::widgets::framework.dart::G
lobalKey<State<StatefulWidget>>"
"covid19stats::selectCountry.dart::_SelectionScreenState" o-- "flutter::src::widgets::editable_text.dar
t::TextEditingController"
"covid19stats::selectCountry.dart::_SelectionScreenState" o-- "flutter::src::widgets::focus_manager.dar
t::FocusNode"
"flutter::src::widgets::framework.dart::State" <|-- "covid19stats::selectCountry.dart::_SelectionScreen
State"

class "covid19stats::settingsDialog.dart::Settings" {
  +bool* defaultDailyView
  +bool* alwaysLoadCharts
  +int* rangeSetting
  +bool* loaded
  +Future<void>* load()
  +Future<bool*>* save()
  +Settings* clone()
  +dynamic []()
}

class "covid19stats::settingsDialog.dart::SettingsDialog" {
  +Settings* settings
  +_SettingsDialogState* createState()
}

"covid19stats::settingsDialog.dart::SettingsDialog" o-- "covid19stats::settingsDialog.dart::Settings"
"flutter::src::widgets::framework.dart::StatefulWidget" <|-- "covid19stats::settingsDialog.dart::Settin
gsDialog"

class "covid19stats::settingsDialog.dart::_SettingsDialogState" {
  +Settings* newSettings
  +void initState()
  +Widget* build()
  +Row* getSwitchRow()
}

"covid19stats::settingsDialog.dart::_SettingsDialogState" o-- "covid19stats::settingsDialog.dart::Setti
ngs"
"flutter::src::widgets::framework.dart::State" <|-- "covid19stats::settingsDialog.dart::_SettingsDialog
State"

class "covid19stats::vaccineCountry.dart::VaccineCountry" {
  +String* country
  +List<Timeline*>* timeline
  +Map<String*, dynamic>* toJson()
}

class "covid19stats::vaccineCountry.dart::Timeline" {
  +int* total
  +int* daily
  +int* totalPerHundred
  +int* dailyPerMillion
  +String* date
  +Map<String*, dynamic>* toJson()
}

class "covid19stats::vaccineData.dart::VaccineData" {
  +int* total
  +int* daily
  +double* totalPerHundred
  +double* dailyPerMillion
  +String* link
}


@enduml

第一个错误:

‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏ ‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏ ‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏ ‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏ ‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏ ‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏ ‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏ ‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏ ‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏ ‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏ ‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏ ‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏ ‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏ ‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏ ‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎

看起来这个问题是由于一些字符串被分成多行(复制/过去错误或某些自动编辑器设置为每行 80(?)个字符)引起的,即像这样的行:

"covid19stats::dateRangeDialog.dart::DateRangeDialog" o-- "flutter::src::material::date.dart::DateTimeR
ange"
"flutter::src::widgets::framework.dart::StatefulWidget" <|-- "covid19stats::dateRangeDialog.dart::DateR
angeDialog"

将此完全更正为:

@startuml
set namespaceSeparator ::

class "covid19stats::chartsData.dart::ChartsData" {
  +ChartData* total
  +ChartData* recovered
  +ChartData* deaths
  +ChartData* vaccine
}

"covid19stats::chartsData.dart::ChartsData" o-- "covid19stats::chartsData.dart::ChartData"

class "covid19stats::chartsData.dart::ChartData" {
  +bool* daily
  +bool* available
  +List<String*>* labels
  +List<int*>* values
  +List<Color*>* gradientColors
}

class "covid19stats::counter.dart::Counter" {
  +Animation<int*>* animation
  +TextStyle* textStyle
  +Widget* build()
}

"covid19stats::counter.dart::Counter" o-- "flutter::src::animation::animation.dart::Animation<int>"
"covid19stats::counter.dart::Counter" o-- "flutter::src::painting::text_style.dart::TextStyle"
"flutter::src::widgets::transitions.dart::AnimatedWidget" <|-- "covid19stats::counter.dart::Counter"

class "covid19stats::countryData.dart::CountryData" {
  +int* totalTests
  +int* testsPerMln
  +int* totalCases
  +double* casesPerMln
  +int* newCases
  +int* totalRecovered
  +int* newRecovered
  +int* activeCases
  +int* totalDeaths
  +double* deathsPerMln
  +int* criticalCases
  +int* newDeaths
  +String* link
  +int* vacTotal
  +int* vacDaily
  +int* vactotalPerHundred
  +int* vacdailyPerMillion
}

class "covid19stats::countryDataVac.dart::CountryDataVac" {
  +int* vacTotal
  +int* vacDaily
  +int* vactotalPerHundred
  +int* vacdailyPerMillion
  +String* date
  +Map<String*, dynamic>* toJson()
}

class "covid19stats::dateRangeDialog.dart::DateRangeDialog" {
  +DateTimeRange* availableRange
  +DateTimeRange* currentRange
  +_DateRangeDialogState* createState()
}

"covid19stats::dateRangeDialog.dart::DateRangeDialog" o-- "flutter::src::material::date.dart::DateTimeRange"
"flutter::src::widgets::framework.dart::StatefulWidget" <|-- "covid19stats::dateRangeDialog.dart::DateRangeDialog"

class "covid19stats::dateRangeDialog.dart::_DateRangeDialogState" {
  +TextEditingController* fromController
  +TextEditingController* toController
  +DateFormat* dateFormat
  +DateTimeRange* selectedRange
  +int* selectedOption
  +DateTimeRange* preset7
  +DateTimeRange* preset28
  +void initState()
  +Widget* build()
  +void checkForPresets()
}

"covid19stats::dateRangeDialog.dart::_DateRangeDialogState" o-- "flutter::src::widgets::editable_text.dart::TextEditingController"
"covid19stats::dateRangeDialog.dart::_DateRangeDialogState" o-- "intl::intl.dart::DateFormat"
"covid19stats::dateRangeDialog.dart::_DateRangeDialogState" o-- "flutter::src::material::date.dart::DateTimeRange"
"flutter::src::widgets::framework.dart::State" <|-- "covid19stats::dateRangeDialog.dart::_DateRangeDialogState"

class "covid19stats::main.dart::MyApp" {
  +Widget* build()
}

"flutter::src::widgets::framework.dart::StatelessWidget" <|-- "covid19stats::main.dart::MyApp"

class "covid19stats::main.dart::MyHomePage" {
  +_MyHomePageState* createState()
}

"flutter::src::widgets::framework.dart::StatefulWidget" <|-- "covid19stats::main.dart::MyHomePage"

class "covid19stats::main.dart::_MyHomePageState" {
  -GlobalKey<State<StatefulWidget*>*>* _refreshIndicatorKey
  -GlobalKey<ScaffoldState*>* _scaffoldKey
  +Map<String*, CountryData*>* countryData
  +Map<String*, CountryDataVac*>* countryDataVac
  +Map<String*, ChartsData*>* chartsData
  +Map<String*, ChartsData*>* chartsDataVac
  +String* country
  +bool* justStarted
  +int* springAnimationDuration
  -AnimationController* _controller
  +ThemeData* datePickerTheme
  +DateTimeRange* selectedDateRange
  +Settings* settings
  +void initState()
  -void _triggerLiquidPullRefresh()
  +Future<void>* refreshData()
  +void dispose()
  +Widget* build()
  +dynamic navigateToSelection()
  +Future<void>* showDateDialog()
  +Future<void>* showSettingsDialog()
  +void checkRangeSetting()
  +Widget* createGraph()
}

"covid19stats::main.dart::_MyHomePageState" o-- "flutter::src::widgets::framework.dart::GlobalKey<State<StatefulWidget>>"
"covid19stats::main.dart::_MyHomePageState" o-- "flutter::src::widgets::framework.dart::GlobalKey<ScaffoldState>"
"covid19stats::main.dart::_MyHomePageState" o-- "flutter::src::animation::animation_controller.dart::AnimationController"
"covid19stats::main.dart::_MyHomePageState" o-- "flutter::src::material::theme_data.dart::ThemeData"
"covid19stats::main.dart::_MyHomePageState" o-- "flutter::src::material::date.dart::DateTimeRange"
"covid19stats::main.dart::_MyHomePageState" o-- "covid19stats::settingsDialog.dart::Settings"
"flutter::src::widgets::framework.dart::State" <|-- "covid19stats::main.dart::_MyHomePageState"
"flutter::src::widgets::ticker_provider.dart::TickerProviderStateMixin" <|-- "covid19stats::main.dart::_MyHomePageState"

class "covid19stats::parser.dart::Parser" {
  {static} +CountryData* parseRow()
  {static} +CountryDataVac* parseRowVac()
  {static} +int* parseInteger()
  {static} +double* parseDouble()
  {static} +String* getInnerString()
  {static} +String* normalizeName()
  {static} +Map<String*, CountryData*>* getCountryData()
  {static} +String* capitalize()
  {static} +Map<String*, CountryDataVac*>* getCountryDataVac()
  {static} +List<String*>* getCategories()
  {static} +List<int*>* getDataPoints()
  {static} +List<String*>* getVacDates()
  {static} +List<int*>* getVacDataPoints()
  {static} +ChartsData* getChartsData()
}

class "covid19stats::selectCountry.dart::SelectionScreen" {
  +List<dynamic>* countries
  +String* selectedCountry
  +_SelectionScreenState* createState()
}

"flutter::src::widgets::framework.dart::StatefulWidget" <|-- "covid19stats::selectCountry.dart::SelectionScreen"

class "covid19stats::selectCountry.dart::_SelectionScreenState" {
  +ScrollController* scrollController
  +GlobalKey<State<StatefulWidget*>*>* key
  +Map<String*, String*>* countryFlags
  -TextEditingController* _controller
  +FocusNode* textFieldFocusNode
  +bool* searchFieldVisible
  +List<dynamic>* filteredCountries
  +bool* newSearch
  +void initState()
  +void dispose()
  +void toggleSearchField()
  +Widget* build()
  +Widget* getListTile()
}

"covid19stats::selectCountry.dart::_SelectionScreenState" o-- "flutter::src::widgets::scroll_controller.dart::ScrollController"
"covid19stats::selectCountry.dart::_SelectionScreenState" o-- "flutter::src::widgets::framework.dart::GlobalKey<State<StatefulWidget>>"
"covid19stats::selectCountry.dart::_SelectionScreenState" o-- "flutter::src::widgets::editable_text.dart::TextEditingController"
"covid19stats::selectCountry.dart::_SelectionScreenState" o-- "flutter::src::widgets::focus_manager.dart::FocusNode"
"flutter::src::widgets::framework.dart::State" <|-- "covid19stats::selectCountry.dart::_SelectionScreenState"

class "covid19stats::settingsDialog.dart::Settings" {
  +bool* defaultDailyView
  +bool* alwaysLoadCharts
  +int* rangeSetting
  +bool* loaded
  +Future<void>* load()
  +Future<bool*>* save()
  +Settings* clone()
  +dynamic []()
}

class "covid19stats::settingsDialog.dart::SettingsDialog" {
  +Settings* settings
  +_SettingsDialogState* createState()
}

"covid19stats::settingsDialog.dart::SettingsDialog" o-- "covid19stats::settingsDialog.dart::Settings"
"flutter::src::widgets::framework.dart::StatefulWidget" <|-- "covid19stats::settingsDialog.dart::SettingsDialog"

class "covid19stats::settingsDialog.dart::_SettingsDialogState" {
  +Settings* newSettings
  +void initState()
  +Widget* build()
  +Row* getSwitchRow()
}

"covid19stats::settingsDialog.dart::_SettingsDialogState" o-- "covid19stats::settingsDialog.dart::Settings"
"flutter::src::widgets::framework.dart::State" <|-- "covid19stats::settingsDialog.dart::_SettingsDialogState"

class "covid19stats::vaccineCountry.dart::VaccineCountry" {
  +String* country
  +List<Timeline*>* timeline
  +Map<String*, dynamic>* toJson()
}

class "covid19stats::vaccineCountry.dart::Timeline" {
  +int* total
  +int* daily
  +int* totalPerHundred
  +int* dailyPerMillion
  +String* date
  +Map<String*, dynamic>* toJson()
}

class "covid19stats::vaccineData.dart::VaccineData" {
  +int* total
  +int* daily
  +double* totalPerHundred
  +double* dailyPerMillion
  +String* link
}
@enduml

一切都按预期工作,另请参阅此 plantUML diagram