27 changed files with 865 additions and 11 deletions
@ -0,0 +1,13 @@
|
||||
/* |
||||
* Copyright (c) 2023. Open Mobile Platform LLC. |
||||
* License: Proprietary. |
||||
*/ |
||||
import 'package:flutter/widgets.dart'; |
||||
import 'package:scoped_model/scoped_model.dart'; |
||||
|
||||
/// Model for [DartzPage] |
||||
class DartzModel extends Model { |
||||
/// Get [ScopedModel] |
||||
static DartzModel of(BuildContext context) => |
||||
ScopedModel.of<DartzModel>(context); |
||||
} |
@ -0,0 +1,26 @@
|
||||
/* |
||||
* Copyright (c) 2023. Open Mobile Platform LLC. |
||||
* License: Proprietary. |
||||
*/ |
||||
import 'package:flutter_example_packages/base/package/package_page.dart'; |
||||
import 'package:get_it/get_it.dart'; |
||||
|
||||
import 'model.dart'; |
||||
import 'page.dart'; |
||||
|
||||
/// Package values |
||||
final packageDartz = PackagePage( |
||||
key: 'dartz', |
||||
descEN: ''' |
||||
Functional programming in Dart. |
||||
''', |
||||
descRU: ''' |
||||
Функциональное программирование в Dart. |
||||
''', |
||||
version: '0.10.1', |
||||
isPlatformDependent: false, |
||||
page: () => DartzPage(), |
||||
init: () { |
||||
GetIt.instance.registerFactory<DartzModel>(() => DartzModel()); |
||||
}, |
||||
); |
@ -0,0 +1,52 @@
|
||||
/* |
||||
* Copyright (c) 2023. Open Mobile Platform LLC. |
||||
* License: Proprietary. |
||||
*/ |
||||
import 'package:flutter/material.dart'; |
||||
import 'package:flutter_example_packages/base/di/app_di.dart'; |
||||
import 'package:flutter_example_packages/base/package/package.dart'; |
||||
import 'package:flutter_example_packages/widgets/base/export.dart'; |
||||
import 'package:flutter_example_packages/widgets/blocks/block_info_package.dart'; |
||||
import 'package:flutter_example_packages/widgets/layouts/block_layout.dart'; |
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; |
||||
|
||||
import 'model.dart'; |
||||
import 'package.dart'; |
||||
|
||||
class DartzPage extends AppStatefulWidget { |
||||
DartzPage({ |
||||
super.key, |
||||
}); |
||||
|
||||
final Package package = packageDartz; |
||||
|
||||
@override |
||||
State<DartzPage> createState() => _DartzPageState(); |
||||
} |
||||
|
||||
class _DartzPageState extends AppState<DartzPage> { |
||||
@override |
||||
Widget buildWide( |
||||
BuildContext context, |
||||
MediaQueryData media, |
||||
AppLocalizations l10n, |
||||
) { |
||||
return BlockLayout<DartzModel>( |
||||
model: getIt<DartzModel>(), |
||||
title: widget.package.key, |
||||
builder: (context, child, model) { |
||||
return SingleChildScrollView( |
||||
child: Padding( |
||||
padding: const EdgeInsets.all(20), |
||||
child: Column( |
||||
crossAxisAlignment: CrossAxisAlignment.start, |
||||
children: [ |
||||
BlockInfoPackage(widget.package), |
||||
], |
||||
), |
||||
), |
||||
); |
||||
}, |
||||
); |
||||
} |
||||
} |
@ -0,0 +1,13 @@
|
||||
/* |
||||
* Copyright (c) 2023. Open Mobile Platform LLC. |
||||
* License: Proprietary. |
||||
*/ |
||||
import 'package:flutter/widgets.dart'; |
||||
import 'package:scoped_model/scoped_model.dart'; |
||||
|
||||
/// Model for [EquatablePage] |
||||
class EquatableModel extends Model { |
||||
/// Get [ScopedModel] |
||||
static EquatableModel of(BuildContext context) => |
||||
ScopedModel.of<EquatableModel>(context); |
||||
} |
@ -0,0 +1,28 @@
|
||||
/* |
||||
* Copyright (c) 2023. Open Mobile Platform LLC. |
||||
* License: Proprietary. |
||||
*/ |
||||
import 'package:flutter_example_packages/base/package/package_page.dart'; |
||||
import 'package:get_it/get_it.dart'; |
||||
|
||||
import 'model.dart'; |
||||
import 'page.dart'; |
||||
|
||||
/// Package values |
||||
final packageEquatable = PackagePage( |
||||
key: 'equatable', |
||||
descEN: ''' |
||||
Being able to compare objects in Dart often involves having to override |
||||
the == operator as well as hashCode. |
||||
''', |
||||
descRU: ''' |
||||
Возможность сравнивать объекты в Dart часто требует переопределения |
||||
оператора ==, а также hashCode. |
||||
''', |
||||
version: '2.0.5', |
||||
isPlatformDependent: false, |
||||
page: () => EquatablePage(), |
||||
init: () { |
||||
GetIt.instance.registerFactory<EquatableModel>(() => EquatableModel()); |
||||
}, |
||||
); |
@ -0,0 +1,52 @@
|
||||
/* |
||||
* Copyright (c) 2023. Open Mobile Platform LLC. |
||||
* License: Proprietary. |
||||
*/ |
||||
import 'package:flutter/material.dart'; |
||||
import 'package:flutter_example_packages/base/di/app_di.dart'; |
||||
import 'package:flutter_example_packages/base/package/package.dart'; |
||||
import 'package:flutter_example_packages/widgets/base/export.dart'; |
||||
import 'package:flutter_example_packages/widgets/blocks/block_info_package.dart'; |
||||
import 'package:flutter_example_packages/widgets/layouts/block_layout.dart'; |
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; |
||||
|
||||
import 'model.dart'; |
||||
import 'package.dart'; |
||||
|
||||
class EquatablePage extends AppStatefulWidget { |
||||
EquatablePage({ |
||||
super.key, |
||||
}); |
||||
|
||||
final Package package = packageEquatable; |
||||
|
||||
@override |
||||
State<EquatablePage> createState() => _EquatablePageState(); |
||||
} |
||||
|
||||
class _EquatablePageState extends AppState<EquatablePage> { |
||||
@override |
||||
Widget buildWide( |
||||
BuildContext context, |
||||
MediaQueryData media, |
||||
AppLocalizations l10n, |
||||
) { |
||||
return BlockLayout<EquatableModel>( |
||||
model: getIt<EquatableModel>(), |
||||
title: widget.package.key, |
||||
builder: (context, child, model) { |
||||
return SingleChildScrollView( |
||||
child: Padding( |
||||
padding: const EdgeInsets.all(20), |
||||
child: Column( |
||||
crossAxisAlignment: CrossAxisAlignment.start, |
||||
children: [ |
||||
BlockInfoPackage(widget.package), |
||||
], |
||||
), |
||||
), |
||||
); |
||||
}, |
||||
); |
||||
} |
||||
} |
@ -0,0 +1,13 @@
|
||||
/* |
||||
* Copyright (c) 2023. Open Mobile Platform LLC. |
||||
* License: Proprietary. |
||||
*/ |
||||
import 'package:flutter/widgets.dart'; |
||||
import 'package:scoped_model/scoped_model.dart'; |
||||
|
||||
/// Model for [FlutterMarkdownPage] |
||||
class FlutterMarkdownModel extends Model { |
||||
/// Get [ScopedModel] |
||||
static FlutterMarkdownModel of(BuildContext context) => |
||||
ScopedModel.of<FlutterMarkdownModel>(context); |
||||
} |
@ -0,0 +1,29 @@
|
||||
/* |
||||
* Copyright (c) 2023. Open Mobile Platform LLC. |
||||
* License: Proprietary. |
||||
*/ |
||||
import 'package:flutter_example_packages/base/package/package_page.dart'; |
||||
import 'package:get_it/get_it.dart'; |
||||
|
||||
import 'model.dart'; |
||||
import 'page.dart'; |
||||
|
||||
/// Package values |
||||
final packageFlutterMarkdown = PackagePage( |
||||
key: 'flutter_markdown', |
||||
descEN: ''' |
||||
A markdown renderer for Flutter. It supports the original format, |
||||
but no inline HTML. |
||||
''', |
||||
descRU: ''' |
||||
Рендерер уценки для Flutter. Он поддерживает исходный формат, |
||||
но не поддерживает встроенный HTML. |
||||
''', |
||||
version: '0.6.15', |
||||
isPlatformDependent: false, |
||||
page: () => FlutterMarkdownPage(), |
||||
init: () { |
||||
GetIt.instance |
||||
.registerFactory<FlutterMarkdownModel>(() => FlutterMarkdownModel()); |
||||
}, |
||||
); |
@ -0,0 +1,52 @@
|
||||
/* |
||||
* Copyright (c) 2023. Open Mobile Platform LLC. |
||||
* License: Proprietary. |
||||
*/ |
||||
import 'package:flutter/material.dart'; |
||||
import 'package:flutter_example_packages/base/di/app_di.dart'; |
||||
import 'package:flutter_example_packages/base/package/package.dart'; |
||||
import 'package:flutter_example_packages/widgets/base/export.dart'; |
||||
import 'package:flutter_example_packages/widgets/blocks/block_info_package.dart'; |
||||
import 'package:flutter_example_packages/widgets/layouts/block_layout.dart'; |
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; |
||||
|
||||
import 'model.dart'; |
||||
import 'package.dart'; |
||||
|
||||
class FlutterMarkdownPage extends AppStatefulWidget { |
||||
FlutterMarkdownPage({ |
||||
super.key, |
||||
}); |
||||
|
||||
final Package package = packageFlutterMarkdown; |
||||
|
||||
@override |
||||
State<FlutterMarkdownPage> createState() => _FlutterMarkdownPageState(); |
||||
} |
||||
|
||||
class _FlutterMarkdownPageState extends AppState<FlutterMarkdownPage> { |
||||
@override |
||||
Widget buildWide( |
||||
BuildContext context, |
||||
MediaQueryData media, |
||||
AppLocalizations l10n, |
||||
) { |
||||
return BlockLayout<FlutterMarkdownModel>( |
||||
model: getIt<FlutterMarkdownModel>(), |
||||
title: widget.package.key, |
||||
builder: (context, child, model) { |
||||
return SingleChildScrollView( |
||||
child: Padding( |
||||
padding: const EdgeInsets.all(20), |
||||
child: Column( |
||||
crossAxisAlignment: CrossAxisAlignment.start, |
||||
children: [ |
||||
BlockInfoPackage(widget.package), |
||||
], |
||||
), |
||||
), |
||||
); |
||||
}, |
||||
); |
||||
} |
||||
} |
@ -0,0 +1,13 @@
|
||||
/* |
||||
* Copyright (c) 2023. Open Mobile Platform LLC. |
||||
* License: Proprietary. |
||||
*/ |
||||
import 'package:flutter/widgets.dart'; |
||||
import 'package:scoped_model/scoped_model.dart'; |
||||
|
||||
/// Model for [FreezedPage] |
||||
class FreezedModel extends Model { |
||||
/// Get [ScopedModel] |
||||
static FreezedModel of(BuildContext context) => |
||||
ScopedModel.of<FreezedModel>(context); |
||||
} |
@ -0,0 +1,27 @@
|
||||
/* |
||||
* Copyright (c) 2023. Open Mobile Platform LLC. |
||||
* License: Proprietary. |
||||
*/ |
||||
import 'package:flutter_example_packages/base/package/package_page.dart'; |
||||
import 'package:get_it/get_it.dart'; |
||||
|
||||
import 'model.dart'; |
||||
import 'page.dart'; |
||||
|
||||
/// Package values |
||||
final packageFreezed = PackagePage( |
||||
key: 'freezed', |
||||
descEN: ''' |
||||
Code generator for data-classes/unions/pattern-matching/cloning. |
||||
''', |
||||
descRU: ''' |
||||
Генератор кода для классов данных/объединений/сопоставления |
||||
с образцом/клонирования. |
||||
''', |
||||
version: '2.3.3', |
||||
isPlatformDependent: false, |
||||
page: () => FreezedPage(), |
||||
init: () { |
||||
GetIt.instance.registerFactory<FreezedModel>(() => FreezedModel()); |
||||
}, |
||||
); |
@ -0,0 +1,52 @@
|
||||
/* |
||||
* Copyright (c) 2023. Open Mobile Platform LLC. |
||||
* License: Proprietary. |
||||
*/ |
||||
import 'package:flutter/material.dart'; |
||||
import 'package:flutter_example_packages/base/di/app_di.dart'; |
||||
import 'package:flutter_example_packages/base/package/package.dart'; |
||||
import 'package:flutter_example_packages/widgets/base/export.dart'; |
||||
import 'package:flutter_example_packages/widgets/blocks/block_info_package.dart'; |
||||
import 'package:flutter_example_packages/widgets/layouts/block_layout.dart'; |
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; |
||||
|
||||
import 'model.dart'; |
||||
import 'package.dart'; |
||||
|
||||
class FreezedPage extends AppStatefulWidget { |
||||
FreezedPage({ |
||||
super.key, |
||||
}); |
||||
|
||||
final Package package = packageFreezed; |
||||
|
||||
@override |
||||
State<FreezedPage> createState() => _FreezedPageState(); |
||||
} |
||||
|
||||
class _FreezedPageState extends AppState<FreezedPage> { |
||||
@override |
||||
Widget buildWide( |
||||
BuildContext context, |
||||
MediaQueryData media, |
||||
AppLocalizations l10n, |
||||
) { |
||||
return BlockLayout<FreezedModel>( |
||||
model: getIt<FreezedModel>(), |
||||
title: widget.package.key, |
||||
builder: (context, child, model) { |
||||
return SingleChildScrollView( |
||||
child: Padding( |
||||
padding: const EdgeInsets.all(20), |
||||
child: Column( |
||||
crossAxisAlignment: CrossAxisAlignment.start, |
||||
children: [ |
||||
BlockInfoPackage(widget.package), |
||||
], |
||||
), |
||||
), |
||||
); |
||||
}, |
||||
); |
||||
} |
||||
} |
@ -0,0 +1,13 @@
|
||||
/* |
||||
* Copyright (c) 2023. Open Mobile Platform LLC. |
||||
* License: Proprietary. |
||||
*/ |
||||
import 'package:flutter/widgets.dart'; |
||||
import 'package:scoped_model/scoped_model.dart'; |
||||
|
||||
/// Model for [ProviderPage] |
||||
class ProviderModel extends Model { |
||||
/// Get [ScopedModel] |
||||
static ProviderModel of(BuildContext context) => |
||||
ScopedModel.of<ProviderModel>(context); |
||||
} |
@ -0,0 +1,28 @@
|
||||
/* |
||||
* Copyright (c) 2023. Open Mobile Platform LLC. |
||||
* License: Proprietary. |
||||
*/ |
||||
import 'package:flutter_example_packages/base/package/package_page.dart'; |
||||
import 'package:get_it/get_it.dart'; |
||||
|
||||
import 'model.dart'; |
||||
import 'page.dart'; |
||||
|
||||
/// Package values |
||||
final packageProvider = PackagePage( |
||||
key: 'provider', |
||||
descEN: ''' |
||||
A wrapper around InheritedWidget to make them easier to use and more |
||||
reusable. |
||||
''', |
||||
descRU: ''' |
||||
Оболочка вокруг InheritedWidget, чтобы сделать их более простыми в |
||||
использовании и более удобными для повторного использования. |
||||
''', |
||||
version: '6.0.5', |
||||
isPlatformDependent: false, |
||||
page: () => ProviderPage(), |
||||
init: () { |
||||
GetIt.instance.registerFactory<ProviderModel>(() => ProviderModel()); |
||||
}, |
||||
); |
@ -0,0 +1,52 @@
|
||||
/* |
||||
* Copyright (c) 2023. Open Mobile Platform LLC. |
||||
* License: Proprietary. |
||||
*/ |
||||
import 'package:flutter/material.dart'; |
||||
import 'package:flutter_example_packages/base/di/app_di.dart'; |
||||
import 'package:flutter_example_packages/base/package/package.dart'; |
||||
import 'package:flutter_example_packages/widgets/base/export.dart'; |
||||
import 'package:flutter_example_packages/widgets/blocks/block_info_package.dart'; |
||||
import 'package:flutter_example_packages/widgets/layouts/block_layout.dart'; |
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; |
||||
|
||||
import 'model.dart'; |
||||
import 'package.dart'; |
||||
|
||||
class ProviderPage extends AppStatefulWidget { |
||||
ProviderPage({ |
||||
super.key, |
||||
}); |
||||
|
||||
final Package package = packageProvider; |
||||
|
||||
@override |
||||
State<ProviderPage> createState() => _ProviderPageState(); |
||||
} |
||||
|
||||
class _ProviderPageState extends AppState<ProviderPage> { |
||||
@override |
||||
Widget buildWide( |
||||
BuildContext context, |
||||
MediaQueryData media, |
||||
AppLocalizations l10n, |
||||
) { |
||||
return BlockLayout<ProviderModel>( |
||||
model: getIt<ProviderModel>(), |
||||
title: widget.package.key, |
||||
builder: (context, child, model) { |
||||
return SingleChildScrollView( |
||||
child: Padding( |
||||
padding: const EdgeInsets.all(20), |
||||
child: Column( |
||||
crossAxisAlignment: CrossAxisAlignment.start, |
||||
children: [ |
||||
BlockInfoPackage(widget.package), |
||||
], |
||||
), |
||||
), |
||||
); |
||||
}, |
||||
); |
||||
} |
||||
} |
@ -0,0 +1,13 @@
|
||||
/* |
||||
* Copyright (c) 2023. Open Mobile Platform LLC. |
||||
* License: Proprietary. |
||||
*/ |
||||
import 'package:flutter/widgets.dart'; |
||||
import 'package:scoped_model/scoped_model.dart'; |
||||
|
||||
/// Model for [QrFlutterPage] |
||||
class QrFlutterModel extends Model { |
||||
/// Get [ScopedModel] |
||||
static QrFlutterModel of(BuildContext context) => |
||||
ScopedModel.of<QrFlutterModel>(context); |
||||
} |
@ -0,0 +1,28 @@
|
||||
/* |
||||
* Copyright (c) 2023. Open Mobile Platform LLC. |
||||
* License: Proprietary. |
||||
*/ |
||||
import 'package:flutter_example_packages/base/package/package_page.dart'; |
||||
import 'package:get_it/get_it.dart'; |
||||
|
||||
import 'model.dart'; |
||||
import 'page.dart'; |
||||
|
||||
/// Package values |
||||
final packageQrFlutter = PackagePage( |
||||
key: 'qr_flutter', |
||||
descEN: ''' |
||||
QR.Flutter is a Flutter library for simple and fast QR code rendering |
||||
via a Widget or custom painter. |
||||
''', |
||||
descRU: ''' |
||||
ПQR.Flutter — это библиотека Flutter для простого и быстрого рендеринга |
||||
QR-кода с помощью виджета или пользовательского рисовальщика. |
||||
''', |
||||
version: '4.0.0', |
||||
isPlatformDependent: false, |
||||
page: () => QrFlutterPage(), |
||||
init: () { |
||||
GetIt.instance.registerFactory<QrFlutterModel>(() => QrFlutterModel()); |
||||
}, |
||||
); |
@ -0,0 +1,52 @@
|
||||
/* |
||||
* Copyright (c) 2023. Open Mobile Platform LLC. |
||||
* License: Proprietary. |
||||
*/ |
||||
import 'package:flutter/material.dart'; |
||||
import 'package:flutter_example_packages/base/di/app_di.dart'; |
||||
import 'package:flutter_example_packages/base/package/package.dart'; |
||||
import 'package:flutter_example_packages/widgets/base/export.dart'; |
||||
import 'package:flutter_example_packages/widgets/blocks/block_info_package.dart'; |
||||
import 'package:flutter_example_packages/widgets/layouts/block_layout.dart'; |
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; |
||||
|
||||
import 'model.dart'; |
||||
import 'package.dart'; |
||||
|
||||
class QrFlutterPage extends AppStatefulWidget { |
||||
QrFlutterPage({ |
||||
super.key, |
||||
}); |
||||
|
||||
final Package package = packageQrFlutter; |
||||
|
||||
@override |
||||
State<QrFlutterPage> createState() => _QrFlutterPageState(); |
||||
} |
||||
|
||||
class _QrFlutterPageState extends AppState<QrFlutterPage> { |
||||
@override |
||||
Widget buildWide( |
||||
BuildContext context, |
||||
MediaQueryData media, |
||||
AppLocalizations l10n, |
||||
) { |
||||
return BlockLayout<QrFlutterModel>( |
||||
model: getIt<QrFlutterModel>(), |
||||
title: widget.package.key, |
||||
builder: (context, child, model) { |
||||
return SingleChildScrollView( |
||||
child: Padding( |
||||
padding: const EdgeInsets.all(20), |
||||
child: Column( |
||||
crossAxisAlignment: CrossAxisAlignment.start, |
||||
children: [ |
||||
BlockInfoPackage(widget.package), |
||||
], |
||||
), |
||||
), |
||||
); |
||||
}, |
||||
); |
||||
} |
||||
} |
@ -0,0 +1,13 @@
|
||||
/* |
||||
* Copyright (c) 2023. Open Mobile Platform LLC. |
||||
* License: Proprietary. |
||||
*/ |
||||
import 'package:flutter/widgets.dart'; |
||||
import 'package:scoped_model/scoped_model.dart'; |
||||
|
||||
/// Model for [RxdartPage] |
||||
class RxdartModel extends Model { |
||||
/// Get [ScopedModel] |
||||
static RxdartModel of(BuildContext context) => |
||||
ScopedModel.of<RxdartModel>(context); |
||||
} |
@ -0,0 +1,26 @@
|
||||
/* |
||||
* Copyright (c) 2023. Open Mobile Platform LLC. |
||||
* License: Proprietary. |
||||
*/ |
||||
import 'package:flutter_example_packages/base/package/package_page.dart'; |
||||
import 'package:get_it/get_it.dart'; |
||||
|
||||
import 'model.dart'; |
||||
import 'page.dart'; |
||||
|
||||
/// Package values |
||||
final packageRxdart = PackagePage( |
||||
key: 'rxdart', |
||||
descEN: ''' |
||||
RxDart extends the capabilities of Dart Streams and StreamControllers. |
||||
''', |
||||
descRU: ''' |
||||
RxDart расширяет возможности Dart Streams и StreamControllers. |
||||
''', |
||||
version: '0.27.7', |
||||
isPlatformDependent: false, |
||||
page: () => RxdartPage(), |
||||
init: () { |
||||
GetIt.instance.registerFactory<RxdartModel>(() => RxdartModel()); |
||||
}, |
||||
); |
@ -0,0 +1,52 @@
|
||||
/* |
||||
* Copyright (c) 2023. Open Mobile Platform LLC. |
||||
* License: Proprietary. |
||||
*/ |
||||
import 'package:flutter/material.dart'; |
||||
import 'package:flutter_example_packages/base/di/app_di.dart'; |
||||
import 'package:flutter_example_packages/base/package/package.dart'; |
||||
import 'package:flutter_example_packages/widgets/base/export.dart'; |
||||
import 'package:flutter_example_packages/widgets/blocks/block_info_package.dart'; |
||||
import 'package:flutter_example_packages/widgets/layouts/block_layout.dart'; |
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; |
||||
|
||||
import 'model.dart'; |
||||
import 'package.dart'; |
||||
|
||||
class RxdartPage extends AppStatefulWidget { |
||||
RxdartPage({ |
||||
super.key, |
||||
}); |
||||
|
||||
final Package package = packageRxdart; |
||||
|
||||
@override |
||||
State<RxdartPage> createState() => _RxdartPageState(); |
||||
} |
||||
|
||||
class _RxdartPageState extends AppState<RxdartPage> { |
||||
@override |
||||
Widget buildWide( |
||||
BuildContext context, |
||||
MediaQueryData media, |
||||
AppLocalizations l10n, |
||||
) { |
||||
return BlockLayout<RxdartModel>( |
||||
model: getIt<RxdartModel>(), |
||||
title: widget.package.key, |
||||
builder: (context, child, model) { |
||||
return SingleChildScrollView( |
||||
child: Padding( |
||||
padding: const EdgeInsets.all(20), |
||||
child: Column( |
||||
crossAxisAlignment: CrossAxisAlignment.start, |
||||
children: [ |
||||
BlockInfoPackage(widget.package), |
||||
], |
||||
), |
||||
), |
||||
); |
||||
}, |
||||
); |
||||
} |
||||
} |
@ -0,0 +1,13 @@
|
||||
/* |
||||
* Copyright (c) 2023. Open Mobile Platform LLC. |
||||
* License: Proprietary. |
||||
*/ |
||||
import 'package:flutter/widgets.dart'; |
||||
import 'package:scoped_model/scoped_model.dart'; |
||||
|
||||
/// Model for [TranslatorPage] |
||||
class TranslatorModel extends Model { |
||||
/// Get [ScopedModel] |
||||
static TranslatorModel of(BuildContext context) => |
||||
ScopedModel.of<TranslatorModel>(context); |
||||
} |
@ -0,0 +1,26 @@
|
||||
/* |
||||
* Copyright (c) 2023. Open Mobile Platform LLC. |
||||
* License: Proprietary. |
||||
*/ |
||||
import 'package:flutter_example_packages/base/package/package_page.dart'; |
||||
import 'package:get_it/get_it.dart'; |
||||
|
||||
import 'model.dart'; |
||||
import 'page.dart'; |
||||
|
||||
/// Package values |
||||
final packageTranslator = PackagePage( |
||||
key: 'translator', |
||||
descEN: ''' |
||||
Free Google Translate API for Dart. |
||||
''', |
||||
descRU: ''' |
||||
Бесплатный API Google Translate для Dart. |
||||
''', |
||||
version: '0.1.7', |
||||
isPlatformDependent: false, |
||||
page: () => TranslatorPage(), |
||||
init: () { |
||||
GetIt.instance.registerFactory<TranslatorModel>(() => TranslatorModel()); |
||||
}, |
||||
); |
@ -0,0 +1,52 @@
|
||||
/* |
||||
* Copyright (c) 2023. Open Mobile Platform LLC. |
||||
* License: Proprietary. |
||||
*/ |
||||
import 'package:flutter/material.dart'; |
||||
import 'package:flutter_example_packages/base/di/app_di.dart'; |
||||
import 'package:flutter_example_packages/base/package/package.dart'; |
||||
import 'package:flutter_example_packages/widgets/base/export.dart'; |
||||
import 'package:flutter_example_packages/widgets/blocks/block_info_package.dart'; |
||||
import 'package:flutter_example_packages/widgets/layouts/block_layout.dart'; |
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; |
||||
|
||||
import 'model.dart'; |
||||
import 'package.dart'; |
||||
|
||||
class TranslatorPage extends AppStatefulWidget { |
||||
TranslatorPage({ |
||||
super.key, |
||||
}); |
||||
|
||||
final Package package = packageTranslator; |
||||
|
||||
@override |
||||
State<TranslatorPage> createState() => _TranslatorPageState(); |
||||
} |
||||
|
||||
class _TranslatorPageState extends AppState<TranslatorPage> { |
||||
@override |
||||
Widget buildWide( |
||||
BuildContext context, |
||||
MediaQueryData media, |
||||
AppLocalizations l10n, |
||||
) { |
||||
return BlockLayout<TranslatorModel>( |
||||
model: getIt<TranslatorModel>(), |
||||
title: widget.package.key, |
||||
builder: (context, child, model) { |
||||
return SingleChildScrollView( |
||||
child: Padding( |
||||
padding: const EdgeInsets.all(20), |
||||
child: Column( |
||||
crossAxisAlignment: CrossAxisAlignment.start, |
||||
children: [ |
||||
BlockInfoPackage(widget.package), |
||||
], |
||||
), |
||||
), |
||||
); |
||||
}, |
||||
); |
||||
} |
||||
} |
Loading…
Reference in new issue