Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 7da1fb4

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /