Skip to content

Commit 7da1fb4

Browse files
committed
Create simple dynamic widget hello world
1 parent 55983fa commit 7da1fb4

File tree

3 files changed

+85
-99
lines changed

3 files changed

+85
-99
lines changed

lib/main.dart

Lines changed: 39 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -1,117 +1,58 @@
1+
import 'package:dynamic_widget/dynamic_widget.dart';
12
import 'package:flutter/material.dart';
23

3-
void main() {
4-
runApp(MyApp());
5-
}
4+
void main() => runApp(App());
65

7-
class MyApp extends StatelessWidget {
8-
// This widget is the root of your application.
6+
class App extends StatelessWidget {
97
@override
108
Widget build(BuildContext context) {
119
return MaterialApp(
12-
title: 'Flutter Demo',
13-
theme: ThemeData(
14-
// This is the theme of your application.
15-
//
16-
// Try running your application with "flutter run". You'll see the
17-
// application has a blue toolbar. Then, without quitting the app, try
18-
// changing the primarySwatch below to Colors.green and then invoke
19-
// "hot reload" (press "r" in the console where you ran "flutter run",
20-
// or simply save your changes to "hot reload" in a Flutter IDE).
21-
// Notice that the counter didn't reset back to zero; the application
22-
// is not restarted.
23-
primarySwatch: Colors.blue,
24-
// This makes the visual density adapt to the platform that you run
25-
// the app on. For desktop platforms, the controls will be smaller and
26-
// closer together (more dense) than on mobile platforms.
27-
visualDensity: VisualDensity.adaptivePlatformDensity,
28-
),
29-
home: MyHomePage(title: 'Flutter Demo Home Page'),
10+
home: HomePage(),
3011
);
3112
}
3213
}
3314

34-
class MyHomePage extends StatefulWidget {
35-
MyHomePage({Key key, this.title}) : super(key: key);
36-
37-
// This widget is the home page of your application. It is stateful, meaning
38-
// that it has a State object (defined below) that contains fields that affect
39-
// how it looks.
40-
41-
// This class is the configuration for the state. It holds the values (in this
42-
// case the title) provided by the parent (in this case the App widget) and
43-
// used by the build method of the State. Fields in a Widget subclass are
44-
// always marked "final".
45-
46-
final String title;
47-
48-
@override
49-
_MyHomePageState createState() => _MyHomePageState();
50-
}
51-
52-
class _MyHomePageState extends State<MyHomePage> {
53-
int _counter = 0;
54-
55-
void _incrementCounter() {
56-
setState(() {
57-
// This call to setState tells the Flutter framework that something has
58-
// changed in this State, which causes it to rerun the build method below
59-
// so that the display can reflect the updated values. If we changed
60-
// _counter without calling setState(), then the build method would not be
61-
// called again, and so nothing would appear to happen.
62-
_counter++;
63-
});
64-
}
65-
15+
class HomePage extends StatelessWidget {
6616
@override
6717
Widget build(BuildContext context) {
68-
// This method is rerun every time setState is called, for instance as done
69-
// by the _incrementCounter method above.
70-
//
71-
// The Flutter framework has been optimized to make rerunning build methods
72-
// fast, so that you can just rebuild anything that needs updating rather
73-
// than having to individually change instances of widgets.
7418
return Scaffold(
7519
appBar: AppBar(
76-
// Here we take the value from the MyHomePage object that was created by
77-
// the App.build method, and use it to set our appbar title.
78-
title: Text(widget.title),
20+
title: Text('Flutter Dynamic Widget'),
7921
),
80-
body: Center(
81-
// Center is a layout widget. It takes a single child and positions it
82-
// in the middle of the parent.
83-
child: Column(
84-
// Column is also a layout widget. It takes a list of children and
85-
// arranges them vertically. By default, it sizes itself to fit its
86-
// children horizontally, and tries to be as tall as its parent.
87-
//
88-
// Invoke "debug painting" (press "p" in the console, choose the
89-
// "Toggle Debug Paint" action from the Flutter Inspector in Android
90-
// Studio, or the "Toggle Debug Paint" command in Visual Studio Code)
91-
// to see the wireframe for each widget.
92-
//
93-
// Column has various properties to control how it sizes itself and
94-
// how it positions its children. Here we use mainAxisAlignment to
95-
// center the children vertically; the main axis here is the vertical
96-
// axis because Columns are vertical (the cross axis would be
97-
// horizontal).
98-
mainAxisAlignment: MainAxisAlignment.center,
99-
children: <Widget>[
100-
Text(
101-
'You have pushed the button this many times:',
102-
),
103-
Text(
104-
'$_counter',
105-
style: Theme.of(context).textTheme.headline4,
106-
),
107-
],
108-
),
22+
body: FutureBuilder(
23+
future: _buildWidget(context),
24+
builder: (context, snapshot) {
25+
if (snapshot.hasError) {
26+
debugPrint('${snapshot.error}');
27+
}
28+
return snapshot.hasData
29+
? SizedBox.expand(child: snapshot.data)
30+
: Center(
31+
child: CircularProgressIndicator(),
32+
);
33+
},
10934
),
110-
floatingActionButton: FloatingActionButton(
111-
onPressed: _incrementCounter,
112-
tooltip: 'Increment',
113-
child: Icon(Icons.add),
114-
), // This trailing comma makes auto-formatting nicer for build methods.
11535
);
11636
}
37+
38+
Future<Widget> _buildWidget(context) async {
39+
var jsonHelloWorld = '''
40+
{
41+
"type": "Center",
42+
"child": {
43+
"type": "Text",
44+
"data": "Hello World Dynamic Widget"
45+
}
46+
}
47+
''';
48+
await Future.delayed(Duration(seconds: 2));
49+
return DynamicWidgetBuilder.build(jsonHelloWorld, context, DefaultClickListener());
50+
}
51+
}
52+
53+
class DefaultClickListener extends ClickListener {
54+
@override
55+
void onClicked(String event) {
56+
// TODO: do something in here
57+
}
11758
}

pubspec.lock

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@ packages:
6464
url: "https://pub.dartlang.org"
6565
source: hosted
6666
version: "0.1.3"
67+
dynamic_widget:
68+
dependency: "direct main"
69+
description:
70+
name: dynamic_widget
71+
url: "https://pub.dartlang.org"
72+
source: hosted
73+
version: "2.0.2"
6774
flutter:
6875
dependency: "direct main"
6976
description: flutter
@@ -74,13 +81,41 @@ packages:
7481
description: flutter
7582
source: sdk
7683
version: "0.0.0"
84+
font_awesome_flutter:
85+
dependency: transitive
86+
description:
87+
name: font_awesome_flutter
88+
url: "https://pub.dartlang.org"
89+
source: hosted
90+
version: "8.8.1"
91+
http:
92+
dependency: transitive
93+
description:
94+
name: http
95+
url: "https://pub.dartlang.org"
96+
source: hosted
97+
version: "0.12.0+4"
98+
http_parser:
99+
dependency: transitive
100+
description:
101+
name: http_parser
102+
url: "https://pub.dartlang.org"
103+
source: hosted
104+
version: "3.1.4"
77105
image:
78106
dependency: transitive
79107
description:
80108
name: image
81109
url: "https://pub.dartlang.org"
82110
source: hosted
83111
version: "2.1.12"
112+
logging:
113+
dependency: transitive
114+
description:
115+
name: logging
116+
url: "https://pub.dartlang.org"
117+
source: hosted
118+
version: "0.11.4"
84119
matcher:
85120
dependency: transitive
86121
description:
@@ -102,6 +137,13 @@ packages:
102137
url: "https://pub.dartlang.org"
103138
source: hosted
104139
version: "1.6.4"
140+
pedantic:
141+
dependency: transitive
142+
description:
143+
name: pedantic
144+
url: "https://pub.dartlang.org"
145+
source: hosted
146+
version: "1.9.0"
105147
petitparser:
106148
dependency: transitive
107149
description:

pubspec.yaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,14 @@ dependencies:
2424
flutter:
2525
sdk: flutter
2626

27-
2827
# The following adds the Cupertino Icons font to your application.
2928
# Use with the CupertinoIcons class for iOS style icons.
3029
cupertino_icons: ^0.1.3
3130

31+
# A Backend-Driven UI toolkit, build your dynamic UI with json, and the json format is very
32+
# similar with flutter widget code.
33+
dynamic_widget: ^2.0.2
34+
3235
dev_dependencies:
3336
flutter_test:
3437
sdk: flutter

0 commit comments

Comments
 (0)