【问题标题】:Consuming SignalR on Flutter在 Flutter 上使用 SignalR
【发布时间】:2021-02-23 14:16:32
【问题描述】:

我是Flutter 的新手。我需要消耗SignalR.Net Framework 上构建和运行。为此,我遵循了这两个来源

For Flutter Client

For SignalR server build on .Net Framework

但我无法连接到 SingalR

main.dart代码

import 'package:flutter/material.dart';
import 'dart:async';
import 'package:signalr_flutter/signalr_flutter.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _signalRStatus = 'Unknown';
  SignalR signalR;
  final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();

  @override
  void initState() {
    super.initState();
    initPlatformState();
  }

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState() async {
    signalR = SignalR('https://localhost:44359', "Chat",
        hubMethods: ["Send"],
        statusChangeCallback: _onStatusChange,
        hubCallback: _onNewMessage);
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        key: _scaffoldKey,
        appBar: AppBar(
          title: const Text('SignalR Plugin Example App'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('Connection Status: $_signalRStatus\n',
                  style: Theme.of(context).textTheme.headline5),
              Padding(
                padding: const EdgeInsets.only(top: 20.0),
                // ignore: deprecated_member_use
                child: RaisedButton(
                    onPressed: _buttonTapped, child: Text("Invoke Method")),
              )
            ],
          ),
        ),
        floatingActionButton: FloatingActionButton(
          child: Icon(Icons.cast_connected),
          onPressed: () async {
            await signalR.connect();
          },
        ),
      ),
    );
  }

  _onStatusChange(dynamic status) {
    if (mounted) {
      setState(() {
        _signalRStatus = status as String;
      });
    }
  }

  _onNewMessage(String methodName, dynamic message) {
    print('MethodName = $methodName, Message = $message');
  }

  _buttonTapped() async {
    print("_buttonTapped");
    final res =
        await signalR.invokeMethod<dynamic>("broadcastMessage", arguments: [
      {"name": "Test"},
      {"message": "Test message"}
    ]).catchError((error) {
      print(error.toString());
    });
    final snackBar = SnackBar(content: Text('SignalR Method Response: $res'));
    // ignore: deprecated_member_use
    _scaffoldKey.currentState.showSnackBar(snackBar);
  }
}

SignalR 代码,这在 html 页面中运行良好

namespace TestSignalR
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            //ConfigureAuth(app);
            app.MapSignalR();
        }
    }

    public class ChatHub : Microsoft.AspNet.SignalR.Hub
    {
        public void Send(string name, string message)
        {
            // Call the broadcastMessage method to update clients.
            Clients.All.broadcastMessage(name, message);
        }
    }
}

单击浮动操作按钮连接 SignalR 时出现以下错误

Error: MissingPluginException(No implementation found for method connectToServer on channel signalR)
    at Object.createErrorWithStack (http://localhost:52884/dart_sdk.js:5345:12)
    at Object._rethrow (http://localhost:52884/dart_sdk.js:39347:16)
    at async._AsyncCallbackEntry.new.callback (http://localhost:52884/dart_sdk.js:39341:13)
    at Object._microtaskLoop (http://localhost:52884/dart_sdk.js:39173:13)
    at _startMicrotaskLoop (http://localhost:52884/dart_sdk.js:39179:13)
    at http://localhost:52884/dart_sdk.js:34686:9

请帮助解决此问题或提出任何其他可行的解决方案。

我们可以通过 Flutter 与 SignalR 通信吗?如果是,那怎么办?

【问题讨论】:

    标签: flutter dart signalr flutter-web signalr.client


    【解决方案1】:

    如果我是对的,你正在 Flutter Web 上尝试这个。在包的 Pub Site 上,它清楚地写着这个包还不能与 Flutter Web 一起使用。这是我计划在未来添加的内容,但遗憾的是尚未开始工作。

    【讨论】:

    • 感谢您的回复。能否请您告诉我们您计划何时在软件包中添加对 Web 的支持。
    • 现在我正在 Flutter android 上尝试这个,但出现错误。请检查此stackoverflow.com/questions/66365805/…
    猜你喜欢
    • 2018-12-01
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多