Я использую font_awesome_flutter в своем приложении для отображения некоторых значков ..

Я получаю имя значков из json в виде строк .. как я могу передать его значку?

Есть способ добиться этого?

Например:

Я получаю из json:

String icon = 'ad';

А затем я хочу использовать его так:

new Icon(FontAwesomeIcons.icon),

Я знаю, что это не так ... но как я могу это сделать? это выполнимо?

1
lamatat 22 Окт 2018 в 15:21

2 ответа

Лучший ответ

Я нашел способ, который может вам помочь. отредактируйте файл font_awesome_flutter.dart , как показано ниже, а также откройте его, как показано ниже.

Я просто демонстрирую с помощью двух иконок, с которыми вы можете работать сколько угодно или для всех.

< Сильный > font_awesome_flutter.dart

Библиотека font_awesome_flutter;

import 'package:flutter/widgets.dart';
import 'package:font_awesome_flutter/icon_data.dart';

// THIS FILE IS AUTOMATICALLY GENERATED!

class FontAwesomeIcons {

  static const createDoc = {
    'fiveHundredPx':  IconDataBrands(0xf26e),
    'accessibleIcon':  IconDataBrands(0xf368),
      //.......add all Icons HERE
  };

  static const IconData fiveHundredPx = const IconDataBrands(0xf26e);
  static const IconData accessibleIcon = const IconDataBrands(0xf368);
  static const IconData accusoft = const IconDataBrands(0xf369);
  static const IconData acquisitionsIncorporated = const IconDataBrands(0xf6af);
  static const IconData ad = const IconDataSolid(0xf641);
  static const IconData addressBook = const IconDataRegular(0xf2b9);
  static const IconData solidAddressBook = const IconDataSolid(0xf2b9);
  static const IconData addressCard = const IconDataRegular(0xf2bb);
  static const IconData solidAddressCard = const IconDataSolid(0xf2bb);
  //.......
  //.......add all Icons HERE To as already  in your file
  }

Теперь вы можете использовать следующий код:

import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';

void main() {
  runApp(new FontAwesomeGalleryApp());
}

class FontAwesomeGalleryApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Font Awesome Flutter Gallery',
      theme: new ThemeData.light().copyWith(
        iconTheme: new IconThemeData(size: 36.0, color: Colors.black87),
        textTheme: new TextTheme(
          body1: new TextStyle(fontSize: 16.0, color: Colors.black87),
        ),
      ),
      home: new Home(),
    );
  }
}

class Home extends StatelessWidget {

  String data = 'fiveHundredPx';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: new Container(
        child: Center(
          child: Icon(FontAwesomeIcons.createDoc[data.toString()]),
        ),
      ),
    );
  }
}

Я знаю, что That This Way немного сложен, но я нашел только этот путь.

0
Viren V Varasadiya 22 Окт 2018 в 13:15

Вы можете сохранить данные Unicode в файле Json. Например :

static const IconData clock = const IconDataRegular(0xf017);

Сохраните f017 в Json.

Позже используйте следующую функцию для преобразования в int.

int getHexFromStr(String fontCode) {
  int val = 0;
  int len = fontCode.length;
  for (int i = 0; i < len; i++) {
    int hexDigit = fontCode.codeUnitAt(i);
    if (hexDigit >= 48 && hexDigit <= 57) {
      val += (hexDigit - 48) * (1 << (4 * (len - 1 - i)));
    } else if (hexDigit >= 65 && hexDigit <= 70) {
      // A..F
      val += (hexDigit - 55) * (1 << (4 * (len - 1 - i)));
    } else if (hexDigit >= 97 && hexDigit <= 102) {
      // a..f
      val += (hexDigit - 87) * (1 << (4 * (len - 1 - i)));
    } else {
      throw new FormatException("An error occurred when converting");
    }
  }
  return val;
}  

И, наконец, используйте следующее:

Icon(IconDataSolid(getHexFromStr(' f017')))
0
Mayank 22 Окт 2019 в 20:11
52929254