Skip to content

Commit 2b2b151

Browse files
committed
Convert grpc-web example to package:web
1 parent 93909b7 commit 2b2b151

File tree

3 files changed

+23
-14
lines changed

3 files changed

+23
-14
lines changed

example/grpc-web/lib/app.dart

+18-9
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@
1414
// limitations under the License.
1515

1616
import 'dart:async';
17-
import 'dart:html';
18-
17+
import 'package:web/web.dart';
1918
import 'src/generated/echo.pbgrpc.dart';
2019

2120
class EchoApp {
@@ -56,13 +55,23 @@ class EchoApp {
5655
}
5756

5857
void _addMessage(String message, String cssClass) {
59-
final classes = cssClass.split(' ');
60-
querySelector('#first')!.after(DivElement()
61-
..classes.add('row')
62-
..append(Element.tag('h2')
63-
..append(SpanElement()
64-
..classes.add('label')
65-
..classes.addAll(classes)
58+
document.querySelector('#first')!.after(HTMLDivElement()
59+
..classList.add('row')
60+
..append(HTMLHeadingElement.h2()
61+
..append(HTMLSpanElement()
62+
..classList.add('label')
63+
..classList.addAll(cssClass)
6664
..text = message)));
6765
}
6866
}
67+
68+
// The documentation of DOMTokenList.add implies it can handle multiple classes,
69+
// but in Chrome at least it does not.
70+
extension AddAll on DOMTokenList {
71+
void addAll(String cssClass) {
72+
final classes = cssClass.split(' ');
73+
for (final c in classes) {
74+
add(c);
75+
}
76+
}
77+
}

example/grpc-web/pubspec.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ dependencies:
99
grpc:
1010
path: ../../
1111
protobuf: ^3.0.0
12+
web: ^1.1.0
1213

1314
dev_dependencies:
1415
build_runner: ^2.0.0

example/grpc-web/web/main.dart

+4-5
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,20 @@
1212
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1313
// See the License for the specific language governing permissions and
1414
// limitations under the License.
15-
import 'dart:html';
16-
1715
import 'package:grpc/grpc_web.dart';
1816
import 'package:grpc_web/app.dart';
1917
import 'package:grpc_web/src/generated/echo.pbgrpc.dart';
18+
import 'package:web/web.dart';
2019

2120
void main() {
2221
final channel = GrpcWebClientChannel.xhr(Uri.parse('http://localhost:8080'));
2322
final service = EchoServiceClient(channel);
2423
final app = EchoApp(service);
2524

26-
final button = querySelector('#send') as ButtonElement;
25+
final button = document.querySelector('#send') as HTMLButtonElement;
2726
button.onClick.listen((e) async {
28-
final msg = querySelector('#msg') as TextInputElement;
29-
final value = msg.value!.trim();
27+
final msg = document.querySelector('#msg') as HTMLInputElement;
28+
final value = msg.value.trim();
3029
msg.value = '';
3130

3231
if (value.isEmpty) return;

0 commit comments

Comments
 (0)