frap 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/frap.rb +3 -2
- data/lib/frap/{generators → commands}/generate.rb +2 -3
- data/lib/frap/create_app.rb +16 -4
- data/lib/frap/create_base.rb +2 -0
- data/lib/frap/create_resource.rb +62 -0
- data/lib/frap/generators/config.rb +0 -3
- data/lib/frap/generators/flutter_config.rb +33 -11
- data/lib/frap/generators/flutter_resource.rb +57 -0
- data/lib/frap/generators/templates/dart/main.dart.erb +2 -2
- data/lib/frap/generators/templates/dart/src/animations/slide_right_route.dart.erb +23 -0
- data/lib/frap/generators/templates/dart/src/app.dart.erb +26 -0
- data/lib/frap/generators/templates/dart/src/config/router.dart.erb +14 -0
- data/lib/frap/generators/templates/dart/src/constants/pages_list.dart.erb +13 -0
- data/lib/frap/generators/templates/dart/src/constants/routing.dart.erb +1 -0
- data/lib/frap/generators/templates/dart/src/screens/base.dart.erb +23 -0
- data/lib/frap/generators/templates/dart/src/screens/undefined_route_screen.dart.erb +15 -0
- data/lib/frap/generators/templates/dart/src/widgets/base_app_bar.dart.erb +23 -0
- data/lib/frap/generators/templates/dart/src/widgets/popup_menu_widget.dart.erb +30 -0
- data/lib/frap/version.rb +1 -1
- metadata +15 -10
- data/lib/frap/generators/resource.rb +0 -42
- data/lib/frap/generators/templates/dart/src/app_bloc.dart.erb +0 -9
- data/lib/frap/generators/templates/dart/src/app_module.dart.erb +0 -19
- data/lib/frap/generators/templates/dart/src/app_widget.dart.erb +0 -15
- data/lib/frap/generators/templates/dart/src/home/home_bloc.dart.erb +0 -9
- data/lib/frap/generators/templates/dart/src/home/home_module.dart.erb +0 -19
- data/lib/frap/generators/templates/dart/src/home/home_page.dart.erb +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a94c44eaae2cb515d4ae619672a6e2eed5d3e352c9ccceb60e49bc6123f2d2b
|
4
|
+
data.tar.gz: 8e3f7a0d93b24ac0bb3ffdb5b2963cbb09e2c83c26e33d16970b88f194cc382b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e955d2a12647e5ba589f6d88baa5aa68c1105d4cb3618836ec9e60299286fede785f4d0fb190c47d516f4295a36409c6937e70e606ebebdb6593ce0ef706f96a
|
7
|
+
data.tar.gz: ad972c11753fa6ecbaa24cb81c147d657650356a615909b6dd254678108daec5182643aafb23c596a50f9964f2738fd745f7afcd263eaf9428d9360b31b1d8c9
|
data/Gemfile.lock
CHANGED
data/lib/frap.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'frap/version'
|
2
2
|
require 'frap/create_app'
|
3
|
-
require 'frap/
|
3
|
+
require 'frap/create_resource'
|
4
|
+
require 'frap/commands/generate'
|
4
5
|
require 'frap/generators/config'
|
5
6
|
require 'frap/generators/flutter_config'
|
6
7
|
require 'thor'
|
@@ -30,6 +31,6 @@ module Frap
|
|
30
31
|
Generate all the boiler plate code such as controllers, pages and blocks for Rails and Flutter.
|
31
32
|
run `frap g help` to see a list of existing generators
|
32
33
|
LONGDESC
|
33
|
-
subcommand 'generate', Frap::
|
34
|
+
subcommand 'generate', Frap::Commands::Generate
|
34
35
|
end
|
35
36
|
end
|
@@ -1,8 +1,7 @@
|
|
1
1
|
require 'thor'
|
2
|
-
require 'frap/generators/resource'
|
3
2
|
|
4
3
|
module Frap
|
5
|
-
module
|
4
|
+
module Commands
|
6
5
|
class Generate < Thor
|
7
6
|
desc 'resource NAME', 'generate a resource'
|
8
7
|
method_option :rails, type: :boolean, aliases: :r, default: true
|
@@ -10,7 +9,7 @@ module Frap
|
|
10
9
|
method_option :attributes, type: :hash, aliases: :a
|
11
10
|
|
12
11
|
def resource(name)
|
13
|
-
Frap::
|
12
|
+
Frap::CreateResource.new(name, options).create_resource
|
14
13
|
end
|
15
14
|
end
|
16
15
|
end
|
data/lib/frap/create_app.rb
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
require 'thor'
|
2
|
-
require 'frap/generators/config'
|
3
|
-
|
4
1
|
module Frap
|
5
2
|
class CreateApp
|
6
3
|
attr_accessor :name
|
@@ -60,8 +57,23 @@ module Frap
|
|
60
57
|
end
|
61
58
|
|
62
59
|
def show_completed_notes
|
63
|
-
shell.say(shell_text('
|
60
|
+
shell.say(shell_text('YAY! App setup complete!'), :green)
|
64
61
|
shell.say('TODO: Install your favourite Rails Testing library', :yellow)
|
62
|
+
shell.say(shell_text(''), :green)
|
63
|
+
|
64
|
+
shell.say('Generate Some resources:', :yellow)
|
65
|
+
shell.say("cd #{working_dir}", :green)
|
66
|
+
shell.say('frap generate resource user --attributes name:string age:integer', :green)
|
67
|
+
|
68
|
+
shell.say('Start the rails serve:', :yellow)
|
69
|
+
shell.say("cd #{working_dir}/#{server_name}", :green)
|
70
|
+
shell.say("rails s", :green)
|
71
|
+
|
72
|
+
shell.say('Start the Flutter App:', :yellow)
|
73
|
+
shell.say("cd #{working_dir}/#{ui_name}", :green)
|
74
|
+
shell.say("flutter run", :green)
|
75
|
+
|
76
|
+
shell.say(shell_text('========================'), :green)
|
65
77
|
end
|
66
78
|
|
67
79
|
def server_name
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Frap
|
4
|
+
class CreateResource
|
5
|
+
attr_accessor :name, :attributes, :options
|
6
|
+
|
7
|
+
def initialize(name, options)
|
8
|
+
@name = name
|
9
|
+
@options = options
|
10
|
+
end
|
11
|
+
|
12
|
+
def create_resource
|
13
|
+
generate_rails_resource if options['rails']
|
14
|
+
generate_flutter_resource if options['flutter']
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def generate_rails_resource
|
20
|
+
Dir.chdir("#{working_dir}/#{rails_app}")
|
21
|
+
|
22
|
+
system("rails generate resource #{name} #{fields}")
|
23
|
+
end
|
24
|
+
|
25
|
+
def generate_flutter_resource
|
26
|
+
Dir.chdir("#{working_dir}/#{flutter_app}")
|
27
|
+
|
28
|
+
puts "TODO: frap g flutter resource #{name} #{fields}"
|
29
|
+
end
|
30
|
+
|
31
|
+
def fields
|
32
|
+
@fields ||= build_fields
|
33
|
+
end
|
34
|
+
|
35
|
+
def build_fields
|
36
|
+
return unless options[:attributes]
|
37
|
+
|
38
|
+
fields_string = ''
|
39
|
+
options[:attributes].each { |k, v| fields_string << "#{k}:#{v} " }
|
40
|
+
|
41
|
+
return fields_string
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def working_dir
|
47
|
+
@working_dir ||= Dir.pwd
|
48
|
+
end
|
49
|
+
|
50
|
+
def config
|
51
|
+
@config ||= YAML.load(File.read('config.yml'))
|
52
|
+
end
|
53
|
+
|
54
|
+
def flutter_app
|
55
|
+
config['flutter_app']
|
56
|
+
end
|
57
|
+
|
58
|
+
def rails_app
|
59
|
+
config['rails_app']
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -1,7 +1,3 @@
|
|
1
|
-
|
2
|
-
require 'thor'
|
3
|
-
require 'thor/group'
|
4
|
-
|
5
1
|
module Frap
|
6
2
|
module Generators
|
7
3
|
class FlutterConfig < Thor::Group
|
@@ -22,18 +18,33 @@ module Frap
|
|
22
18
|
end
|
23
19
|
|
24
20
|
def create_directories
|
25
|
-
empty_directory("#{lib_directory}/src/
|
21
|
+
empty_directory("#{lib_directory}/src/animations")
|
22
|
+
empty_directory("#{lib_directory}/src/config")
|
23
|
+
empty_directory("#{lib_directory}/src/constants")
|
24
|
+
empty_directory("#{lib_directory}/src/screens")
|
25
|
+
empty_directory("#{lib_directory}/src/widgets")
|
26
26
|
invoke :create_files
|
27
27
|
end
|
28
28
|
|
29
29
|
def create_files
|
30
30
|
template('main.dart.erb', "#{lib_directory}/main.dart")
|
31
|
-
template('src/
|
32
|
-
template('src/
|
33
|
-
template('src/
|
34
|
-
template('src/
|
35
|
-
template('src/
|
36
|
-
template('src/
|
31
|
+
template('src/app.dart.erb', "#{src_directory}/app.dart")
|
32
|
+
template('src/animations/slide_right_route.dart.erb', "#{src_directory}/animations/slide_right_route.dart")
|
33
|
+
template('src/config/router.dart.erb', "#{src_directory}/config/router.dart")
|
34
|
+
template('src/constants/pages_list.dart.erb', "#{src_directory}/constants/pages_list.dart")
|
35
|
+
template('src/constants/routing.dart.erb', "#{src_directory}/constants/routing.dart")
|
36
|
+
template('src/screens/base.dart.erb', "#{src_directory}/screens/home_screen.dart")
|
37
|
+
template('src/screens/undefined_route_screen.dart.erb', "#{src_directory}/screens/undefined_route_screen.dart")
|
38
|
+
template('src/widgets/base_app_bar.dart.erb', "#{src_directory}/widgets/base_app_bar.dart")
|
39
|
+
template('src/widgets/popup_menu_widget.dart.erb', "#{src_directory}/widgets/popup_menu_widget.dart")
|
40
|
+
|
41
|
+
invoke :setup_pages
|
42
|
+
end
|
43
|
+
|
44
|
+
def setup_pages
|
45
|
+
inject_into_file("#{src_directory}/config/router.dart", home_router, after: /^.*switch \(settings.name\) \{$/)
|
46
|
+
inject_into_file("#{src_directory}/constants/pages_list.dart", home_route, after: /const List<Page> pages = const <Page>\[.*$/)
|
47
|
+
append_to_file("#{src_directory}/constants/routing.dart", "const String HomeScreenRoute = '/';")
|
37
48
|
end
|
38
49
|
|
39
50
|
private
|
@@ -56,6 +67,17 @@ module Frap
|
|
56
67
|
rxdart: ^0.22.0
|
57
68
|
bloc_pattern: ^2.2.3)
|
58
69
|
end
|
70
|
+
|
71
|
+
def home_router
|
72
|
+
%Q(
|
73
|
+
case HomeScreenRoute:
|
74
|
+
return SlideRightRoute(widget:HomeScreen());)
|
75
|
+
end
|
76
|
+
|
77
|
+
def home_route
|
78
|
+
%Q(
|
79
|
+
const Page(title: 'Home', icon: Icons.home, route: HomeScreenRoute),)
|
80
|
+
end
|
59
81
|
end
|
60
82
|
end
|
61
83
|
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module Frap
|
2
|
+
module Generators
|
3
|
+
class FlutterResource < Thor::Group
|
4
|
+
include Thor::Actions
|
5
|
+
|
6
|
+
desc 'Generate Flutter Config files'
|
7
|
+
argument :name
|
8
|
+
argument :folder_name
|
9
|
+
|
10
|
+
def self.source_root
|
11
|
+
File.dirname(__FILE__) + '/templates/dart'
|
12
|
+
end
|
13
|
+
|
14
|
+
def configure_directories
|
15
|
+
inject_into_file("#{working_directory}/pubspec.yaml", pub_files, after: /^dependencies:.*$/)
|
16
|
+
remove_file("#{lib_directory}/main.dart")
|
17
|
+
invoke :create_directories
|
18
|
+
end
|
19
|
+
|
20
|
+
def create_directories
|
21
|
+
empty_directory("#{lib_directory}/src/home")
|
22
|
+
invoke :create_files
|
23
|
+
end
|
24
|
+
|
25
|
+
def create_files
|
26
|
+
template('main.dart.erb', "#{lib_directory}/main.dart")
|
27
|
+
template('src/app_bloc.dart.erb', "#{src_directory}/app_bloc.dart")
|
28
|
+
template('src/app_module.dart.erb', "#{src_directory}/app_module.dart")
|
29
|
+
template('src/app_widget.dart.erb', "#{src_directory}/app_widget.dart")
|
30
|
+
template('src/home/home_bloc.dart.erb', "#{src_directory}/home/home_bloc.dart")
|
31
|
+
template('src/home/home_module.dart.erb', "#{src_directory}/home/home_module.dart")
|
32
|
+
template('src/home/home_page.dart.erb', "#{src_directory}/home/home_page.dart")
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def working_directory
|
38
|
+
"#{destination_root}/#{folder_name}"
|
39
|
+
end
|
40
|
+
|
41
|
+
def lib_directory
|
42
|
+
"#{working_directory}/lib"
|
43
|
+
end
|
44
|
+
|
45
|
+
def src_directory
|
46
|
+
"#{lib_directory}/src"
|
47
|
+
end
|
48
|
+
|
49
|
+
def pub_files
|
50
|
+
%Q(
|
51
|
+
dio: ^2.1.13
|
52
|
+
rxdart: ^0.22.0
|
53
|
+
bloc_pattern: ^2.2.3)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import 'package:flutter/material.dart';
|
2
|
+
|
3
|
+
class SlideRightRoute extends PageRouteBuilder {
|
4
|
+
final Widget widget;
|
5
|
+
SlideRightRoute({this.widget}) : super(
|
6
|
+
pageBuilder: (BuildContext context, Animation<double> animation,
|
7
|
+
Animation<double> secondaryAnimation) {
|
8
|
+
return widget;
|
9
|
+
},
|
10
|
+
transitionsBuilder: (BuildContext context,
|
11
|
+
Animation<double> animation,
|
12
|
+
Animation<double> secondaryAnimation,
|
13
|
+
Widget child) {
|
14
|
+
return new SlideTransition(
|
15
|
+
position: new Tween<Offset>(
|
16
|
+
begin: const Offset(1.0, 0.0),
|
17
|
+
end: Offset.zero,
|
18
|
+
).animate(animation),
|
19
|
+
child: child,
|
20
|
+
);
|
21
|
+
},
|
22
|
+
);
|
23
|
+
}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
import 'package:flutter/material.dart';
|
2
|
+
import 'package:<%= folder_name %>/src/screens/undefined_route_screen.dart';
|
3
|
+
import 'package:<%= folder_name %>/src/screens/home_screen.dart';
|
4
|
+
import 'package:<%= folder_name %>/src/config/router.dart' as router;
|
5
|
+
import 'package:<%= folder_name %>/src/constants/routing.dart';
|
6
|
+
|
7
|
+
class App extends StatelessWidget {
|
8
|
+
@override
|
9
|
+
|
10
|
+
static const String _title = '<%= folder_name %>';
|
11
|
+
|
12
|
+
Widget build(BuildContext context) {
|
13
|
+
return MaterialApp(
|
14
|
+
title: _title,
|
15
|
+
theme: ThemeData.light(),
|
16
|
+
home: HomeScreen(),
|
17
|
+
initialRoute: HomeScreenRoute,
|
18
|
+
onGenerateRoute: router.generateRoute,
|
19
|
+
onUnknownRoute: (settings) => MaterialPageRoute(
|
20
|
+
builder: (context) => UndefinedRouteScreen(
|
21
|
+
name: settings.name,
|
22
|
+
)
|
23
|
+
),
|
24
|
+
);
|
25
|
+
}
|
26
|
+
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import 'package:flutter/material.dart';
|
2
|
+
|
3
|
+
import 'package:<%= folder_name %>/src/animations/slide_right_route.dart';
|
4
|
+
import 'package:<%= folder_name %>/src/constants/routing.dart';
|
5
|
+
import 'package:<%= folder_name %>/src/screens/home_screen.dart';
|
6
|
+
import 'package:<%= folder_name %>/src/screens/undefined_route_screen.dart';
|
7
|
+
|
8
|
+
|
9
|
+
Route<dynamic> generateRoute(RouteSettings settings) {
|
10
|
+
switch (settings.name) {
|
11
|
+
default:
|
12
|
+
return SlideRightRoute(widget:UndefinedRouteScreen());
|
13
|
+
}
|
14
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import 'package:flutter/material.dart';
|
2
|
+
import 'package:<%= folder_name %>/src/constants/routing.dart';
|
3
|
+
|
4
|
+
class Page {
|
5
|
+
const Page({this.title, this.icon, this.route});
|
6
|
+
|
7
|
+
final String title;
|
8
|
+
final IconData icon;
|
9
|
+
final String route;
|
10
|
+
}
|
11
|
+
|
12
|
+
const List<Page> pages = const <Page>[
|
13
|
+
];
|
@@ -0,0 +1 @@
|
|
1
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import 'package:flutter/material.dart';
|
2
|
+
import 'package:<%= folder_name %>/src/constants/routing.dart';
|
3
|
+
import 'package:<%= folder_name %>/src/widgets/base_app_bar.dart';
|
4
|
+
import 'package:<%= folder_name %>/src/widgets/popup_menu_widget.dart';
|
5
|
+
|
6
|
+
class HomeScreen extends StatelessWidget {
|
7
|
+
@override
|
8
|
+
|
9
|
+
Widget build(BuildContext context) {
|
10
|
+
return Scaffold(
|
11
|
+
appBar: BaseAppBar(
|
12
|
+
title: Text('<%= name %>'),
|
13
|
+
appBar: AppBar(),
|
14
|
+
widgets: <Widget>[
|
15
|
+
PopupMenuWidget(),
|
16
|
+
],
|
17
|
+
),
|
18
|
+
body: Center(
|
19
|
+
child: Text('<%= name %>'),
|
20
|
+
),
|
21
|
+
);
|
22
|
+
}
|
23
|
+
}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import 'package:flutter/material.dart';
|
2
|
+
|
3
|
+
class UndefinedRouteScreen extends StatelessWidget {
|
4
|
+
final String name;
|
5
|
+
const UndefinedRouteScreen({Key key, this.name}) : super(key: key);
|
6
|
+
|
7
|
+
@override
|
8
|
+
Widget build(BuildContext context) {
|
9
|
+
return Scaffold(
|
10
|
+
body: Center(
|
11
|
+
child: Text('Route for $name is not defined'),
|
12
|
+
),
|
13
|
+
);
|
14
|
+
}
|
15
|
+
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import 'package:flutter/material.dart';
|
2
|
+
|
3
|
+
class BaseAppBar extends StatelessWidget implements PreferredSizeWidget {
|
4
|
+
final Color backgroundColor = Colors.blue;
|
5
|
+
final Text title;
|
6
|
+
final AppBar appBar;
|
7
|
+
final List<Widget> widgets;
|
8
|
+
|
9
|
+
const BaseAppBar({Key key, this.title, this.appBar, this.widgets})
|
10
|
+
: super(key: key);
|
11
|
+
|
12
|
+
@override
|
13
|
+
Widget build(BuildContext context) {
|
14
|
+
return AppBar(
|
15
|
+
title: title,
|
16
|
+
backgroundColor: backgroundColor,
|
17
|
+
actions: widgets,
|
18
|
+
);
|
19
|
+
}
|
20
|
+
|
21
|
+
@override
|
22
|
+
Size get preferredSize => new Size.fromHeight(appBar.preferredSize.height);
|
23
|
+
}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
import 'package:flutter/material.dart';
|
2
|
+
import 'package:<%= folder_name %>/src/constants/pages_list.dart';
|
3
|
+
import 'package:<%= folder_name %>/src/constants/routing.dart';
|
4
|
+
|
5
|
+
class PopupMenuWidget extends StatefulWidget {
|
6
|
+
@override
|
7
|
+
_PopupMenuWidgetState createState() => _PopupMenuWidgetState();
|
8
|
+
}
|
9
|
+
|
10
|
+
class _PopupMenuWidgetState extends State<PopupMenuWidget> {
|
11
|
+
@override
|
12
|
+
|
13
|
+
_onSelect(Page page) {
|
14
|
+
Navigator.pushNamed(context, page.route);
|
15
|
+
}
|
16
|
+
|
17
|
+
Widget build(BuildContext context) {
|
18
|
+
return PopupMenuButton<Page>(
|
19
|
+
onSelected: _onSelect,
|
20
|
+
itemBuilder: (BuildContext context) {
|
21
|
+
return pages.map((Page page) {
|
22
|
+
return PopupMenuItem<Page>(
|
23
|
+
value: page,
|
24
|
+
child: Text(page.title),
|
25
|
+
);
|
26
|
+
}).toList();
|
27
|
+
},
|
28
|
+
);
|
29
|
+
}
|
30
|
+
}
|
data/lib/frap/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: frap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Gascoigne - Taylor
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-07-
|
11
|
+
date: 2019-07-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -104,19 +104,24 @@ files:
|
|
104
104
|
- bin/setup
|
105
105
|
- frap.gemspec
|
106
106
|
- lib/frap.rb
|
107
|
+
- lib/frap/commands/generate.rb
|
107
108
|
- lib/frap/create_app.rb
|
109
|
+
- lib/frap/create_base.rb
|
110
|
+
- lib/frap/create_resource.rb
|
108
111
|
- lib/frap/generators/config.rb
|
109
112
|
- lib/frap/generators/flutter_config.rb
|
110
|
-
- lib/frap/generators/
|
111
|
-
- lib/frap/generators/resource.rb
|
113
|
+
- lib/frap/generators/flutter_resource.rb
|
112
114
|
- lib/frap/generators/templates/config.erb
|
113
115
|
- lib/frap/generators/templates/dart/main.dart.erb
|
114
|
-
- lib/frap/generators/templates/dart/src/
|
115
|
-
- lib/frap/generators/templates/dart/src/
|
116
|
-
- lib/frap/generators/templates/dart/src/
|
117
|
-
- lib/frap/generators/templates/dart/src/
|
118
|
-
- lib/frap/generators/templates/dart/src/
|
119
|
-
- lib/frap/generators/templates/dart/src/
|
116
|
+
- lib/frap/generators/templates/dart/src/animations/slide_right_route.dart.erb
|
117
|
+
- lib/frap/generators/templates/dart/src/app.dart.erb
|
118
|
+
- lib/frap/generators/templates/dart/src/config/router.dart.erb
|
119
|
+
- lib/frap/generators/templates/dart/src/constants/pages_list.dart.erb
|
120
|
+
- lib/frap/generators/templates/dart/src/constants/routing.dart.erb
|
121
|
+
- lib/frap/generators/templates/dart/src/screens/base.dart.erb
|
122
|
+
- lib/frap/generators/templates/dart/src/screens/undefined_route_screen.dart.erb
|
123
|
+
- lib/frap/generators/templates/dart/src/widgets/base_app_bar.dart.erb
|
124
|
+
- lib/frap/generators/templates/dart/src/widgets/popup_menu_widget.dart.erb
|
120
125
|
- lib/frap/version.rb
|
121
126
|
homepage: https://github.com/flippakitten/frap
|
122
127
|
licenses:
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require 'thor'
|
2
|
-
|
3
|
-
module Frap
|
4
|
-
module Generators
|
5
|
-
class Resource
|
6
|
-
attr_accessor :name, :attributes, :options
|
7
|
-
|
8
|
-
def initialize(name, options)
|
9
|
-
@name = name
|
10
|
-
@options = options
|
11
|
-
end
|
12
|
-
|
13
|
-
def create_resource
|
14
|
-
generate_rails_resource if options['rails']
|
15
|
-
generate_flutter_resource if options['flutter']
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
def generate_rails_resource
|
21
|
-
|
22
|
-
|
23
|
-
puts "TODO: rails g resource #{fields}"
|
24
|
-
end
|
25
|
-
|
26
|
-
def generate_flutter_resource
|
27
|
-
puts "TODO: frap g flutter resource #{fields}"
|
28
|
-
end
|
29
|
-
|
30
|
-
def fields
|
31
|
-
@fields ||= build_fields
|
32
|
-
end
|
33
|
-
|
34
|
-
def build_fields
|
35
|
-
fields_string = ''
|
36
|
-
options[:attributes].each { |k, v| fields_string << "#{k}:#{v} " }
|
37
|
-
|
38
|
-
return fields_string
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
import 'package:bloc_pattern/bloc_pattern.dart';
|
2
|
-
import 'package:flutter/material.dart';
|
3
|
-
import 'package:<%= folder_name %>/src/app_widget.dart';
|
4
|
-
import 'package:<%= folder_name %>/src/app_bloc.dart';
|
5
|
-
|
6
|
-
class AppModule extends ModuleWidget {
|
7
|
-
@override
|
8
|
-
List<Bloc> get blocs => [
|
9
|
-
Bloc((i) => AppBloc()),
|
10
|
-
];
|
11
|
-
|
12
|
-
@override
|
13
|
-
List<Dependency> get dependencies => [];
|
14
|
-
|
15
|
-
@override
|
16
|
-
Widget get view => AppWidget();
|
17
|
-
|
18
|
-
static Inject get to => Inject<AppModule>.of();
|
19
|
-
}
|
@@ -1,15 +0,0 @@
|
|
1
|
-
import 'package:flutter/material.dart';
|
2
|
-
import 'package:<%= folder_name %>/src/home/home_module.dart';
|
3
|
-
|
4
|
-
class AppWidget extends StatelessWidget {
|
5
|
-
@override
|
6
|
-
Widget build(BuildContext context) {
|
7
|
-
return MaterialApp(
|
8
|
-
title: '<%= name.split(/ |\_|\-/).map(&:capitalize).join(' ') %> App',
|
9
|
-
theme: ThemeData(
|
10
|
-
primarySwatch: Colors.blue,
|
11
|
-
),
|
12
|
-
home: HomeModule(),
|
13
|
-
);
|
14
|
-
}
|
15
|
-
}
|
@@ -1,19 +0,0 @@
|
|
1
|
-
import 'package:<%= folder_name %>/src/home/home_bloc.dart';
|
2
|
-
import 'package:bloc_pattern/bloc_pattern.dart';
|
3
|
-
import 'package:flutter/material.dart';
|
4
|
-
import 'package:<%= folder_name %>/src/home/home_page.dart';
|
5
|
-
|
6
|
-
class HomeModule extends ModuleWidget {
|
7
|
-
@override
|
8
|
-
List<Bloc> get blocs => [
|
9
|
-
Bloc((i) => HomeBloc()),
|
10
|
-
];
|
11
|
-
|
12
|
-
@override
|
13
|
-
List<Dependency> get dependencies => [];
|
14
|
-
|
15
|
-
@override
|
16
|
-
Widget get view => HomePage();
|
17
|
-
|
18
|
-
static Inject get to => Inject<HomeModule>.of();
|
19
|
-
}
|
@@ -1,20 +0,0 @@
|
|
1
|
-
import 'package:flutter/material.dart';
|
2
|
-
|
3
|
-
class HomePage extends StatefulWidget {
|
4
|
-
@override
|
5
|
-
_HomePageState createState() => _HomePageState();
|
6
|
-
}
|
7
|
-
|
8
|
-
class _HomePageState extends State<HomePage> {
|
9
|
-
@override
|
10
|
-
Widget build(BuildContext context) {
|
11
|
-
return Scaffold(
|
12
|
-
appBar: AppBar(
|
13
|
-
title: Text("Home"),
|
14
|
-
),
|
15
|
-
body: Center(
|
16
|
-
child: Text('<%= folder_name %> Home'),
|
17
|
-
),
|
18
|
-
);
|
19
|
-
}
|
20
|
-
}
|