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
在 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